Co testujemy
Każdy skan najpierw uruchamia ten sam deterministyczny silnik — zero losowości, zero zgadywania. Baseline (8 testów) daje szybką informację przy każdym pushu; Deep (430+ sprawdzeń) uruchamia pełny pakiet według harmonogramu lub przed wydaniem. Na dodatek: triage wspierany przez AI, autonomiczny hacker mode i kwestionariusz kodu (ask mode, SaaS+) na to, czego żaden skaner nie widzi z zewnątrz.
430+ sprawdzeń łącznie: 149 automatycznych testów skanu + 280+ pytań przeglądu hardeningu.
Baseline — 8 testów przy każdym uruchomieniu
Zepsuta autoryzacja
Sprawdza, czy endpoint wymagający uwierzytelnienia działa bez tokenu lub z losowym tokenem.
Jak: Powtarza żądanie bez nagłówka Authorization oraz z losowym tokenem; 2xx oznacza brak lub zepsutą kontrolę dostępu.
Przykład: GET /users/me zwraca 200 bez tokenu → każdy może czytać profil.
BOLA / IDOR
Sprawdza, czy podmiana identyfikatora zasobu daje dostęp do danych kogoś innego (broken object-level authorization).
Jak: Heurystyki po parametrach podobnych do ID: próbuje innych/typowych identyfikatorów i porównuje odpowiedzi pod kątem wycieku danych.
Przykład: GET /orders/124 zwraca zamówienie innego klienta → krytyczny wyciek danych.
Mass assignment
Sprawdza, czy serwer po cichu akceptuje dodatkowe pola, których nigdy nie udokumentowano.
Jak: Dodaje dodatkowe pola do payloadu i szuka ich echa/utrwalenia w odpowiedzi.
Przykład: POST /users akceptuje {"is_admin": true} → eskalacja uprawnień.
Injection (SQL / NoSQL / JSON)
Sonduje parametry zapytań i pola body pod kątem podatności injection.
Jak: Wysyła klasyczne payloady SQL/NoSQL/JSON i dopasowuje sygnatury błędów oraz anomalie czasowe w odpowiedziach.
Przykład: ' OR '1'='1 w ?search= wywołuje błąd SQL → parametr podatny na injection.
Rate limiting
Sprawdza, czy API ogranicza powtarzane żądania.
Jak: Wysyła serię identycznych żądań na jeden endpoint; brak 429 oznacza otwarte drzwi dla brute force i scrapingu.
Przykład: 12 szybkich POST /login bez 429 → możliwy credential stuffing.
Błędna konfiguracja CORS
Sprawdza, czy API odbija dowolne Origin z dozwolonymi poświadczeniami.
Jak: Wysyła złośliwe nagłówki Origin i analizuje Access-Control-Allow-Origin / Allow-Credentials.
Przykład: Origin: https://evil.example odbity z credentials → kradzież sesji przez przeglądarkę.
Nagłówki bezpieczeństwa
Sprawdza brak podstawowych nagłówków bezpieczeństwa HTTP.
Jak: Czyta nagłówki odpowiedzi (nosniff, frame options, HSTS, CSP, referrer policy) na każdym celu.
Przykład: Brak X-Content-Type-Options i ochrony ramek → ryzyko clickjackingu / MIME-sniffingu.
Wrażliwe parametry
Znajduje sekrety, tokeny i hasła przekazywane w query stringu URL.
Jak: Skanuje nazwy parametrów pod kątem kluczy podobnych do sekretów (token, key, password, secret), które wyciekają do logów i historii przeglądarki.
Przykład: GET /reset?token=abc123 w URL → sekret trafia do logów proxy.
Deep — 141 dodatkowych testów dla skanów harmonogramowych i wydaniowych
Odkrywanie shadow API
Znajduje nieudokumentowane endpointy, które odpowiadają za Twoimi plecami (admin, debug, stare wersje, backupy).
Jak: Sonduje typowe warianty udokumentowanych ścieżek oraz ścieżki globalne (/health, /swagger.json, /actuator); 2xx/3xx na nieudokumentowanej ścieżce to znalezisko.
Przykład: /admin/users odpowiada 200, ale nie ma go w specyfikacji → ukryta powierzchnia ataku.
Słabości JWT
Atakuje sam token: alg=none, niezweryfikowany podpis, słaby sekret HMAC, brak wygaśnięcia, key-confusion.
Jak: Najpierw baseline (poprawny token działa, śmieciowy jest odrzucany — inaczej to zwykła zepsuta autoryzacja); potem powtarza zmutowane tokeny tylko na zabezpieczonych endpointach.
Przykład: Token z alg=none zaakceptowany → każdy może sfałszować sesję.
Manipulacja metodą HTTP
Sprawdza, czy kontrola dostępu jest podpięta tylko pod udokumentowaną metodę.
Jak: Próbuje tej samej ścieżki innymi czasownikami (GET→POST/PUT/DELETE); 2xx z treścią przy niezadeklarowanej metodzie to obejście.
Przykład: GET /admin → 403, ale POST /admin → 200 → obejście autoryzacji.
Fingerprint technologii + aktualność wersji
Identyfikuje stack serwera po nagłówkach i stronach błędów oraz oznacza oprogramowanie po końcu wsparcia.
Jak: Zbiera nagłówki Server / X-Powered-By z GET / i celowego 404, dopasowuje do wbudowanej tabeli wersji; EOL to wysoka waga.
Przykład: Server: PHP/7.4 (end-of-life) → prawdopodobne niezałatane CVE.
Mass assignment v2 (eskalacja tylko do odczytu)
Idzie krok dalej niż v1: dowodzi eskalacji uprawnień przez pola tylko do odczytu.
Jak: Wysyła sondy canary, ignoruje pola zadeklarowane w schemacie i wymaga dokładnego echa wartości; tylko pola o randze uprawnień (role, is_admin) podnoszą wagę do wysokiej.
Przykład: {"role":"admin"} odbite dokładnie → potwierdzona eskalacja.
Checklista ujawniania informacji
Przemiata znane wrażliwe ścieżki (.git, .env, konsole debug, aktory, metryki).
Jak: Liczy się treść, nie status: znalezisko wymaga prawdziwego markera w body; puste odpowiedzi i strony logowania milczą. Do tego wykrywanie stack trace na nieistniejącej ścieżce.
Przykład: /.git/config ujawnia wnętrze repozytorium → wysoka waga.
Rate-limit v2 (diff + obejście)
Zadaje trudniejsze pytania: czy login jest ograniczany, gdy reszta API tak? Czy limit da się obejść podszytym nagłówkiem IP?
Jak: Porównuje endpoint auth z neutralnym, potem powtarza żądania z rotacją X-Forwarded-For w kontrolowanych warunkach.
Przykład: Nielimitowany login obok limitowanego API → credential stuffing; rotacja XFF omija 429 → wysoka waga.
Powtórka nagłówka tenanta
Sprawdza, czy nagłówki tenanta od klienta sterują dostępem do danych.
Jak: Powtarza żądanie z podmienionym X-Tenant-ID/X-Org-ID (maks. 2 żądania); inne dane przy tym samym tokenie to średnia waga — pełna powtórka z innym tokenem to misja hacker mode.
Przykład: Nagłówek other9 ujawnia obce wiersze → wyliczaj tenanta po stronie serwera.
Higiena claims tokenu
Oznacza tokeny skanowania bez wygaśnięcia lub odbiorcy.
Jak: Zero żądań: dekoduje Bearer JWT skanu; brak exp to średnia waga, brak aud niska — powtórka między API wymaga drugiego API (hacker).
Przykład: Brak exp/aud → krótki TTL + przypięty odbiorca.
Łańcuchowanie ścieżek ataku
Łańcuchuje znaleziska w etapy kill-chain w raporcie.
Jak: Zero żądań: silnik grupuje znaleziska (auth-bypass → dostęp do danych → eksfiltracja) i emituje informacyjny łańcuch — wejście dla grafu TTP.
Przykład: juggling → eksport → napraw początek łańcucha.
Łańcuch CORS + CSRF
Atakuje samą logikę allowlisty, a nie tylko proste odbicie.
Jak: Sonduje Origin: null, domeny łudząco podobne ({host}.evil.example) oraz preflight dla metod zapisu z poświadczeniami.
Przykład: Zaufany origin null z poświadczeniami → kradzież sesji przez iframe w sandboxie.
Canary SSRF
Sprawdza, czy API pobiera URL-e podane przez atakującego (SSRF) — bezpiecznie, wyłącznie wobec naszego własnego listenera.
Jak: Wstawia nasz canary URL do pól przyjmujących URL (webhook, avatar, import); wywołanie zwrotne do naszej infrastruktury potwierdza SSRF. Nigdy nie atakujemy osób trzecich.
Przykład: POST /webhooks z naszym URL → serwer wykonuje callback → potwierdzony SSRF.
Flagi cookie sesji
Sprawdza, czy cookies sesji na endpointach logowania mają flagi Secure, HttpOnly i restrykcyjną politykę SameSite.
Jak: Czyta Set-Cookie w odpowiedziach logowania; jedno znalezisko na każdą brakującą flagę. Liczą się tylko odpowiedzi z Set-Cookie — brak cookie, brak znaleziska.
Przykład: POST /login ustawia sesję bez HttpOnly → kradzież przez XSS.
Przewidywalna enumeracja ID
Sprawdza, czy kolejne identyfikatory zasobów można zbierać jeden po drugim (enumeracja użytkowników).
Jak: Wysyła żądania z ID 1/2/3 na ścieżki szablonowe; trzy różne zestawy danych oznaczają przewidywalne ID. Jednolite 404 milczą. Raz na skan.
Przykład: /users/1, /users/2, /users/3 zwracają profile → bazę użytkowników można zebrać.
Oracle czasu odpowiedzi
Sprawdza, czy czas odpowiedzi logowania zależy od sekretu (side-channel czasowy).
Jak: Naprzemiennie krótkie i długie hasła (4 rundy); rozłączne przedziały czasowe z różnicą >200 ms dają niskiej wagi trop. Raz na skan.
Przykład: Długie hasła konsekwentnie 300 ms wolniejsze → warto naprawić oracle czasowy.
Path traversal / LFI
Sprawdza, czy parametry plików sięgają systemu plików serwera (local file inclusion).
Jak: Wysyła ../ i warianty zakodowane; znacznik /etc/passwd w treści to wysokie znalezisko. Maks. 2 sondy na cel.
Przykład: ?file=../../../../etc/passwd zwraca root:x:0: → pliki serwera są czytelne.
Open redirect
Sprawdza parametry przekierowań pod kątem open redirect do hostów atakującego (phishing / kradzież tokenów).
Jak: Wstawia https://evil.example do parametrów typu next/url/redirect bez podążania za przekierowaniem; 3xx Location na ten host to wysokie znalezisko.
Przykład: /goto?next=https://evil.example → 302 na evil.example → kradzież kodu logowania.
HTTP TRACE / TRACK
Sprawdza, czy niebezpieczne metody TRACE/TRACK są włączone (cross-site tracing).
Jak: Wysyła OPTIONS raz na skan; nagłówek Allow zawierający TRACE/TRACK daje niskie znalezisko.
Przykład: Allow: GET, POST, TRACE, TRACK → cookies czytelne przez XST.
Pliki backupu / edytora
Sprawdza, czy kopie zapasowe (.bak, ~) udokumentowanych ścieżek są serwowane z kodem źródłowym.
Jak: Próbuje sufiksów .bak i ~; 200 ze znacznikami kodu źródłowego to niskie znalezisko. Maks. 8 żądań na skan.
Przykład: /config.js.bak udostępnia źródło serwera → wyciek sekretów i logiki.
Domyślne poświadczenia
Sprawdza, czy domyślne loginy fabryczne (admin:admin, admin:password) nadal działają.
Jak: Próbuje dwóch domyślnych par wyłącznie na endpoincie logowania, raz na skan; logowanie zwracające token to wysokie znalezisko. Nigdy nie dotyka prawdziwych kont.
Przykład: POST /session admin:admin → token sesji → pełne przejęcie.
Sztuczki null-byte / Unicode
Sprawdza, czy kodowanie null-byte i overlong Unicode omija filtry wejściowe.
Jak: Porównuje sondę bazową z payloadami %00 i %c0%ae; znaczniki systemu plików lub zmiana 404→200 dają znalezisko.
Przykład: ..%c0%ae/etc/passwd zwraca root:x:0: → obejście filtra.
Ponowne użycie kodu OAuth
Sprawdza, czy kod autoryzacyjny można wymienić dwukrotnie (musi być jednorazowy).
Jak: Wysyła ten sam kod sondy dwa razy do endpointu tokenów; dwa wydane tokeny oznaczają kody wielokrotnego użytku.
Przykład: Ten sam kod → dwa tokeny dostępu → przechwycony kod nigdy nie wygasa.
Ponowne użycie OTP
Sprawdza, czy kod jednorazowy przeżyje pierwszą weryfikację (musi zostać spalony po użyciu).
Jak: Wysyła ten sam kod dwa razy do endpointów verify/OTP; dwa sukcesy oznaczają OTP wielokrotnego użytku. Spalone kody milczą.
Przykład: Ten sam 000000 weryfikuje się dwukrotnie → przechwycony kod SMS nadal działa.
Fałszowanie podpisanego cookie
Sprawdza, czy cookie sesji to dane kontrolowane przez klienta, które można przepisać na admina.
Jak: Loguje się, dekoduje cookie base64/JSON, fałszuje role→admin i odtwarza je na chronionych ścieżkach; znaczniki admina tylko przy sfałszowanym cookie oznaczają brak podpisu. Nieprzezroczyste tokeny milczą. Raz na skan.
Przykład: Sfałszowane cookie sesji → /profile zwraca admin:true → pełne przejęcie.
Niebezpieczna deserializacja
Sprawdza, czy dane żądania docierają do deserializatora po stronie serwera (pickle / Java / PHP).
Jak: Wysyła magiczne bajty (pickle, Java STREAM_MAGIC, PHP serialized) do pól treści; znaczniki błędów deserializacji to wysokie znalezisko. Czyste 400 milczą.
Przykład: Magiczne bajty → pickle.UnpicklingError → ścieżka do zdalnego wykonania kodu.
Blind SQL injection (time-based)
Wykrywa SQL injection po różnicy czasu odpowiedzi, nie tylko po znacznikach błędów.
Jak: Porównuje bazowy GET z payloadem SLEEP(2) na tym samym parametrze; Δt ponad 1,5 s bez błędu oznacza blind injection. Raz na skan, 2 żądania.
Przykład: q=1' AND SLEEP(2)-- - → opóźnienie +2,0 s → wysokie.
Znaczniki poleceń OS / LDAP
Sprawdza, czy dane wejściowe docierają do powłoki lub serwera katalogowego (`;id`, `|whoami`, filtry LDAP).
Jak: Wysyła separatory poleceń i filtr LDAP do parametrów zapytania; wyjście uid=/gid= lub wyjątki LDAP (bez zwykłego odbicia) oznaczają wykonanie. Czyste echa milczą.
Przykład: host=|whoami → uid=0(root) w treści → wysokie.
Obejście przez HTTP method-override
Sprawdza, czy X-HTTP-Method-Override omija kontrole metody.
Jak: Wysyła bazowy POST, a potem powtarza z X-HTTP-Method-Override: DELETE; zmiana błąd→sukces z inną treścią oznacza, że override jest respektowany.
Przykład: POST → 405, ten sam POST + override → 200 deleted:true → średnie.
Zagnieżdżony mass assignment
Testuje głębokie wiązanie obiektów payloadami {"user":{"role":"admin"}}.
Jak: Wysyła bazowy POST i zagnieżdżone ciało role=admin; znaczniki admina tylko w zagnieżdżonej odpowiedzi oznaczają brak rekurencyjnej allowlisty w binderze.
Przykład: Zagnieżdżone role=admin → odbite "role":"admin" → średnie.
Sekrety Actuatora
Czyta /actuator/env, /actuator/configprops i /metrics pod kątem ujawnionych sekretów.
Jak: Pobiera każdą ścieżkę raz na skan; słowo kluczowe sekretu plus wartość w cudzysłowie (nie sam status 200) oznacza, że actuator wycieka poświadczenia.
Przykład: /actuator/env → "db.password" z wartością → wysokie.
PII na stronach błędów
Sprawdza, czy treści błędów 4xx odbijają dane osobowe (e-maile, IBAN, PESEL z kontekstem).
Jak: Raz na skan żąda nieistniejącej ścieżki i analizuje treść błędu regexem; rozszerzenia obrazów i plików statycznych są wykluczone. Ogólne błędy milczą.
Przykład: 404 Traceback → [email protected] → średnie (RODO).
Sekrety w sourcemapach
Przeszukuje publiczne bundle *.map pod kątem osadzonych kluczy API i tokenów.
Jak: Pobiera typowe ścieżki map raz na skan i uruchamia indeks wzorców sekretów na sourcesContent; mapy bez trafień milczą.
Przykład: main.js.map → AKIA… → wysoki wyciek źródeł.
Łańcuch przejęcia auth-to-RCE
Odtwarza pełny łańcuch oracle-forge-escalate-deserialize: oracle → forge → escalate → deserialize w jednym przebiegu.
Jak: Loguje się, fałszuje cookie sesji na admina, potwierdza, że panel admina mu ufa, a następnie wysyła magiczne bajty pickle do importu jako admin; każde ogniwo musi się potwierdzić, inaczej cisza. 3 żądania, raz na skan.
Przykład: Sfałszowane cookie → /admin ufa → /admin/import deserializuje → krytyczne przejęcie całego łańcucha.
Wersja serwera → lookup CVE
Mapuje fingerprint wersji serwera na znane CVE z lokalnego cache NVD (odświeżanego co noc).
Jak: Raz na skan czyta Server / X-Powered-By i dopasowuje linie wydań do indeksu offline; waga wynika z CVSS. Nieznane stacki milczą.
Przykład: Server: nginx/1.18.0 → CVE-2021-23017 (CVSS 7.7, wysokie).
SCA bibliotek w bundle
Znajduje przestarzałe biblioteki JavaScript w bundle'ach i mapuje je na CVE (biuletyny OSV).
Jak: Zbiera skrypty same-origin (maks. 4 żądania na skan), wyciąga wersje (jQuery, lodash, React, Vue…) i sprawdza każdą w indeksie offline. Nowoczesne biblioteki milczą.
Przykład: jQuery 3.4.1 w bundle → CVE-2020-11022/11023 (XSS).
Batch IDOR
Sprawdza, czy endpointy bulk zwracają obiekty innych osób bez autoryzacji per rekord.
Jak: Wysyła ID [1,2,3] do pól batch i porównuje klucze właściciela (user_id, email…); obiekty 2+ właścicieli w jednej odpowiedzi to znalezisko. Batche z jednym właścicielem milczą.
Przykład: POST /batch/orders → alice, bob i carol w jednym wywołaniu → brak autoryzacji per rekord.
Ochrona przed SMS toll-fraud
Sprawdza, czy endpointy wiadomości przyjmują numery bez trasy (brak blokady zakresów premium).
Jak: Wysyła jeden fikcyjny numer +1555, który nigdy nie zadzwoni i nie kosztuje; werdykt „wysłano/zakolejkowano” oznacza brak ochrony przed toll fraud. Odrzucone numery milczą.
Przykład: +15550001111 zgłoszony jako wysłany → numery premium też prawdopodobnie są naliczane.
Sekrety w odpowiedziach
Skanuje treści odpowiedzi pod kątem wyciekłych kluczy, tokenów i numerów kart (AWS, GitHub, Stripe, Slack, PEM, PAN).
Jak: Deterministyczne wzorce na maks. 5 odpowiedziach na skan; numery kart wymagają testu Luhna i kontekstu, próbki są maskowane do 4 ostatnich znaków. Czyste strony milczą.
Przykład: Token ghp_… w /page → wysokie; obróć i usuń.
Polityka ujawniania security.txt
Sprawdza, czy strona publikuje kontakt security.txt dla badaczy.
Jak: Czyta /.well-known/security.txt (fallback /security.txt), maks. 2 żądania na skan; plik bez Contact liczy się jako brakujący. Opublikowane pliki milczą.
Przykład: Obie ścieżki 404 → niskie; dodaj Contact + politykę ujawniania.
Wymuszanie DMARC
Sprawdza, czy domena wymusza DMARC (ochrona przed podszywaniem w phishingu exact-from).
Jak: Pasywny lookup DNS TXT dla _dmarc (zero żądań HTTP); brak rekordu to średnie, polityka bez reject to niskie, p=reject milczy.
Przykład: Brak rekordu _dmarc → atakujący mogą podszyć się pod Twoją domenę.
Rekonesans Certificate Transparency
Wymienia subdomeny ujawnione w publicznych logach Certificate Transparency.
Jak: Jedno żądanie do crt.sh na skan; odkryte nazwy (dev, staging…) są raportowane jako inwentarz powierzchni ataku. Offline lub puste milczy.
Przykład: dev.example.com w logu CT → sprawdź lub wyłącz.
Enumeracja popularnych subdomen
Sprawdza, czy łatwe do odgadnięcia nazwy (www, api, dev, staging, admin…) rozwiązują się publicznie.
Jak: Tylko lookup DNS A (zero żądań HTTP, lista 10 nazw); rozwiązujące się nazwy są raportowane jako inwentarz. Brak wyników milczy.
Przykład: staging.example.com rozwiązuje się → czy jest chroniony?
Fingerprint WAF/CDN
Identyfikuje stack edge (Cloudflare, CloudFront, Akamai…) po pasywnych znacznikach.
Jak: Jedno GET / na skan, tylko znaczniki nagłówków i cookies (cf-ray, x-amz-cf-id…); informacyjne, zasila pytanie o reguły WAF w ask mode.
Przykład: Edge: Cloudflare → potwierdź reguły SSRF w WAF.
Nagłówki cyklu życia API (Sunset)
Sprawdza, czy wersjonowane endpointy (/v1/…) ogłaszają deprecację.
Jak: Sondowane są tylko wersjonowane ścieżki GET; brak nagłówków Sunset/Deprecation jest informacyjny. Ogłoszone cykle życia milczą.
Przykład: /v1/orders bez Sunset → ryzyko przestarzałej wersji.
Sekrety w przykładach OpenAPI
Skanuje opublikowane specyfikacje OpenAPI/Swagger pod kątem realistycznie wyglądających sekretów w przykładach.
Jak: Czyta openapi.json / swagger.json / api-docs (maks. 3 żądania), dopasowuje wzorce kluczy/tokenów; czyste specyfikacje milczą.
Przykład: "example": "ghp_…" w specyfikacji → średnie; deweloperzy to kopiują.
Confusion algorytmu JWT
Sprawdza, czy weryfikator przypina jeden algorytm (confusion RS→HS, alg=none z podpisem, brak aud).
Jak: Na endpointach z działającym Bearer JWT: odtwarza podpis RS/EC pod nagłówkiem HS256, token alg=none z bajtami podpisu i flaguje brak claimu aud. Czyste weryfikatory dostają tylko niską uwagę o aud.
Przykład: Podpis RS256 zaakceptowany jako HS256 → fałszowanie tokenów kluczem publicznym.
Session fixation
Sprawdza, czy ID sesji jest rotowane przy logowaniu.
Jak: Pobiera cookie sid sprzed logowania, loguje się z nim i porównuje: ten sam sid po logowaniu to średnie. Rotowane lub odrzucone logowania milczą. Maks. 2 żądania na skan.
Przykład: sid=abc przed i po /login → sesje podłożone przez atakującego przetrwają.
Walidacja refresh tokenu
Sprawdza, czy endpoint refresh wydaje tokeny dla śmieciowego wejścia.
Jak: Wysyła jeden nieprawidłowy refresh_token do endpointów refresh; access_token w odpowiedzi 200 to wysokie. Ponowne użycie ważnego tokenu wymaga prawdziwego tokenu → fallback ask.
Przykład: Śmieciowy refresh → 200 z access_token → walidacja zepsuta.
Downgrade PKCE
Sprawdza, czy endpoint authorize wydaje kody bez PKCE.
Jak: Czyta openid-configuration, a następnie żąda authorize bez code_challenge (bez podążania za przekierowaniami); kod w Location to średnie. Brak discovery milczy.
Przykład: 302 z ?code= i bez challenge → ryzyko przechwycenia dla klientów publicznych.
Replay po logout
Sprawdza, czy POST /logout faktycznie unieważnia token.
Jak: Ustala bazę dla działającego tokenu na /me, wywołuje logout i powtarza: nadal 200 to średnie. Działa tylko z tokenem przekazanym do skanu (Twoim własnym). Maks. 3 żądania.
Przykład: Token żyje po logout → skradzione tokeny pozostają użyteczne.
Zatruwanie Host header
Sprawdza, czy linki reset/verify są budowane z nagłówka Host podanego przez atakującego.
Jak: Wysyła Host: evil.com i X-Forwarded-Host do endpointów logowania/resetu; zły host w linku reset/verify/token to wysokie. Maks. 2 żądania na skan.
Przykład: Mail resetu linkuje do evil.com → przejęcie konta.
Obejście auth magicznym nagłówkiem
Sprawdza, czy nagłówki zaufania proxy (X-Forwarded-For, X-Original-URL…) omijają autoryzację.
Jak: Ustala bazę dla działającego tokenu vs anonimowe 401, potem powtarza anonimowo z 4 magicznymi nagłówkami; 200 to wysokie. Publiczne endpointy milczą. Maks. 6 żądań.
Przykład: X-Original-URL anonimowo → 200 → błąd zaufania gatewaya.
Ewazje walidacji przekierowań
Sprawdza walidację przekierowań pod kątem sztuczek z backslashem i białymi znakami.
Jak: Odtwarza 5 zakodowanych payloadów (/\, %5c, tab…) w parametrach przekierowania bez podążania za nimi; zły host w Location to wysokie. Rozszerza zwykły test open redirect.
Przykład: ?next=%5cevil.com → 302 na evil.com → naiwny walidator.
Mass assignment przez query string
Sprawdza, czy ?role=admin w query scala się z uprzywilejowanymi polami.
Jak: Wysyła to samo ciało dwa razy (czyste vs ?role=admin&isAdmin=true) i porównuje: nowe znaczniki admina tylko w wariancie z query to wysokie. 2 żądania na cel.
Przykład: POST /users?role=admin → "role":"admin" w odpowiedzi.
Oracle błędów (403 vs 404)
Sprawdza, czy kody błędów ujawniają, które obiekty istnieją.
Jak: Porównuje ID o tym samym kształcie (1 vs 999999999) z tokenem: podział 403/404 jest informacyjny. Jednolite odpowiedzi milczą.
Przykład: 403 na /orders/1, 404 na /orders/9… → enumeracja ID.
Injection przez sort/filter
Sprawdza, czy parametry sort/filter docierają do silnika zapytań.
Jak: Sonduje ?sort=password i filter[$ne]; 500 ze znacznikami bazy to średnie. Czyste 200 milczą. Maks. 3 żądania na cel.
Przykład: ?sort=password → psycopg SyntaxError → powierzchnia injection.
Sekret w query URL
Oznacza endpointy GET, które przenoszą sekrety w query stringu.
Jak: Pasywna analiza specyfikacji (zero żądań): token/reset_token/session w parametrach query to średnie. Sekrety powinny być w nagłówkach lub ciele.
Przykład: GET /reset?reset_token=… → średnie; wyciek przez Referer/logi.
Obejście flagi MFA
Sprawdza, czy endpoint step-up ufa fladze MFA podanej przez klienta.
Jak: Wysyła flagi mfa_passed/mfa_verified do endpointów verify (maks. 3 żądania); werdykt token/sukces to krytyczne.
Przykład: {"mfa_passed":true} → 200 z tokenem → dekoracyjne 2FA.
Audyt scope/grant OAuth
Audytuje reklamowane scope'y i endpoint tokenów pod kątem otwartego wydawania.
Jak: Czyta openid-configuration (scope'y podobne do admina → info), potem próbuje client_credentials z błędnym sekretem + scope=admin; token to krytyczne. Maks. 2 żądania.
Przykład: Błędny sekret → access_token → brak weryfikacji poświadczeń.
Ochrona przed brute-force OTP
Sprawdza, czy endpointy verify ograniczają zgadywanie.
Jak: Wysyła 5 błędnych kodów; każde 429/lockout/cooldown milczy, pięć zwykłych odrzuceń to średnie. Maks. 5 żądań na skan.
Przykład: 5× błędny kod, brak 429 → przestrzeń 6 cyfr do wyliczenia.
Ochrona przed zmęczeniem push MFA
Sprawdza, czy wyzwania push mają cooldown.
Jak: Wysyła 3 żądania push pod rząd; cooldown/429 milczy, 3 akceptacje to średnie. Maks. 3 żądania.
Przykład: 3 pushe zaakceptowane natychmiast → ryzyko zmęczenia i phishingu.
Sygnał step-up dla wrażliwych akcji
Oznacza wrażliwe akcje (transfer, payout, admin) akceptowane tokenem bez amr/acr.
Jak: Pasywne sprawdzenie claimów JWT na wrażliwych ścieżkach POST (zero żądań); tokeny z amr/acr milczą. Informacyjny sygnał hardeningu.
Przykład: POST /transfer bez amr/acr → zweryfikuj step-up po stronie serwera.
Sonda SSTI
Sprawdza, czy wyrażenia szablonów są ewaluowane po stronie serwera.
Jak: Wysyła {{7*7}} i ${7*7} do pól tekstowych; samo 49 bez odbicia to wysokie. Maks. ok. 6 żądań na skan.
Przykład: {{7*7}} → 49 → template injection blisko RCE.
Fingerprint silnika SSTI
Identyfikuje silnik szablonów za SSTI po składni charakterystycznej dla silnika.
Jak: Próbuje po jednym znaczniku ERB/Ruby/Smarty/Twig; ewaluacja to wysokie, a silnik jest nazwany w dowodzie.
Przykład: <%= 7*7 %> → 49 → fingerprint ERB.
Sonda XXE
Sprawdza, czy wejście XML rozwiązuje zewnętrzne encje.
Jak: Wysyła DOCTYPE z wewnętrzną encją-canary jako application/xml; ekspansja to wysokie, ujawnienie błędu parsera to średnie. Maks. 2 żądania.
Przykład: &xxe; → XXE_PROBE w odpowiedzi → ryzyko plików/SSRF.
Injection CRLF/nagłówków
Sprawdza, czy CRLF w parametrach staje się nagłówkiem odpowiedzi.
Jak: Wstrzykuje payloady %0d%0a do parametrów query; nagłówek odpowiedzi X-Scan-Probe to wysokie. Maks. 3 żądania.
Przykład: Wstrzyknięty CRLF → nagłówek odpowiedzi → ryzyko response splitting.
Prototype pollution
Sprawdza, czy klucze __proto__/constructor utrzymują się po stronie serwera.
Jak: Wysyła zanieczyszczone klucze, a potem odczytuje obiekt; znacznik w odczycie to wysokie. 2 żądania.
Przykład: __proto__ przetrwa do GET → object pollution.
HTTP Parameter Pollution
Sprawdza, jak serwer rozwiązuje zduplikowane parametry query.
Jak: Porównuje odpowiedzi dla pojedynczego i zduplikowanego (?id=1&id=2); błąd parsera przy duplikacie to niskie i oznacza ręczny przegląd ścieżek auth.
Przykład: Duplikat → 500 z błędem bazy → niejednoznaczność parsera.
Fingerprint dialektu SQL
Identyfikuje silnik bazy danych po treści błędu.
Jak: Wysyła pojedynczy apostrof raz na skan; znacznik dialektu (psycopg, mysql, sqlite, mssql, oracle, mongodb) jest informacyjny i ukierunkowuje kolejne payloady.
Przykład: ' → psycopg2.SyntaxError → PostgreSQL.
Injection second-order
Wstawia zapisany znacznik i sprawdza, czy wraca bez escapowania.
Jak: Zapisuje canary ze znakami cudzysłowów/nawiasów, a potem odczytuje; surowe znaki specjalne to średnie. 2 żądania. Wyjście z escapowaniem HTML milczy.
Przykład: Zapisana notatka zwraca surowe cudzysłowy → ryzyko w eksporcie/panelu admina.
Login type-juggling
Próbuje haseł niebędących stringami (true, array, $gt, 0) na logowaniu.
Jak: Ustala bazę z błędnym hasłem (musi być 4xx), potem wysyła 4 sondy typowane; każde zaakceptowane logowanie to wysokie. Maks. 5 żądań.
Przykład: password=true → token → błąd luźnego porównania w auth.
Atomowość batcha
Sprawdza, czy batch z jedną nieprawidłową operacją jest odrzucany, czy połykany.
Jak: Wysyła [valid, invalid] w jednym batchu (1 żądanie); pełna akceptacja bez błędu per element to średnie.
Przykład: Nieprawidłowa operacja po cichu pochłonięta → częściowe wykonanie.
Ochrona przed replay
Sprawdza, czy Idempotency-Key jest respektowany na endpointach ruchu pieniędzy.
Jak: Wysyła dwa POST-y z tym samym kluczem (2 żądania); dwa różne ID zasobów to wysokie, to samo ID milczy.
Przykład: Ten sam klucz, dwa ID zamówień → podwójne obciążenie.
Manipulacja koszykiem/ceną
Sprawdza, czy pola pieniężne po stronie klienta są zaufane.
Jak: Modyfikuje price/amount/total/qty (maks. 3 żądania); zaakceptowana cena 0.01 lub mutacja w okolicy -1 qty to wysokie.
Przykład: price=0.01 zaakceptowane → sumy nie są przeliczane.
Zgadywanie kuponu
Sprawdza, czy kupon zgadnięty za pierwszym razem daje zniżkę.
Jak: Wysyła coupon=SCAN10 raz; znaczniki zniżki w odpowiedzi to niskie.
Przykład: Zgadnięty kod → zniżka → kody testowe działają na produkcji.
Kwota poniżej jednego centa
Sprawdza, czy ułamkowe kwoty są normalizowane.
Jak: Wysyła 0.9999999 raz; akceptacja bez błędu to niskie (ryzyko dryfu zaokrągleń).
Przykład: 0.9999999 zaakceptowane → używaj groszy jako liczb całkowitych.
Równoległe duplikaty
Wysyła dwie identyczne mutacje równolegle w przepływach jednorazowych.
Jak: Dwa równoległe POST-y (2 żądania); sukces obu to niskie i oznacza przegląd TOCTOU (blokady/idempotencja).
Przykład: Podwójne wykorzystanie zaakceptowane → przegląd atomowości.
Ujemne kwoty
Sprawdza, czy ujemne qty/amount jest odrzucane.
Jak: Wysyła -1 i -5 (maks. 2 żądania); akceptacja to wysokie (wektor zwrotu/środków).
Przykład: qty=-1 zaakceptowane → manipulacja środkami.
Zamiana waluty
Sprawdza, czy błędny kod waluty jest przyjmowany bez weryfikacji.
Jak: Wysyła currency=XXX/xxx (maks. 2 żądania); akceptacja to średnie.
Przykład: XXX zaakceptowane → dodaj allowlistę ISO-4217.
Manipulacja dostawą
Sprawdza, czy metoda wybrana przez klienta zeruje opłatę za dostawę.
Jak: Wysyła shipping_method=pickup raz; zerowa opłata w odpowiedzi to niskie.
Przykład: Metoda od klienta → dostawa 0 → cennik po stronie serwera.
Formuła CSV w eksporcie
Sprawdza endpointy eksportu pod kątem nieescapowanych komórek zaczynających się od formuły.
Jak: Żąda CSV raz; komórki zaczynające się od =/+/-/@ to średnie (spreadsheet injection w miejscu docelowym).
Przykład: =1+1 w eksporcie → sanityzuj miejsca docelowe.
Granica integer
Sonduje pola numeryczne wartościami granicznymi 32-bit.
Jak: Wysyła 2^31 i -(2^31)-1 (maks. 2 żądania); 500 lub cicha akceptacja to niskie.
Przykład: 2^31 → 500 → powierzchnia overflow.
Tolerancja nieznanych pól
Sprawdza, czy ścieżki zapisu odrzucają nieznane pola.
Jak: Dodaje jedno dodatkowe pole (1 żądanie); akceptacja jest informacyjna (ryzyko driftu/mass assignment).
Przykład: Dodatkowe pole 2xx → czy schematy są ścisłe?
Osiągalna stara wersja
Sprawdza, czy /v{n-1} odpowiada obok /v{n}.
Jak: Żąda starej ścieżki raz; 2xx to niskie (luki w auth/walidacji starych wersji).
Przykład: /v1 działa obok /v2 → wyłącz lub backportuj poprawki.
Pominięcie stanu workflow
Próbuje ustawić końcowy stan workflow bezpośrednio.
Jak: Wysyła status=completed/approved (maks. 2 żądania); akceptacja to średnie — przejściami musi sterować serwer.
Przykład: status=completed zaakceptowany → zabezpiecz przejścia stanów.
UUID IDOR + przewidywalność
Podmienia UUID w ścieżce na null UUID i porównuje obiekty.
Jak: Bazowe 200, potem alternatywny UUID (maks. 3 żądania); inny obiekt przy 200 to wysokie — UUID to identyfikator, nie capability.
Przykład: Obcy UUID → 200 z danymi → brak autoryzacji.
Kształt request smuggling
Sprawdza, czy ciało jest przetwarzane mimo Content-Length: 0.
Jak: Wysyła ciało z CL:0 raz; odbite przetwarzanie to średnie i oznacza potwierdzenie raw-socketem (CL/TE desync).
Przykład: Ciało zadziałało przy CL:0 → powierzchnia desync.
Fingerprint subdomain takeover
Sprawdza odpowiedź root pod kątem fingerprintów dangling host.
Jak: Jedno GET / na skan; 404/410 ze znacznikami GitHub Pages/S3/Heroku to wysokie — przeaudytuj CNAME.
Przykład: Znaczniki dangling CNAME → odzyskaj DNS.
Konfiguracja TLS (HSTS + ważność)
Sprawdza HSTS na HTTPS i ważność certyfikatu.
Jak: Brak HSTS to niskie; certyfikat wygasający w ciągu 30 dni to średnie (best-effort socket check, bezpieczny offline).
Przykład: Brak HSTS → powierzchnia SSL-stripping.
Confusion ścieżek
Próbuje wariantów /../, //, wielkości liter, końcowego slasha i średnika dla chronionych ścieżek.
Jak: Ustala bazę 401/403/404, potem 6 wariantów; każde 200 to wysokie (rozjazd normalizacji gateway/auth).
Przykład: //ADMIN → 200 → normalizuj przed autoryzacją.
Obejście double-encoding
Próbuje ścieżek %252e, %c0%ae i unicode-slash.
Jak: Trzy zakodowane sondy na skan; 200 to wysokie — autoryzacja działa na surowej formie.
Przykład: %252e%252e → 200 → dekodowanie przed autoryzacją.
Obejście reprezentacji WAF
Odtwarza atak blokowany przez WAF z drobną zmianą reprezentacji.
Jak: Ustala bazę 403 ze znacznikami WAF, potem warianty percent/case (maks. 3 żądania); 200 to wysokie.
Przykład: Ten sam payload przechodzi zakodowany → normalizuj na WAF.
Auth handshake WebSocket
Sprawdza, czy endpointy WS podnoszą połączenie bez poświadczeń.
Jak: Wysyła handshake WS do ścieżek hint plus /ws i /socket (osiąga maks. 2); 101 to średnie — zweryfikuj Origin + auth.
Przykład: 101 bez tokenu → przegląd autoryzacji handshake'u.
Powierzchnia gRPC + gadatliwe błędy
Sonduje gRPC framing i błędy w kształcie reflection.
Jak: Wysyła ramkę w kształcie reflection z application/grpc (maks. 2 żądania); grpc-status to info, ujawnienie stack/SQL to średnie.
Przykład: grpc-status + traceback → komunikaty ogólne.
Przeciążenie aliasów GraphQL
Sprawdza, czy 200 zaliasowanych pól jest odpowiadane inline.
Jak: Jedno zapytanie z aliasowanym __typename; 100+ odpowiedzi inline to średnie (CPU/DoS — niezależne od limitów głębokości).
Przykład: 200 aliasów inline → ogranicz liczbę pól.
Zatruwanie cache (niekluczowane wejście)
Sprawdza, czy nagłówki nieużywane w kluczu trafiają do odpowiedzi z cache.
Jak: Wysyła canary X-Forwarded-Host/UA, potem czyste żądanie (maks. 3); HIT z odbiciem to wysokie, utrwalenie dla drugiego klienta to średnie.
Przykład: Zły host w cache → kluczuj cache bezpiecznie.
Polityka Private Network Access
Sprawdza, czy Allow-Private-Network jest przyznawane szeroko.
Jak: Jeden preflight z publicznym origin; przyznanie true jest informacyjne — ogranicz do allowlisty.
Przykład: PNA true dla dowolnego origin → dodaj allowlistę.
Zakres Cookie Domain
Oznacza cookies z Domain zaczynającym się od kropki lub obejmującym sufiks.
Jak: Jedna pasywna inspekcja Set-Cookie na skan; szeroki zakres to niskie — przypnij do dokładnego hosta.
Przykład: Domain=.example.com → współdzielenie między subdomenami.
Polyglot upload / traversal zip
Wysyła sondy double-extension, skryptowalnego SVG i zip z traversal.
Jak: Trzy obojętne uploady (shell.php.jpg, SVG z onload, zip z wpisem ../../); akceptacja bez odrzucenia to średnie (niskie dla zip, bo ekstrakcja nie jest potwierdzona). Maks. 3 żądania.
Przykład: shell.php.jpg zapisany → sprawdzaj typy i sandboxuj.
Stored XSS przez API
Wstawia skryptowalny markup i sprawdza odczyt.
Jak: Zapisuje canary SVG-onload, potem GET obiektu (2 żądania); surowy zwrot to wysokie, escapowane wyjście milczy.
Przykład: Surowy <svg onload> w GET → koduj wyjścia + CSP.
Confusion Content-Type
Odtwarza ciało JSON jako form i XML na tym samym endpoincie.
Jak: Dwa żądania z alternatywnym Content-Type na skan; werdykt sukcesu to średnie (rozjazd parsera/walidacji).
Przykład: Ciało form 2xx na endpoincie JSON → jeden parser.
Upload EICAR (kontrola AV)
Wysyła obojętny testowy podpis EICAR na endpointy plików.
Jak: Jeden upload na skan; werdykt malware/kwarantanna milczy (dobrze), zapis bez żadnego werdyktu to niskie.
Przykład: EICAR zapisany po cichu → skanuj uploady.
PII w ścieżce URL / przekierowaniu
Oznacza e-maile, kształty PESEL i sekrety w ścieżkach oraz Location.
Jak: Pasywne sprawdzenie ścieżki plus inspekcja jednego przekierowania (follow_redirects=False); trafienie to średnie — przenieś identyfikatory do nagłówków/ciała.
Przykład: /users/[email protected] → używaj nieprzezroczystych ID.
Przekaźnik open-proxy
Sprawdza, czy parametry ?url=/redirect serwują obce hosty.
Jak: Kieruje parametry relay na nieosiągalny zły host (maks. 2 żądania); przekierowanie tam to średnie, pobranie po stronie serwera to wysokie.
Przykład: ?url=evil → 302 na evil → kształt przekaźnika C2.
SSRF przez funkcję (error oracle)
Sprawdza, czy funkcje webhook/import pobierają dowolne URL-e.
Jak: Podaje URL martwego hosta (maks. 2 żądania); błąd próby pobrania (tekst DNS/socket) to średnie — listener nie jest potrzebny.
Przykład: Canary getaddrinfo → potwierdzony egress.
Walidacja kanału callback
Sprawdza, czy obce domeny callback są akceptowane.
Jak: Rejestruje canary callback raz na skan; akceptacja to niskie i oznacza potwierdzenie listenera w hacker mode (N2/S9).
Przykład: Zły callback zapisany → kształt eksfiltracji DNS.
TTL i zakres presigned URL
Oznacza wieczne lub wildcardowe podpisane URL-e.
Jak: Pasywna analiza specyfikacji (zero żądań): ważność ponad 7 dni lub wildcard to średnie.
Przykład: se=+30d → skróć TTL dla każdego linku.
Nieograniczony eksport
Oznacza ogromne odpowiedzi list/eksportu bez paginacji.
Jak: Jedno GET na kandydata; ciała ponad 500 KB bez znaczników paginacji (początek i koniec) to niskie — paginuj i ogranicz.
Przykład: Płaska lista 546 KB → kształt masowego eksportu.
Odczyt plików przez LOL-endpoint
Sprawdza, czy funkcje eksportu/podglądu czytają poza swoim katalogiem.
Jak: Wysyła sondy traversal i file:// do parametrów funkcji (maks. 2 żądania); znaczniki /etc/passwd to wysokie.
Przykład: LFI: /preview?path=…/passwd → root:x: → odczyt plików.
Anonimowy dead-drop
Sprawdza, czy anonimowe zapisy są anonimowo czytelne.
Jak: Zapisuje canary anonimowo i odczytuje je anonimowo (2 żądania); zgodność to średnie.
Przykład: Anonimowa notatka czytelna → skrzynka kontaktowa dla atakującego.
Webhook confused deputy
Sprawdza, czy URL-e webhooków do sieci wewnętrznej są akceptowane przy rejestracji.
Jak: Rejestruje URL-e loopback i martwego hosta (maks. 2 żądania); akceptacja to średnie — stosuj allowlistę przy rejestracji.
Przykład: http://127.0.0.1:9 zapisany → SSRF zastępczy.
Traversal kid / pobieranie jku JWT
Sonduje traversal ścieżki kid i pobieranie jku przez oracle błędów.
Jak: Wysyła tokeny alg=none z kid ../../ i jku martwego hosta na logowanie (maks. 2 żądania); błędy systemu plików/sieci to średnie.
Przykład: ENOENT na kid → potwierdzony sink.
Cache deception (auth vs anon)
Porównuje odpowiedź uwierzytelnioną z anonimową pod kątem cache'owania.
Jak: Pobiera ten sam URL z poświadczeniami i bez (2 żądania); identyczne ciała z PII plus znacznik HIT to wysokie. Wymaga kontekstu auth, inaczej pomijane.
Przykład: Anonim dostaje /me z cache → dane użytkownika publiczne.
Confusion klucza cache (Host)
Sprawdza, czy podszyty Host trafia do współdzielonego cache.
Jak: Wysyła Host/X-Forwarded-Host evil, potem czyste żądanie (maks. 3); odbicie w HIT to wysokie, utrwalenie dla czystego klienta to średnie.
Przykład: Zły Host w cache → zatruwa innych.
Zatruwanie cache CORS
Sprawdza, czy odbity Origin atakującego trafia do cache.
Jak: Wysyła Origin evil, potem czyste żądanie (maks. 3); odbity ACAO w HIT to wysokie, utrwalenie to średnie.
Przykład: Zły ACAO w cache → zatrucie CORS ofiary.
Sygnał throttlingu przy szybkiej parze
Sprawdza, czy szybkie żądania pokazują jakikolwiek sygnał throttlingu.
Jak: Dwa szybkie GET-y na skan; 429 milczy (dobrze), brak licznika i brak 429 to niskie i oznacza przegląd burstu granicznego.
Przykład: Brak 429 i liczników → zweryfikuj limity.
Kombinacja redirect + CORS
Sprawdza, czy obcy redirect niesie też zaufane nadanie CORS.
Jak: Kieruje parametr relay na zły host ze złym Origin (maks. 2 żądania); 302 tam plus odbity ACAO to średnie.
Przykład: 302 evil + ACAO evil → kombinacja phishingowa.
OAuth device flow
Sprawdza, czy odpytywanie device-code wydaje tokeny bez zatwierdzenia.
Jak: Czyta discovery (endpoint reklamowany → info), potem odpytuje ze sfabrykowanym kodem (maks. 2 żądania); token to wysokie.
Przykład: Fałszywy device_code → token → powiąż zatwierdzenie.
Wymagany state/nonce OAuth
Sprawdza, czy authorize wydaje kody bez state.
Jak: Wywołuje authorize bez state/nonce (maks. 2 żądania); kod bez odbitego state to średnie.
Przykład: Kod bez state → powierzchnia login-CSRF.
Zaufanie do x5c JWT
Sprawdza, czy samodzielnie dostarczony certyfikat x5c jest zaufany.
Jak: Wysyła token logowania z x5c atakującego (1 żądanie); akceptacja to wysokie — przypnij klucze po stronie serwera.
Przykład: Własny cert zaakceptowany → confusion kluczy.
Confusion JWE/plaintext
Sprawdza, czy niepodpisany token w formie plaintext jest akceptowany.
Jak: Wysyła token w kształcie alg:dir plaintext na logowanie (1 żądanie); akceptacja to wysokie.
Przykład: Niepodpisany kształt przechodzi → jeden typ tokenu.
Downgrade DPoP
Sprawdza, czy ścieżki z DPoP akceptują zwykły bearer.
Jak: Żąda ścieżki dpop bez dowodu DPoP (1 żądanie); 200 to średnie.
Przykład: Brak dowodu, 200 → wymuś powiązanie.
Wieczne cookie sesji
Oznacza cookies sesji/auth ważne przez miesiące.
Jak: Jedna pasywna inspekcja Set-Cookie na skan; Max-Age ponad 90 dni to niskie — skróć z re-auth step-up.
Przykład: Max-Age 10 lat → rotuj sesje.
Ponowne użycie metody presigned URL
Sprawdza, czy podpis działa z inną metodą HTTP.
Jak: Odtwarza sig-URL z przeciwną metodą (maks. 2 żądania); sukces to wysokie — powiąż metodę, ścieżkę i ważność.
Przykład: Podpis GET działa jako POST → powiąż go.
Głębokie zagnieżdżenie JSON
Wysyła raz na skan ciało JSON zagnieżdżone na 100 poziomów.
Jak: 500 to średnie, wolne 2xx (>5 s) to niskie; szybkie odrzucenia milczą. Małe ciało, duży kształt.
Przykład: Zagnieżdżenie → 500 → ogranicz głębokość.
Fuzz schematu/granic
Mutuje pole tekstowe zamianami typów i wartościami granicznymi.
Jak: Pięć sond (2^63, bool, null, string 10k, tablica 5k); 500 z wnętrznościami lub cicha akceptacja złego typu to niskie.
Przykład: bool dla stringa 2xx → wymuś ścisłe typy.
Wyciek sugestii GraphQL
Sprawdza, czy literówka wywołuje podpowiedzi pól.
Jak: Jedno zapytanie z literówką; didYouMean/podpowiedzi hasła są informacyjne — wyłącz podpowiedzi na produkcji.
Przykład: Literówka → „czy chodziło o password?”.
Obejście auth persisted query
Sprawdza, czy zapisany hash zapytania odpowiada anonimowo.
Jak: Wysyła hash APQ sha256 bez poświadczeń (maks. 2 żądania); dane bez błędu to średnie.
Przykład: Hash → dane bez auth → zabezpiecz hashe.
Ewazja WAF (3 reprezentacje)
Odtwarza zablokowany payload XSS podwójnie zakodowany i ze zmianą wielkości liter.
Jak: Ustala bazę 403 ze znacznikami WAF, potem dwa zmutowane powtórzenia (maks. 4 żądania); odbicie 200 to wysokie.
Przykład: Ten sam payload przechodzi zakodowany → normalizuj.
Mass assignment frameworka
Próbuje kształtów bindera Rails/Laravel/Django (nawiasy, _method, __dict__).
Jak: Trzy mutanty na skan; znaczniki uprawnień w odpowiedzi to średnie.
Przykład: user[admin] → admin:true → zabezpiecz bindery.
Manipulacja cursorem
Sprawdza, czy obcy/ujemny cursor zwraca dane.
Jak: Porównuje bazową stronę z cursor=-1 (2 żądania); odmienne dane to niskie — podpisuj i ograniczaj cursory.
Przykład: cursor=-1 → inne wiersze → nieprzezroczyste cursory.
Kontrola odbiorcy maila
Sprawdza, czy odbiorca maila pochodzi z danych wejściowych.
Jak: Wstrzykuje zły adres (maks. 2 żądania); odbicie lub blind send to średnie, stały odbiorca milczy.
Przykład: To: z inputu → dodaj allowlistę.
Token w zewnętrznym URL / błędzie
Oznacza tokeny osadzone w linkach zewnętrznych lub stronach błędów.
Jak: Inspekcja normalnej strony plus 404 z sondą tokenu (maks. 2 żądania); hrefy z tokenem to średnie, odbicia w błędach niskie.
Przykład: href z ?token= → wyciek przez Referer.
Enumeracja kodów invite
Próbuje zgadnąć kody invite/referral za pierwszym razem.
Jak: Wysyła 000000/123456/invite-1/test (maks. 4 żądania); werdykt walidacji to średnie.
Przykład: 000000 działa → zwiększ entropię i ważność.
Otwarty bucket storage
Sprawdza, czy URL-e bucketów z ciał API listują się anonimowo.
Jak: Wyciąga URL-e S3/GCS/Azure ze strony i pobiera jeden anonimowo (maks. 2 żądania); listing to średnie.
Przykład: URL S3 → ListBucketResult → zamknij bucket.
Sygnał password spray
Sprawdza, czy zgadywanie między kontami jest obserwowalne.
Jak: Próbuje jednego hasła na trzech użytkownikach (3 żądania); zwykłe odrzucenia bez 429/CAPTCHA to niskie.
Przykład: Brak sygnału sprayu → dodaj kontrole velocity.
Negocjacja wersji
Sprawdza, czy stare wersje odpowiadają przez nagłówki.
Jak: Porównuje bazę z żądaniem X-API-Version:1 (2 żądania); odmienne 200 to niskie.
Przykład: v1 przez nagłówek → wyłącz ją.
Kształt cookie tossing
Oznacza cookies sesji bez prefiksu __Host-.
Jak: Jedna pasywna inspekcja Set-Cookie na skan; cookie sesji bez prefiksu to niskie — subdomeny mogłyby je podłożyć.
Przykład: sess bez __Host- → dodaj prefiks.
Replay nagłówka tenanta
Sprawdza, czy nagłówki tenanta od klienta sterują dostępem do danych.
Jak: Odtwarza żądanie z podmienionym X-Tenant-ID/X-Org-ID (maks. 2 żądania); inne dane przy tym samym tokenie to średnie — pełne odtworzenie między tokenami to misja hacker mode.
Przykład: Nagłówek innego tenanta ujawnia obce wiersze → wyliczaj tenanta po stronie serwera.
Higiena claims tokenu
Oznacza tokeny skanu bez ważności lub audience.
Jak: Zero żądań: dekoduje Bearer JWT skanu; brak exp to średnie, brak aud niskie — odtworzenie między API wymaga drugiego API (hacker mode).
Przykład: Brak exp/aud → krótki TTL + przypięte audience.
Łańcuchowanie ścieżki ataku
Łączy znaleziska na etapach kill-chain w raporcie.
Jak: Zero żądań: silnik grupuje znaleziska (auth-bypass → dostęp do danych → eksfiltracja) i emituje informacyjny łańcuch — wejście do grafu TTP.
Przykład: żonglowanie → eksport → napraw początek łańcucha.
Hacker mode (AI) — autonomiczny pentest w stylu człowieka
Niszczący test autoryzowany — tylko dev/staging, nigdy produkcja. Wymagana zweryfikowana domena (localhost i prywatne IP zwolnione).
Planuj i koryguj: LLM prowadzi jawny plan ataku (IDOR → eskalacja → sekrety → injection) i koryguje go w miarę nauki — widzisz plan i każdą zmianę w raporcie skanu.
Sonduj i adaptuj się: Agent wysyła żądania, czyta zredagowane fragmenty odpowiedzi i poprawia się po blokadach (401/404/429) — w tym pisze i uruchamia własny kod exploita w ograniczonym sandboxie (limit 15 s, 30 żądań, bez dostępu do systemu).
Łańcuchy playbooków: Nakieruj go na cookies, sesje lub orakle, a uruchomi łańcuch oracle → forge → escalate (timing-oracle → dekodowanie cookie sesji → fałszowanie roli→admin → potwierdzenie na chronionych endpointach), z deserializacją potwierdzaną tylko markerami błędów — nigdy payloadami RCE. Misje business-logic działają tak samo: nadużycia ceny/kuponu/ilości, race/double-spend, toll-fraud (tylko fikcyjne liczby), kanarki indirect prompt-injection, pętle stored-value i wierność ekstrakcji modelu — każda z zasadami bezpieczeństwa wpisanymi w plan.
Prowadzone cele: Skieruj go na „sprawdź /users pod IDOR” lub „spróbuj eskalować do admina”; z zapisanymi poświadczeniami testuje uwierzytelnioną kontrolę dostępu (Twoje dane vs dane innego użytkownika).
Prywatność z założenia: Model widzi wyłącznie anonimizowane ścieżki względne, statusy i fragmenty — nigdy Twoich URL-i ani poświadczeń. Żądania idą po stronie serwera z auth dołączonym poza kontekstem modelu.
Werdykt: Sesja kończy się oceną AI (poziom ryzyka, narracja przebiegu testu, rekomendacje) plus każdym krokiem zapisanym w raporcie skanu.
Warstwa AI — payloady, triage, interpretacja
Inteligentne payloady
Przed skanem LLM czyta kształty OpenAPI i generuje dopasowane payloady per endpoint (ID, dodatkowe pola, injection) — potem odpala je deterministyczny silnik. Brak klucza lub awaria? Silnik wraca do wbudowanych ustawień.
Triage i werdykty
Każde znalezisko dostaje drugą opinię AI (sugestia wagi, flaga false positive, priorytet). Wyniki są cache’owane per sygnatura znaleziska i ograniczone budżetem tokenów na skan — deterministyczny rdzeń zawsze działa bez AI.
Odkrywanie przez agenta
Agent przeglądarkowy sterowany LLM (Playwright) chodzi po stronie jak człowiek, sugeruje dodatkowe ścieżki sondowania i podaje odkryte endpointy do skanu — nawet bez OpenAPI.
Ask mode — 320 pytań o bezpieczeństwo Twojego kodu (SaaS+)
Skaner nigdy nie widzi Twojego kodu — więc ask mode pyta Ciebie (lub Twojego asystenta kodowania): 270 sprawdzalnych pytań z zakresu uwierzytelniania, autoryzacji, walidacji wejścia, ochrony danych, logiki biznesowej, izolacji tenantów, sesji, projektowania API, logowania, łańcucha dostaw i SDLC — każde z wagą (critical → low) i wskazówką, jak zweryfikować poprawkę. AI dodaje dopasowane pytania uzupełniające dla Twoich endpointów i drąży nieudane odpowiedzi przez kilka rund. Odpowiadaj pass / fail / n/a z dowodem w pliku i funkcji, ustaw bramkę CI na wyniku i eksportuj raport Markdown.
Uruchom z CLI (liveapisec ask) lub z kwestionariusza w panelu — żaden kod źródłowy nie opuszcza Twojej maszyny.
Wszystko inne wokół testów
Odkrywanie i drift
Automatyczne odkrywanie endpointów (auto-detekcja OpenAPI, bundle JS, sitemapy, ścieżki sondowania AI) plus wykrywanie driftu między skanami (regresje, naprawione, nowe high/critical, zmiany fingerprintu konfiguracji) — i endpoint werdyktu CI, który pada tylko przy nowych znaleziskach względem baseline.
Priorytetyzacja oparta na ryzyku (KEV + EPSS)
Każde znalezisko niesie ID CVE, flagę CISA Known-Exploited (automatycznie podniesiona waga, tylko panel — nigdy publiczna Trust Page), ocenę exploitability EPSS i wynik ryzyka (0,55·waga + 0,30·CVSS + 0,15·EPSS·10). API znalezisk wspiera ?sort=risk, więc najbardziej wykorzystywalne problemy wychodzą pierwsze. Feed’y odświeżają się nocą; skany zawsze czytają lokalny cache, więc nie czekają na sieć.
Zewnętrzne narzędzia i zgodność
Opcjonalne integracje ZAP i Nuclei dokładają dodatkowe znaleziska do tego samego raportu; każde otwarte znalezisko mapuje się na wymagania PCI DSS 4.0, SOC 2, ISO 27001, GDPR i NIS2 w widoku zgodności.