NIS2 & DORA in force. EU AI Act next — book a demo

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.

Rozpocznij darmowy skan
MW
Written by Malte Wagenbach
Founder of Matproof Security. Specialized in AI-driven penetration testing and EU compliance (DORA, NIS2, ISO 27001, SOC 2).
Last reviewed: May 17, 2026

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

Critical

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 scanMatproof SentinelTraditional consultancy
Automated scan engine✓ (3-min preview)✓ Full scan✗ Manual only
OWASP Top 10 coveragePartial✓ 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 scan2–4 weeks
Price€0From €149€8,000–€25,000
Source code review (SAST)✓ On Growth plan✓ Scoped engagement
API testing (REST/GraphQL)✓ Automated✓ Manual

Pakiety pentestów Laravel

Single Run
€149 one-time
  • 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)
Buy single run
Recommended
Starter
€299 / month
  • Unlimited scans (up to 3 domains)
  • Continuous monitoring
  • CI/CD integration (GitHub, GitLab)
  • All regulatory mappings
  • Priority support
Start Starter
Growth
€799 / month
  • Unlimited scans + domains
  • Authenticated / White-Box testing
  • API & cloud infrastructure tests
  • Dedicated security account manager
  • 24h SLA response time
Contact for Growth

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.

Related

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