Przejdź do treści
SECURITY ENGINEERING
BR-SAMPLE-WEB-2026-01
Wersja 1.0
PUBLICZNA PRÓBKA · BEZ DANYCH KLIENTA

Test penetracyjny aplikacji webowej i API

Northbridge Commerce — fikcyjna organizacja demonstracyjna

Przygotowane przez BreachroadKarol Rapacz · CEO · OSCP · PNPT
15 lipca 2026Okno testów: 06–10 lipca 2026
Klasyfikacja: publiczna demonstracjaSYNTHETIC / SAFE TO SHARE
BR / SAMPLE NOTICE

Przeczytaj przed użyciem próbki

To realistyczna demonstracja standardu raportowania Breachroad. Organizacja, systemy, identyfikatory, zapytania i ustalenia są fikcyjne. Dokument nie przedstawia projektu klienta, włamania ani danych produkcyjnych.

00 / INDEX

Zawartość raportu

  1. 01Podsumowanie zarządcze
  2. 02Metryka projektu
  3. 03Ryzyko i ustalenia
  4. 04Potwierdzona ścieżka ataku
  5. 05Plan naprawczy
  6. 06Szczegółowe ustalenia
  7. 07Pokrycie i ograniczenia
  8. 08Plan retestu
  9. 09Metodyka i źródła
01 / EXECUTIVE

Podsumowanie zarządcze

01 / Cel

Ustalić, czy uwierzytelniony klient może przekroczyć granicę tenanta, zmienić stan płatności albo zachować dostęp po zdarzeniu bezpieczeństwa konta.

02 / Wynik ogólny
WYSOKIE RYZYKO

Test potwierdził dwie luki wysokiego ryzyka. Konto o niskich uprawnieniach mogło odczytać fakturę innego tenanta, a webhook bez podpisu zmieniał stan płatności. Żaden scenariusz nie wymagał uprawnień administracyjnych.

03 / Konsekwencja biznesowa

Połączona ścieżka tworzy ryzyko poufności i nadużycia finansowego: dane klienta i faktury przekraczają granicę izolacji, a następnie zaufany stan płatności może zostać zmieniony poza prawidłowym przepływem operatora.

04 / Kontrole, które zadziałały

MFA było wymagane dla administratorów, endpointy administracyjne odrzucały role klientów, walidacja uploadu blokowała aktywną treść, a test nie potwierdził SQL injection ani zdalnego wykonania kodu.

02 / ENGAGEMENT

Metryka projektu

Testowane systemy

app.example.test · api.example.test · auth.example.test

Jawne wyłączenia

Denial of service, socjotechnika, infrastruktura zewnętrznego operatora płatności i dostęp do danych innych niż syntetyczne rekordy testowe.

Model testu

Test grey-box z użyciem dwóch odizolowanych tenantów klienta oraz testowej roli wsparcia. Konfiguracja zbliżona do produkcyjnej; wyłącznie dane syntetyczne.

Ograniczenia oceny punktowej

Pentest próbkuje uzgodnione ścieżki ataku w określonym czasie. Nie gwarantuje wykrycia każdej podatności ani niezmienności środowiska po zakończeniu prac.

03 / RISK

Ryzyko i ustalenia

0
CRITICAL
2
HIGH
2
MEDIUM
1
LOW
1
INFO
IDUstalenieCVSSRyzykoStatus
BR-01Dostęp do faktury innego tenanta przez brak autoryzacji obiektowej7.1WYSOKIEOTWARTE
BR-02Webhook płatności bez podpisu akceptowany przez logikę biznesową7.5WYSOKIEOTWARTE
BR-03Refresh token pozostaje ważny po zmianie hasła6.5ŚREDNIEOTWARTE
BR-04Proces odzyskiwania ujawnia zarejestrowane adresy e-mail5.3ŚREDNIEOTWARTE
BR-05Content Security Policy dopuszcza niebezpieczne skrypty inline3.1NISKIEOTWARTE
BR-06Zdarzenia bezpieczeństwa nie zawierają kontekstu granicy tenantaINFOOTWARTE
04 / ATTACK PATH

Potwierdzona ścieżka ataku

Istotne ryzyko jest czytelniejsze jako jedna sekwencja niż jako zestaw niepowiązanych alertów.

  1. STEP 01Przejęte konto klienta o niskich uprawnieniach
  2. STEP 02Identyfikator faktury pozyskany z prawidłowego procesu
  3. STEP 03API nie egzekwuje własności obiektu
  4. STEP 04Zwrócone dane faktury innego tenanta
  5. STEP 05Webhook bez podpisu zmienia zaufany stan płatności
05 / ROADMAP

Plan naprawczy

01

0–7 dni

Wymusić autoryzację obiektową przy odczycie faktur. Odrzucać każdy webhook bez poprawnego podpisu przed przetworzeniem danych biznesowych. Przejrzeć logi pod kątem odwołań między tenantami i ruchu webhook bez podpisu.

02

Do 30 dni

Scentralizować politykę autoryzacji, dodać negatywne testy izolacji tenantów, obrócić sekrety webhooków, unieważniać aktywne sesje po zmianie hasła i odzyskaniu konta oraz ograniczyć zapytania do procesu odzyskiwania.

03

Do 90 dni

Wprowadzić regresyjne testy bezpieczeństwa do CI, monitorować odmowy granicy tenantów i błędy weryfikacji podpisu oraz powtarzać test po istotnych zmianach tożsamości lub płatności.

06 / FINDINGS

Szczegółowe ustalenia

BR-01 / FINDING 01

Dostęp do faktury innego tenanta przez brak autoryzacji obiektowej

WYSOKIECVSS 7.1
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:L/A:N
Prawdopodobieństwo

Wysokie — jedno uwierzytelnione żądanie i identyfikator w poprawnym formacie

Wpływ

Wysoki — ujawnienie danych klienta i rozliczeń poza granicą tenanta

Sugerowany właściciel

API / Produkt

Przyczyna źródłowa
Endpoint weryfikuje sesję i identyfikator faktury, ale nie wiąże obiektu z tenantem uwierzytelnionego użytkownika.
Zanonimizowany dowód
GET /v1/invoices/inv_demo_9d3 z <TENANT_A_TOKEN> zwrócił HTTP 200 oraz tenant_id: tenant_demo_b.
Naprawa
Egzekwować własność tenanta w warstwie dostępu do danych, domyślnie odrzucać i dodać negatywne testy dla każdej referencji oraz roli.
Kryteria akceptacji retestu
Tenant A otrzymuje 404/403 dla każdej trasy faktury Tenanta B; brak różnic metadanych; testy obejmują listę, detal, PDF i eksport.
Odniesienia
CWE-639 · OWASP API1:2023 · WSTG-ATHZ-04
BR-02 / FINDING 02

Webhook płatności bez podpisu akceptowany przez logikę biznesową

WYSOKIECVSS 7.5
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N
Prawdopodobieństwo

Wysokie — publiczny endpoint nie wymaga poprawnego podpisu operatora

Wpływ

Wysoki — możliwość nadania zaufanego stanu „opłacone” poza przepływem operatora

Sugerowany właściciel

Płatności / Backend

Przyczyna źródłowa
Weryfikacja podpisu uruchamia się tylko wtedy, gdy nagłówek istnieje; brak wartości przechodzi do obsługi zdarzenia.
Zanonimizowany dowód
POST /v1/webhooks/payment bez X-Payment-Signature zwrócił HTTP 202 i zmienił status demonstracyjnej faktury na paid.
Naprawa
Weryfikować surowe body przed parsowaniem, odrzucać brak lub błąd podpisu, wymusić tolerancję czasu i idempotency oraz obrócić sekret.
Kryteria akceptacji retestu
Brakujące, błędne, powtórzone i wygasłe podpisy są odrzucane przed zmianą stanu; poprawne fixture przechodzi tylko raz.
Odniesienia
CWE-345 · OWASP API10:2023 · WSTG-BUSL-02
BR-03 / FINDING 03

Refresh token pozostaje ważny po zmianie hasła

ŚREDNIECVSS 6.5
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N
Prawdopodobieństwo

Średnie — wymaga posiadania wcześniej wydanego refresh tokenu

Wpływ

Wysoki — istniejąca sesja może przetrwać zmianę poświadczeń wykonaną z powodów bezpieczeństwa

Sugerowany właściciel

Tożsamość

Przyczyna źródłowa
Reset hasła zmienia poświadczenie, ale nie zwiększa generacji sesji ani nie unieważnia rodzin refresh tokenów.
Zanonimizowany dowód
Token wydany przed resetem uzyskał nowy access token po zakończeniu resetu i wysłaniu powiadomienia do użytkownika.
Naprawa
Unieważniać wszystkie rodziny refresh tokenów przy zmianie i odzyskaniu hasła; dodać widoczne zarządzanie sesjami oraz telemetrię zdarzeń.
Kryteria akceptacji retestu
Każdy token sprzed resetu jest odrzucany; aktywne sesje wygasają, a zdarzenie zawiera kontekst konta i urządzenia.
Odniesienia
CWE-613 · OWASP ASVS V3 · WSTG-SESS-06
BR-04 / FINDING 04

Proces odzyskiwania ujawnia zarejestrowane adresy e-mail

ŚREDNIECVSS 5.3
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N
Prawdopodobieństwo

Wysokie — zdalne, nieuwierzytelnione i możliwe do automatyzacji

Wpływ

Niski do średniego — ułatwia phishing, credential stuffing i profilowanie prywatności

Sugerowany właściciel

Tożsamość / UX

Przyczyna źródłowa
Treść i czas odpowiedzi różnią się dla zarejestrowanego i nieznanego adresu.
Zanonimizowany dowód
Znany adres zwrócił metadane kanału odzyskiwania; nieznany — odmienny kod i długość odpowiedzi.
Naprawa
Zwracać jeden komunikat, wyrównać obsługę, ograniczyć częstotliwość i wykrywać wzorce enumeracji.
Kryteria akceptacji retestu
Znane i nieznane konta mają równoważny status, strukturę body i praktyczny rozkład czasu.
Odniesienia
CWE-204 · OWASP ASVS V2 · WSTG-IDNT-04
BR-05 / FINDING 05

Content Security Policy dopuszcza niebezpieczne skrypty inline

NISKIECVSS 3.1
CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:U/C:L/I:N/A:N
Prawdopodobieństwo

Niskie — test nie potwierdził niezależnego punktu injection

Wpływ

Niski samodzielnie — osłabienie warstwy ochronnej przy przyszłym błędzie injection

Sugerowany właściciel

Frontend

Przyczyna źródłowa
Polityka produkcyjna zawiera unsafe-inline bez nonce lub hashy.
Zanonimizowany dowód
Content-Security-Policy zawiera script-src self unsafe-inline; próbkowane strony nie używają nonce.
Naprawa
Przenieść kod inline do zasobów statycznych, wdrożyć nonce lub hashe i najpierw uruchomić ostrzejszą politykę w report-only.
Kryteria akceptacji retestu
Brak unsafe-inline; wszystkie przepływy działają z wymuszoną CSP, a naruszenia są monitorowane.
Odniesienia
CWE-693 · OWASP Secure Headers Project
BR-06 / FINDING 06

Zdarzenia bezpieczeństwa nie zawierają kontekstu granicy tenanta

INFOCVSS —
Bez oceny CVSS
Prawdopodobieństwo

Luka operacyjna

Wpływ

Wolniejsze dochodzenie i słabszy materiał dowodowy przy podejrzeniu ruchu między tenantami

Sugerowany właściciel

Platforma / SOC

Przyczyna źródłowa
Logi aplikacji zapisują trasę i użytkownika, ale nie właściciela obiektu, tenant docelowy ani decyzję autoryzacji.
Zanonimizowany dowód
Nie można było skorelować zdarzeń faktur jednocześnie z tenantem aktora i właściciela obiektu.
Naprawa
Logować tenant aktora i celu, typ obiektu, decyzję i trace ID bez danych wrażliwych; alarmować przy próbie niedopasowania.
Kryteria akceptacji retestu
Kontrolowane odrzucone żądanie tworzy pełne, wyszukiwalne zdarzenie i uzgodniony sygnał detekcji.
Odniesienia
OWASP ASVS V7 · NIST SP 800-92
07 / COVERAGE

Macierz pokrycia

ObszarWynikUwagi
Uwierzytelnianie i odzyskiwanieCZĘŚCIOWOPotwierdzono problem cyklu sesji; MFA i jednorazowość tokenu resetu zadziałały.
Autoryzacja i tenantyNIEZALICZONEPotwierdzono brak autoryzacji obiektowej przy pobieraniu faktury.
Logika biznesowa i płatnościNIEZALICZONEAplikacja przyjmowała webhook bez podpisu.
Obsługa danych wejściowychZALICZONEW testowanych ścieżkach nie potwierdzono użytecznego injection.
Pliki i integracjeZALICZONEOgraniczenia uploadu i callbacków zadziałały w próbkowanych przypadkach.
Logowanie i detekcjaCZĘŚCIOWOZdarzenia istniały, lecz brakowało kontekstu granicy tenanta i błędów podpisu.
08 / RETEST

Plan retestu

Retest powinien użyć pierwotnych żądań oraz dwóch odizolowanych tenantów. Zamknięcie wymaga serwerowej kontroli własności na każdej trasie faktur, weryfikacji podpisu fail-closed przed obsługą webhooku, testu unieważniania sesji i pokrycia regresyjnego. Sama zmiana kodu nie oznacza zamknięcia.

01OTWARTE — pierwotny wpływ nadal można odtworzyć
02GOTOWE DO RETESTU — klient deklaruje wdrożenie poprawki
03ZAMKNIĘTE — pierwotny wpływ nie jest już możliwy
04CZĘŚCIOWO ZAMKNIĘTE — ryzyko spadło, ale kryteria nie są spełnione
09 / APPENDIX

Metodyka i źródła

CVSS v3.1 + business context

Ryzyko łączy wykazany wpływ biznesowy i warunki wykorzystania. CVSS v3.1 jest przejrzystym odniesieniem technicznym, ale nie zastępuje kontekstu środowiska. Każdy wynik liczbowy ma podany wektor.

OWASP · PTES · NIST

Struktura próbki korzysta z zaleceń raportowania OWASP WSTG, kryteriów PTES i NIST SP 800-115. Identyfikatory, dowody, komponenty, naprawa oraz kryteria retestu zachowują pełną śledzalność.

Karol Rapacz · CEO · OSCP · PNPT
BR-SAMPLE-WEB-2026-01
Klasyfikacja: publiczna demonstracja