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 €.
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
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 gratuito | Matproof Sentinel | Consulenza tradizionale |
|---|---|---|---|
| Motore di scansione automatizzato | ✓ (anteprima 3 min) | ✓ Scansione completa | ✗ Solo manuale |
| Copertura OWASP Top 10 | Parziale | ✓ 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 completa | 2–4 settimane |
| Prezzo | €0 | Da €149 | €8.000–€25.000 |
| Revisione codice sorgente (SAST) | ✗ | ✓ Piano Growth | ✓ In scope |
| Test API (REST/GraphQL) | ✗ | ✓ Automatizzato | ✓ Manuale |
Pacchetti pentest Laravel
- 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)
- Scansioni illimitate (fino a 3 domini)
- Monitoraggio continuo
- Integrazione CI/CD (GitHub, GitLab)
- Tutti i mapping normativi
- Supporto prioritario
- Scansioni + domini illimitati
- Test autenticati / White-Box
- Test API e infrastruttura cloud
- Account manager dedicato
- SLA risposta 24h
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