Testy penetracyjne FastAPI: DoS, SSRF i bezpieczeństwo nowoczesnego API w Pythonie
FastAPI to najpopularniejszy framework Pythona do nowoczesnych API, wykorzystywany przez fintechy, startupy AI/ML i backendy mikroserwisowe. Najnowsze podatności obejmują CVE-2024-24762 (python-multipart DoS), CVE-2024-3651 (idna), CVE-2023-30798 (Starlette). Matproof Sentinel wykonuje ukierunkowane pentesty FastAPI z proof-of-exploit oraz raportami gotowymi do audytów DORA / NIS2 / ISO 27001 już od 149 EUR.
Dlaczego FastAPI wymaga specjalistycznej wiedzy pentestowej
FastAPI rośnie szybko jako backend mikroserwisowy, dla API fintech (open banking PSD2) oraz serwowania ML (modele AI eksponowane jako API). Jego async + Pydantic charakter wprowadza unikalne wzorce bezpieczeństwa: automatyczna walidacja typów jest potężna, ale niekompletna; FastAPI dependency injection umożliwia nadużycie Depends() do eksfiltracji danych; JWT w parametrach path to częsty antywzorzec wyciekający tokeny do logów. Najnowsze CVE ilustrują ryzyka: CVE-2024-24762 (python-multipart) umożliwia DoS przez nieskończony parsing multipart. CVE-2024-3651 (idna) umożliwia DoS przez parsing zniekształconego Unicode. CVE-2023-30798 (Starlette, baza FastAPI) umożliwia path traversal w określonych wzorcach middleware.
- CVE-2024-24762 (python-multipart): DoS przez nieskończony parsing multipart, dotyczy praktycznie wszystkich aplikacji FastAPI akceptujących uploady plików.
- CVE-2024-3651 (idna < 3.7): DoS przez parsing zniekształconego Unicode w nazwach domen, dotyczy API FastAPI używających httpx/requests wewnętrznie do pobierania URL użytkownika.
- CVE-2023-30798 (Starlette < 0.37.2): path traversal w określonych wzorcach static files middleware, exploit umożliwia ruch lateralny w systemie plików.
- Luki walidacji Pydantic: typy są silne w stylu TypeScript, ale niekompletne, czyli nie walidują rozmiaru zagnieżdżonego payloadu, allow_extra_fields może stworzyć analog prototype pollution.
- JWT w parametrach path: częsty antywzorzec (np. /api/users/{user_id}/orders/{jwt_token}), wycieka token do logów dostępu nginx/Cloudflare, historii przeglądarki, nagłówków referrer.
- Async + race conditions: FastAPI jest async-first; race conditions w logice biznesowej (przetwarzanie płatności, sprawdzanie sald) są częste, jeśli nie są zarządzane przez transakcje bazodanowe.
- Dla fintechów objętych DORA art. 24 z API płatniczymi udokumentowany pentest FastAPI jest wymagany dla zgodności.
Co konkretnie testujemy w FastAPI
- Detekcja CVE: python-multipart (CVE-2024-24762), idna (CVE-2024-3651), Starlette (CVE-2023-30798), czyli weryfikacja wersji z patchami.
- Walidacja Pydantic: test przypadków brzegowych (overflow numeryczny, długość stringa, głębokość zagnieżdżenia), konfiguracja allow_extra_fields, własne walidatory.
- FastAPI dependency injection: audyt łańcucha Depends() pod kątem eskalacji uprawnień, security dependencies (auth, rate limit) aktywne na wszystkich wrażliwych endpointach.
- OAuth2 / JWT: walidacja podpisu PyJWT, whitelisting algorytmów (brak 'none'), sprawdzanie wygaśnięcia, rotacja refresh token, JWT w parametrach path (antywzorzec).
- OWASP API Top 10 (2023): API1 BOLA, API2 Broken Auth, API3 Property Level Auth, API4 Resource Consumption, API5 BFLA, API6 Server Side Request Forgery.
- Async race conditions: krytyczne sekcje logiki biznesowej (płatności, aktualizacja salda), czyli test z równoległymi żądaniami w celu identyfikacji TOCTOU.
- Bezpieczeństwo file upload: walidacja typu MIME po stronie serwera, path traversal w nazwie pliku, skan antywirusowy, limity rozmiaru uploadu.
- GraphQL (jeśli Strawberry/Ariadne): query depth limiting, introspection wyłączone na produkcji, ataki batch query, DoS oparty o aliasy.
- Background tasks (FastAPI BackgroundTasks, Celery): code injection, jeśli task akceptuje input użytkownika, race condition między taskiem a odpowiedzią.
- Endpointy dokumentacji: /docs i /redoc eksponowane na produkcji (antywzorzec, wycieka pełny schemat), eksponowany /openapi.json.
Sample finding
JWT przekazywany w parametrze path, czyli wyciek do logów dostępu i nagłówków referrer
FastAPI eksponuje endpointy typu GET /api/auth/refresh/{refresh_token}, gdzie refresh_token jest przekazywany jako parametr path. Ten antywzorzec powoduje wyciek refresh token w: (1) logach dostępu nginx (domyślny format zawiera pełną ścieżkę); (2) logach WAF Cloudflare/AWS; (3) historii przeglądarki (jeśli wywoływany z SPA); (4) nagłówkach Referrer, jeśli API jest wywoływane z zewnętrznych linków. Test pobrał 1247 ważnych refresh tokenów z logów nginx Cloudflare z ostatnich 30 dni.
Fix: Działanie natychmiastowe (priorytet 1): refaktoryzacja endpointu, aby przyjmować refresh_token w body POST zamiast w parametrze path. Przykład poprawny:\n\n@app.post('/api/auth/refresh')\nasync def refresh_token(payload: RefreshTokenRequest):\n return await refresh_logic(payload.refresh_token)\n\nDziałania uzupełniające: rotacja wszystkich aktualnie aktywnych refresh tokenów (wymuszone ponowne uwierzytelnienie); audyt logów dostępu nginx/Cloudflare z ostatnich 90 dni w celu identyfikacji już wyciekniętych tokenów; konfiguracja log scrubbing na Cloudflare w celu redagowania parametrów path; implementacja token binding (powiązanie refresh token z odciskiem urządzenia lub IP); obniżenie TTL refresh token z 30 dni do 7 dni.
Reference: OWASP API4:2023 Unrestricted Resource Consumption · CWE-598 Use of GET Request Method With Sensitive Query Strings · GDPR Art. 32(1)(b) · RFC 6749 (OAuth 2.0) Section 10.3
Porównanie opcji pentestu FastAPI
| — | Free scan | Matproof Sentinel | Traditional consultancy |
|---|---|---|---|
| Automated scan engine | ✓ (3-min preview) | ✓ Full scan | ✗ Manual only |
| OWASP Top 10 coverage | Partial | ✓ Complete | ✓ Complete |
| Proof-of-exploit evidence | ✗ | ✓ Per finding | ✓ Per finding |
| Regulatory mapping (DORA/NIS2/ISO 27001) | ✗ | ✓ Automated | ✓ Manual |
| Audit-ready PDF report | ✗ | ✓ Instant | ✓ 2–4 weeks delivery |
| Continuous / recurring scans | ✗ | ✓ Per deploy | ✗ Annual engagement |
| Time to first result | ~3 min | ~30 min full scan | 2–4 weeks |
| Price | €0 | From €149 | €8,000–€25,000 |
| Source code review (SAST) | ✗ | ✓ On Growth plan | ✓ Scoped engagement |
| API testing (REST/GraphQL) | ✗ | ✓ Automated | ✓ Manual |
Pakiety pentestów FastAPI
- 1 full pentest scan
- AI-prioritized findings with CVSS 3.1
- Proof-of-exploit per finding
- Audit-ready PDF report
- Regulatory mapping (DORA, NIS2, ISO 27001)
- Unlimited scans (up to 3 domains)
- Continuous monitoring
- CI/CD integration (GitHub, GitLab)
- All regulatory mappings
- Priority support
- Unlimited scans + domains
- Authenticated / White-Box testing
- API & cloud infrastructure tests
- Dedicated security account manager
- 24h SLA response time
Najczęściej zadawane pytania o pentest FastAPI
Jakie specyficzne ryzyka dla fintechów adoptujących FastAPI?
Typowe ryzyka FastAPI dla fintechów: (1) API Open Banking PSD2 z błędną konfiguracją OAuth2 (parametr state niewalidowany, zbyt permisywna whitelist redirect_uri); (2) płatności SCT Inst z race condition między sprawdzeniem salda a obciążeniem (async race); (3) niewystarczający scope JWT, czyli token z read_all_transactions używany do zapytania o pojedynczą transakcję. Testujemy wszystkie te wzorce.
Czy testujecie również podobne frameworki jak Quart, Litestar, Sanic?
Tak. Quart (async Flask) i Litestar (fork FastAPI) mają podobne powierzchnie ataku. Sanic ma różnice (brak Pydantic domyślnie).
Jak obsługujecie testowanie endpointów chronionych OAuth2 / JWT?
Dostarczamy tokeny testowe (konto deweloperskie z różnymi scope). Testujemy: zamianę tokenów między różnymi użytkownikami (BOLA), eskalację scope, token replay, manipulację podpisem, algorithm confusion.
Jak długo trwa kompletny pentest FastAPI?
60-90 minut dla typowego API (20-100 endpointów). Dla API GraphQL dochodzi 30-60 min. Raport gotowy do audytu w ciągu 24 godzin.
Czy raport jest akceptowany dla audytów DORA art. 24 dla fintechów?
Tak. Raport techniczny z jawnym mapowaniem do DORA art. 24 (test intruzji), art. 25 (zarządzanie podatnościami).
Czy możemy zintegrować z naszym CI/CD (Poetry, pip-tools, Docker)?
Tak. Integracja GitHub Actions / GitLab CI na PR. Dla projektów zarządzanych przez Poetry: automatyczny skan przy zmianach poetry.lock. Dla Docker: integracja z docker scout do skanu podatności + Matproof Sentinel do testowania runtime.
Go deeper — related blog articles
Zabezpiecz swoje FastAPI już teraz
Pierwszy skan w 3 minuty, kompletny pentest FastAPI w 60-90 minut. Raport gotowy do audytów DORA / NIS2 / ISO 27001 już od 149 EUR.
Rozpocznij darmowy skan