Testy penetracyjne Laravel: debug mode, mass assignment i bezpieczeństwo nowoczesnego PHP
Laravel dominuje w enterprise backendzie PHP, szczególnie w e-commerce, startupach SaaS i aplikacjach administracji publicznej. Najnowsze podatności obejmują CVE-2024-29291 (debug mode RCE), CVE-2024-52301 (env unmasking) oraz CVE-2018-15133 (deserializacja APP_KEY). Matproof Sentinel wykonuje ukierunkowane pentesty Laravel z proof-of-exploit oraz raportami gotowymi do audytów DORA / NIS2 / ISO 27001 już od 149 EUR.
Dlaczego Laravel wymaga specjalistycznej wiedzy pentestowej
Laravel to najczęściej wybierany framework PHP na świecie. Najnowsze podatności ilustrują strukturalne ryzyka: CVE-2024-29291 (CVSS 9.8) eksponuje aplikacje Laravel z APP_DEBUG=true na produkcji na bezpośredni RCE przez stronę błędu Ignition. CVE-2024-52301 umożliwia unmasking wartości .env poprzez manipulację config caching. CVE-2018-15133 (wciąż aktywny w 2024 według Synopsys BSIMM 2024) umożliwia RCE poprzez deserializację ciasteczka laravel_session, gdy APP_KEY wycieknie. Poza CVE wzorce Laravel wprowadzają unikalne powierzchnie ataku: mass assignment Eloquent z błędnie skonfigurowanymi $fillable/$guarded, SSTI w szablonach Blade, type juggling w route model binding. Dla organizacji objętych DORA, NIS2 lub GDPR udokumentowany pentest Laravel stanowi standardowy dowód zgodności.
- CVE-2024-29291 (CVSS 9.8): debug mode RCE przez Ignition na produkcji, dotyczy aplikacji Laravel z niezałatanym APP_DEBUG=true, bezpośredni RCE bez uwierzytelnienia.
- CVE-2024-52301: env unmasking poprzez manipulację config caching, atakujący z dostępem do określonych tras może uzyskać wrażliwe zmienne (DB_PASSWORD, AWS_SECRET, STRIPE_SECRET).
- CVE-2018-15133: deserializacja ciasteczka laravel_session, gdy APP_KEY wycieknie, wciąż aktywne w 2024.
- Mass assignment przez Eloquent: błędnie skonfigurowane $fillable/$guarded umożliwia eskalację uprawnień (User::create($request->all()) i przypisanie is_admin=true).
- Blade SSTI: dyrektywy @php / @eval w szablonach z niezsanityzowanym inputem użytkownika prowadzą do RCE; bypass Blade @{{ }} przez specyficzne kodowanie.
- Laravel Sanctum / Passport JWT: błędna konfiguracja scope, akceptacja wygasłych tokenów, brak rotacji refresh token.
- Dla aplikacji objętych DORA art. 24, NIS2 lub GDPR art. 32, udokumentowany pentest Laravel jest wymaganym dowodem zgodności.
Co konkretnie testujemy w aplikacji Laravel
- Debug mode na produkcji (CVE-2024-29291): weryfikacja APP_DEBUG=false, brak strony błędu Ignition/Whoops, własna obsługa błędów bez wycieku stack trace.
- Podatności mass assignment: audyt $fillable i $guarded we wszystkich modelach Eloquent, weryfikacja ochrony mass assignment dla wrażliwych pól (role, is_admin, balance).
- Blade SSTI: poszukiwanie dyrektyw @php / @eval z inputem użytkownika, test bypassu auto-escape Blade przez niezsanityzowane @{!! !!}.
- Uwierzytelnianie: audyt konfiguracji Laravel Sanctum/Passport, podpisywanie JWT (brak 'alg: none'), flagi ciasteczek sesji, hashing haseł (bcrypt cost >= 12).
- Autoryzacja: Laravel Gates i Policies, audyt brakującej autoryzacji na endpointach API, IDOR przez route model binding.
- SQL injection przez DB::raw / Eloquent: użycie raw query z konkatenacją stringów, whereRaw() z inputem użytkownika, orderBy() z kolumną kontrolowaną przez użytkownika.
- Bezpieczeństwo file upload: walidacja typu MIME po stronie serwera, path traversal w nazwie pliku, wykonywanie plików PHP w katalogu uploadu.
- Ochrona CSRF: weryfikacja tokenu @csrf we wszystkich formularzach, konfiguracja middleware VerifyCsrfToken, lista wyjątków.
- Composition Analysis: audyt composer.lock pod kątem CVE w zależnościach (laravel/framework, symfony/*, league/*), audyt tranzytywny.
- Queue/Horizon: serializacja zadań, eksponowany dashboard Horizon bez uwierzytelnienia, dane logowania Redis w plaintext.
Sample finding
Debug Mode aktywny na produkcji + eksponowany Ignition, czyli bezpośredni RCE (CVE-2024-29291)
Aplikacja Laravel 10.x eksponuje Ignition (interaktywną stronę błędu Laravel) na produkcji z APP_DEBUG=true. CVE-2024-29291 pozwala nieuwierzytelnionemu atakującemu uzyskać RCE przez endpoint /_ignition/execute-solution. Test pozwolił na wykonanie dowolnych poleceń shell: GET /_ignition/execute-solution z payloadem 'solution: Facade\Ignition\Solutions\MakeViewVariableOptionalSolution' i kontrolowanymi parametrami umożliwia file inclusion PHP z wynikiem eval(). Uzyskano: pełny odczyt .env (hasło DB, secrety Stripe), dostęp shellowy przez system() do eksploracji systemu plików, możliwość zapisania persistent webshell w storage/framework/views/.
Fix: Działanie natychmiastowe (priorytet 1): ustaw APP_DEBUG=false w produkcyjnym .env i przebuduj kontenery. Zaktualizuj Facade\Ignition do wersji z patchem >= 2.5.2 (Laravel 8) lub >= 1.16.16 (Laravel 7). Działania uzupełniające: dodaj middleware jawnie blokujące dostęp do /_ignition/* na produkcji przez Route::middleware('production-block-debug'); natychmiast rotuj wszystkie potencjalnie wyeksponowane secrety z wycieku .env (hasło DB, klucze API, JWT secrets); audytuj logi dostępu do /_ignition/* z ostatnich 90 dni w celu identyfikacji potencjalnej istniejącej kompromitacji; skonfiguruj osobny endpoint health check (np. /healthz), aby uniknąć pomyłki ze stronami debug.
Reference: CVE-2024-29291 (CVSS 9.8) · CVE-2021-3129 (historyczny Ignition RCE) · CWE-489 Active Debug Code · OWASP A05:2021 Security Misconfiguration · Laravel Security Best Practices
Porównanie opcji pentestu Laravel
| — | 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 Laravel
- 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 Laravel
Które wersje Laravel są podatne na CVE-2024-29291?
Wszystkie aplikacje Laravel z APP_DEBUG=true na produkcji i niezałatanym Facade\Ignition są podatne. Podatność dotyczy Laravel 7.x, 8.x, 9.x, 10.x, czyli każdej wersji używającej Ignition jako strony błędu. Naprawa wymaga: APP_DEBUG=false + zaktualizowany Ignition.
Czy testujecie również Lumen / Symfony / vanilla PHP?
Tak. Lumen (mini-framework Laravel) dzieli niemal całą powierzchnię ataku z Laravel. Symfony ma własne podatności (Twig SSTI zamiast Blade, deserializacja Doctrine ORM), które testujemy konkretnie. Vanilla PHP / własne frameworki MVC: standardowe OWASP Top 10 + specyfika PHP (type juggling, file inclusion, legacy register_globals).
Jakie są najczęstsze wzorce Laravel pod kątem IDOR i eskalacji uprawnień?
Trzy dominujące wzorce: (1) Route model binding bez autoryzacji, czyli Route::get('/posts/{post}', ...) zwraca post nawet jeśli należy do innego użytkownika; (2) Mass assignment na modelach User, czyli User::create($request->all()) umożliwia przypisanie role/is_admin, jeśli nie są w $guarded; (3) manipulacja zapytaniami relacji Eloquent. Testujemy wszystkie trzy systematycznie.
Jak długo trwa kompletny pentest Laravel?
Pełny zautomatyzowany skan: 60-90 minut dla typowej aplikacji Laravel. Testy obejmują: detekcję CVE (CVE-2024-29291, CVE-2024-52301, CVE-2018-15133), OWASP Top 10, specyfikę Laravel (mass assignment, Blade SSTI, route model binding), audyt zależności composer.
Czy możemy zintegrować Matproof Sentinel z naszym pipeline'em Laravel (Forge, Vapor, Envoyer)?
Tak. Dla Laravel Forge: integracja webhook na zdarzeniach deployment. Dla Laravel Vapor (AWS Lambda): integracja CloudWatch + skan po wdrożeniu. Dla Envoyer: GitHub Actions na PR + automatyczny skan. Znaleziska Critical/High mogą blokować deploy przez branch protection rules.
Czy raport jest akceptowany dla audytów GDPR?
Tak. Raport techniczny dostarcza dowodu na 'adekwatne środki techniczne' wymagane przez art. 32 GDPR. Dla inspekcji organów ochrony danych raport dokumentuje: regularne testowanie, identyfikację podatności z timeline remediacji, weryfikację po naprawie. Dla zgłoszeń naruszeń danych (art. 33 GDPR, 72 godziny) wcześniejszy pentest stanowi element łagodzący w kalkulacji kary.
Go deeper — related blog articles
Zabezpiecz swoją aplikację Laravel już teraz
Pierwszy skan w 3 minuty, kompletny pentest Laravel w 60-90 minut z proof-of-exploit dla każdego znaleziska. Raport gotowy do audytów DORA / NIS2 / ISO 27001 już od 149 EUR.
Rozpocznij darmowy skan