NIS2 e DORA in vigore. EU AI Act in arrivo — prenota una demo

Penetration Test Laravel: Debug Mode, Mass Assignment e Sicurezza PHP Moderna

Laravel domina il backend PHP enterprise italiano, ma vulnerabilità recenti come CVE-2024-29291 (debug mode RCE), CVE-2024-52301 (env unmasking) e CVE-2018-15133 (deserializzazione APP_KEY) hanno colpito decine di migliaia di applicazioni. Matproof Sentinel esegue penetration test Laravel mirati con prova di sfruttamento e report audit-ready DORA / NIS2 / ISO 27001 da 149 €.

Avvia scan gratuito
MW
Scritto da Malte Wagenbach
Fondatore di Matproof Security. Specializzato in penetration test guidati da IA e conformità UE (DORA, NIS2, Banca d'Italia, ISO 27001).
Ultima revisione: 17 maggio 2026

Perché Laravel richiede competenze pentest specifiche

Laravel è il framework PHP più adottato in Italia, particolarmente nel settore e-commerce (Bancomat-integrated stores, Magento alternatives), startup SaaS, e applicazioni pubbliche locali. Le vulnerabilità recenti illustrano i rischi strutturali: CVE-2024-29291 (CVSS 9.8) espone applicazioni Laravel con APP_DEBUG=true in produzione a RCE diretta tramite Ignition error page. CVE-2024-52301 permette l'unmasking dei valori da .env tramite manipolazione del config caching. CVE-2018-15133 (ancora attiva nel 2024 secondo Synopsys BSIMM 2024) abilita RCE tramite deserializzazione del cookie laravel_session se APP_KEY è leakata. Oltre alle CVE, i pattern Laravel introducono superfici uniche: Eloquent mass assignment con $fillable / $guarded errati, Blade template SSTI con direttive @php non sanitizzate, route model binding con type juggling, queue serialization vulnerabilità in Laravel Horizon. Per le aziende italiane sotto DORA o NIS2, un pentest Laravel documentato è il modo standard di dimostrare la conformità.

  • CVE-2024-29291 (CVSS 9.8): debug mode RCE tramite Ignition in produzione — colpisce applicazioni Laravel con APP_DEBUG=true non patchate, RCE diretta senza autenticazione.
  • CVE-2024-52301: env unmasking tramite manipolazione del config caching — un attaccante con accesso a route specifiche può ottenere variabili sensibili (DB_PASSWORD, AWS_SECRET_ACCESS_KEY, STRIPE_SECRET).
  • CVE-2018-15133: deserializzazione cookie laravel_session se APP_KEY è leakata — ancora attiva nel 2024, in particolare in applicazioni con .env exposed o GitHub leaked.
  • Mass assignment via Eloquent: $fillable / $guarded mal configurati permettono privilege escalation (User::create($request->all()) → assegnazione is_admin=true).
  • Blade SSTI: direttive @php / @eval in template con input utente non sanitizzato → RCE; Blade @{{ }} bypass tramite encoding particolari.
  • Laravel Sanctum / Passport JWT: misconfigurazione di scopes, expired token acceptance, refresh token rotation assente.
  • Per applicazioni italiane sotto DORA Art. 24, NIS2 (D.Lgs. 138/2024), o Codice Privacy / GDPR Art. 32, un pentest Laravel documentato è richiesto come prova di conformità tecnica.

Cosa testiamo specificamente in un'applicazione Laravel

  • Debug mode in produzione (CVE-2024-29291): verifica APP_DEBUG=false, assenza di Ignition / Whoops error page, gestione errori custom che non leakino stack traces.
  • Mass assignment vulnerabilities: audit di $fillable e $guarded in tutti i modelli Eloquent, verifica protezione contro mass assignment su campi sensibili (role, is_admin, balance).
  • Blade SSTI: ricerca direttive @php / @eval con input utente, test di bypass del Blade auto-escape tramite @{!! !!} non sanitizzato.
  • Authentication: Laravel Sanctum / Passport configuration audit, JWT signing (no « alg: none »), session cookie flags, password hashing (bcrypt cost ≥ 12).
  • Authorization: Laravel Gates e Policies, audit per missing authorization su API endpoint, IDOR (Insecure Direct Object Reference) tramite route model binding.
  • SQL injection via DB::raw / Eloquent: usage di raw queries con string concatenation, whereRaw() con input utente, orderBy() con column user-controlled.
  • File upload security: validazione mime type lato server (mai trust client), storage path traversal, esecuzione PHP file in directory upload (htaccess / nginx config).
  • CSRF protection: verifica @csrf token in tutti i form, configurazione VerifyCsrfToken middleware, exception list (typicamente solo API stateless).
  • Composition Analysis: composer.lock audit per CVE in dipendenze (laravel/framework, symfony/*, league/*), audit transitive.
  • Queue / Horizon: serializzazione job, exposed Horizon dashboard senza auth, Redis credentials in clear text.

Esempio di finding

Critico

Debug Mode attivo in produzione + Ignition esposto — RCE diretta (CVE-2024-29291)

L'applicazione Laravel 10.x espone Ignition (la pagina errori interattiva di Laravel) in produzione con APP_DEBUG=true. CVE-2024-29291 permette a un attaccante non autenticato di ottenere RCE tramite l'endpoint /_ignition/execute-solution. Il test ha permesso l'esecuzione di comandi shell arbitrari: GET /_ignition/execute-solution con payload « solution: Facade\Ignition\Solutions\MakeViewVariableOptionalSolution » e parametri controllati permette l'inclusione PHP file con risultato di eval(). Sono stati ottenuti: lettura .env completa (DB password, Stripe secrets), accesso shell tramite system() per discovery filesystem, possibilità di scrivere webshell persistente in storage/framework/views/.

Correzione: Azione immediata (priorità 1): impostare APP_DEBUG=false in .env di produzione e rebuild dei container. Aggiornare Facade\Ignition a versione patchata ≥ 2.5.2 (per Laravel 8) o ≥ 1.16.16 (per Laravel 7). Azioni complementari: aggiungere middleware che blocca esplicitamente l'accesso a /_ignition/* in produzione tramite Route::middleware('production-block-debug'); ruotare immediatamente tutti i secrets potenzialmente esposti dal leak .env (DB password, API keys, JWT secrets); audit log di accesso a /_ignition/* nei ultimi 90 giorni per identificare potential pre-existing compromise; configurare un endpoint health check separato (es. /healthz) per non confondere monitoring con debug pages.

Riferimento: CVE-2024-29291 (CVSS 9.8) · CVE-2021-3129 (Ignition RCE storico) · CWE-489 Active Debug Code · OWASP A05:2021 Security Misconfiguration · Laravel Security Best Practices

Pentest Laravel: opzioni a confronto

Scan gratuitoMatproof SentinelConsulenza tradizionale
Motore di scansione automatizzato✓ (anteprima 3 min)✓ Scansione completa✗ Solo manuale
Copertura OWASP Top 10Parziale✓ Completa✓ Completa
Prova di exploit✓ Per finding✓ Per finding
Mapping normativo (DORA/NIS2/ISO 27001)✓ Automatizzato✓ Manuale
Report PDF pronto per l'audit✓ Immediato✓ Consegna 2–4 settimane
Scansioni continue / ricorrenti✓ Per deploy✗ Impegno annuale
Tempo al primo risultato~3 min~30 min scansione completa2–4 settimane
Prezzo€0Da €149€8.000–€25.000
Revisione codice sorgente (SAST)✓ Piano Growth✓ In scope
Test API (REST/GraphQL)✓ Automatizzato✓ Manuale

Pacchetti pentest Laravel

Scansione singola
€149 pagamento unico
  • 1 scansione pentest completa
  • Risultati prioritizzati da AI con CVSS 3.1
  • Proof-of-exploit per ogni finding
  • Report PDF (pronto per l'audit)
  • Mapping normativo (DORA, NIS2, ISO 27001)
Acquista scansione singola
Consigliato
Starter
€299 / mese
  • Scansioni illimitate (fino a 3 domini)
  • Monitoraggio continuo
  • Integrazione CI/CD (GitHub, GitLab)
  • Tutti i mapping normativi
  • Supporto prioritario
Avvia Starter
Growth
€799 / mese
  • Scansioni + domini illimitati
  • Test autenticati / White-Box
  • Test API e infrastruttura cloud
  • Account manager dedicato
  • SLA risposta 24h
Contatta per Growth

Domande frequenti sul pentest Laravel

Quali versioni Laravel sono affette da CVE-2024-29291 (debug mode RCE)?

Tutte le applicazioni Laravel con APP_DEBUG=true in produzione e Facade\Ignition non patchato sono vulnerabili. La vulnerabilità affetta Laravel 7.x, 8.x, 9.x, 10.x — qualsiasi versione che usa Ignition come pagina di errore (default per Laravel 6.x+). Fix richiede: APP_DEBUG=false + Ignition aggiornato. CVE-2021-3129 era una variante storica simile, anch'essa attiva ancora oggi in alcune installazioni legacy.

Testate anche le applicazioni Lumen / Symfony / vanilla PHP?

Sì. Lumen (Laravel mini-framework) condivide quasi tutta la superficie di attacco Laravel. Symfony ha le proprie vulnerabilità (Twig SSTI invece di Blade, deserializzazione Doctrine ORM) che testiamo specificamente. Vanilla PHP / custom MVC frameworks testiamo OWASP Top 10 standard + PHP-specific (type juggling, file inclusion, register_globals legacy).

Quali sono i pattern Laravel più comuni per IDOR e privilege escalation?

Tre pattern dominanti: (1) Route model binding senza authorization — Route::get('/posts/{post}', ...) restituisce il post anche se appartiene a un altro utente; (2) Mass assignment su modelli User — User::create($request->all()) permette di assegnare role/is_admin se non in $guarded; (3) Eloquent relationships query — $user->posts() può essere bypassato tramite query manipulation se non si usa scoping. Testiamo tutti e tre i pattern sistematicamente.

Quanto tempo richiede un pentest Laravel completo?

Scansione automatica completa: 60-90 minuti per applicazione Laravel tipica. Test include: CVE detection (CVE-2024-29291, CVE-2024-52301, CVE-2018-15133), OWASP Top 10, Laravel-specific (mass assignment, Blade SSTI, route model binding), composer dependencies audit. Per applicazioni complesse (Laravel + Horizon + Telescope + Nova admin), 2-3 ore. Report audit-ready entro 24 ore.

Possiamo integrare Matproof Sentinel nel pipeline CI/CD Laravel (Forge, Vapor, Envoyer)?

Sì. Per Laravel Forge: webhook integration su deployment events. Per Laravel Vapor (AWS Lambda): integrazione con CloudWatch + scan post-deployment. Per Envoyer: GitHub Actions su PR + scan automatico. I findings Critical/High possono bloccare il deploy tramite branch protection rules.

Il pentest copre Laravel Nova / Filament admin panels?

Sì. Sia Laravel Nova (paid, ufficiale) che Filament (open-source) hanno superfici di attacco specifiche: Nova exposed endpoints, resource authorization, action permissions; Filament action visibility, form binding security. Testiamo entrambi i framework admin come parte standard del pentest. Particolare attenzione a Telescope (debug tool spesso esposto in produzione per errore).

Il report Matproof Sentinel è accettato per audit Codice Privacy / GDPR italiani?

Sì. Il report tecnico fornisce la prova di « adeguatezza delle misure tecniche » richiesta da GDPR Art. 32 e dal Codice Privacy (D.Lgs. 196/2003 come modificato dal D.Lgs. 101/2018). Per ispezioni del Garante della Privacy, il report dimostra: testing regolare, identificazione delle vulnerabilità con remediation timeline, verification post-fix. Per data breach notifications (Art. 33 GDPR, 72 ore), il pentest precedente è elemento mitigante nel calcolo della sanzione (Art. 83(2)(d)).

Cosa succede se il pentest causa downtime o danni alla nostra applicazione?

Matproof Sentinel ha assicurazione professionale (massimale 5 M€) per danni causati da test. Però l'incidenza è bassissima: il scan automatico è semi-intrusivo (no DoS reale, no destructive payloads). Per test critici eseguiamo contro staging environment identico a production. Per Critical findings con risk di downtime durante remediation (es. database migration), forniamo un piano dettagliato di esecuzione step-by-step.

Argomenti correlati

Approfondisci — articoli correlati dal blog

Proteggi la tua applicazione Laravel ora

Primo scan in 3 minuti, pentest Laravel completo in 60-90 minuti con prova di sfruttamento per ogni finding. Report audit-ready DORA / NIS2 / ISO 27001 da 149 €.

Avvia scan gratuito