Test de Penetración Laravel: Debug Mode, Mass Assignment y Seguridad PHP Moderna
Laravel domina el backend PHP enterprise español, especialmente en e-commerce, startups SaaS, y aplicaciones del sector público local. Vulnerabilidades recientes como CVE-2024-29291 (debug mode RCE), CVE-2024-52301 (env unmasking) y CVE-2018-15133 (deserialización APP_KEY) han afectado a decenas de miles de aplicaciones. Matproof Sentinel realiza pentests Laravel dirigidos con prueba de explotación y reportes audit-ready DORA / NIS2 / ISO 27001 desde 149 €.
Por qué Laravel requiere competencias específicas de pentest
Laravel es el framework PHP más adoptado en España. CVE-2024-29291 (CVSS 9.8) expone aplicaciones Laravel con APP_DEBUG=true en producción a RCE directa mediante la página de error Ignition. CVE-2024-52301 permite el unmasking de valores .env mediante manipulación del config caching. CVE-2018-15133 habilita RCE mediante deserialización del cookie laravel_session si APP_KEY se filtra. Además, los patrones Laravel introducen superficies únicas: Eloquent mass assignment con $fillable / $guarded mal configurados, Blade template SSTI, route model binding con type juggling. Para empresas españolas bajo DORA o NIS2, un pentest Laravel documentado es estándar de conformidad.
- CVE-2024-29291 (CVSS 9.8): debug mode RCE mediante Ignition en producción — afecta aplicaciones Laravel con APP_DEBUG=true no parcheadas, RCE directa sin autenticación.
- CVE-2024-52301: env unmasking mediante manipulación del config caching — un atacante con acceso a rutas específicas puede obtener variables sensibles (DB_PASSWORD, AWS_SECRET, STRIPE_SECRET).
- CVE-2018-15133: deserialización cookie laravel_session si APP_KEY se filtra — todavía activa en 2024.
- Mass assignment via Eloquent: $fillable / $guarded mal configurados permiten privilege escalation (User::create($request->all()) → asignación is_admin=true).
- Blade SSTI: directivas @php / @eval en template con entrada usuario no sanitizada → RCE.
- Laravel Sanctum / Passport JWT: misconfiguración de scopes, expired token acceptance, refresh token rotation ausente.
- Para aplicaciones españolas bajo DORA Art. 24, NIS2 o LOPDGDD Art. 32, un pentest Laravel documentado es requerido como prueba de conformidad técnica.
Qué testeamos específicamente en una aplicación Laravel
- Debug mode en producción (CVE-2024-29291): verificación APP_DEBUG=false, ausencia de Ignition / Whoops error page, gestión errores custom sin leak de stack traces.
- Mass assignment vulnerabilities: auditoría de $fillable y $guarded en todos los modelos Eloquent, verificación protección contra mass assignment en campos sensibles (role, is_admin, balance).
- Blade SSTI: búsqueda directivas @php / @eval con entrada usuario, test bypass del Blade auto-escape mediante @{!! !!} no sanitizado.
- Authentication: Laravel Sanctum / Passport configuración audit, firma JWT (sin « alg: none »), flags cookie sesión, password hashing (bcrypt cost ≥ 12).
- Authorization: Laravel Gates y Policies, auditoría para missing authorization en API endpoints, IDOR mediante route model binding.
- SQL injection via DB::raw / Eloquent: uso raw queries con string concatenation, whereRaw() con entrada usuario, orderBy() con columna controlada usuario.
- File upload security: validación MIME type lado servidor (nunca confiar cliente), path traversal en filename, ejecución archivos PHP en directorio upload.
- CSRF protection: verificación @csrf token en todos los forms, configuración VerifyCsrfToken middleware, lista excepciones.
- Composition Analysis: composer.lock audit para CVE en dependencias (laravel/framework, symfony/*, league/*), auditoría transitive.
- Queue / Horizon: serialización job, exposed Horizon dashboard sin auth, Redis credentials en plaintext.
Ejemplo de hallazgo
Debug Mode activo en producción + Ignition expuesto — RCE directa (CVE-2024-29291)
La aplicación Laravel 10.x expone Ignition (la página de error interactiva Laravel) en producción con APP_DEBUG=true. CVE-2024-29291 permite a un atacante no autenticado obtener RCE mediante el endpoint /_ignition/execute-solution. El test permitió ejecución de comandos shell arbitrarios. Se obtuvieron: lectura .env completa (DB password, Stripe secrets), acceso shell mediante system() para discovery filesystem, posibilidad de escribir webshell persistente en storage/framework/views/.
Corrección: Acción inmediata (prioridad 1): establecer APP_DEBUG=false en .env de producción y rebuild containers. Actualizar Facade\Ignition a versión parcheada ≥ 2.5.2 (Laravel 8) o ≥ 1.16.16 (Laravel 7). Acciones complementarias: añadir middleware que bloquea explícitamente el acceso a /_ignition/* en producción; rotar inmediatamente todos los secrets potencialmente expuestos del leak .env (DB password, API keys, JWT secrets); auditoría log de acceso a /_ignition/* últimos 90 días.
Referencia: CVE-2024-29291 (CVSS 9.8) · CVE-2021-3129 · CWE-489 · OWASP A05:2021 · Laravel Security Best Practices
Pentest Laravel: opciones comparadas
| — | Escaneo gratuito | Matproof Sentinel | Consultoría tradicional |
|---|---|---|---|
| Motor de escaneo automatizado | ✓ (vista previa 3 min) | ✓ Escaneo completo | ✗ Solo manual |
| Cobertura OWASP Top 10 | Parcial | ✓ Completa | ✓ Completa |
| Evidencia proof-of-exploit | ✗ | ✓ Por hallazgo | ✓ Por hallazgo |
| Mapeo normativo (DORA/NIS2/ISO 27001) | ✗ | ✓ Automatizado | ✓ Manual |
| Informe PDF listo para auditoría | ✗ | ✓ Inmediato | ✓ Entrega 2–4 semanas |
| Escaneos continuos / recurrentes | ✗ | ✓ Por despliegue | ✗ Encargo anual |
| Tiempo hasta el primer resultado | ~3 min | ~30 min escaneo completo | 2–4 semanas |
| Precio | €0 | Desde €149 | €8.000–€25.000 |
| Revisión de código fuente (SAST) | ✗ | ✓ Plan Growth | ✓ En alcance |
| Pruebas de API (REST/GraphQL) | ✗ | ✓ Automatizado | ✓ Manual |
Paquetes Pentest Laravel
- 1 escaneo pentest completo
- Hallazgos priorizados por IA con CVSS 3.1
- Proof-of-exploit por hallazgo
- Informe PDF listo para auditoría
- Mapeo normativo (DORA, NIS2, ISO 27001)
- Escaneos ilimitados (hasta 3 dominios)
- Monitorización continua
- Integración CI/CD (GitHub, GitLab)
- Todos los mapeos normativos
- Soporte prioritario
- Escaneos + dominios ilimitados
- Pruebas autenticadas / White-Box
- Pruebas de API e infraestructura cloud
- Account manager de seguridad dedicado
- SLA de respuesta en 24h
Preguntas frecuentes sobre el pentest Laravel
¿Qué versiones Laravel están afectadas por CVE-2024-29291?
Todas las aplicaciones Laravel con APP_DEBUG=true en producción y Facade\Ignition no parcheado son vulnerables. La vulnerabilidad afecta a Laravel 7.x, 8.x, 9.x, 10.x. Fix requiere: APP_DEBUG=false + Ignition actualizado.
¿Testean también aplicaciones Lumen / Symfony / vanilla PHP?
Sí. Lumen comparte casi toda la superficie de ataque Laravel. Symfony tiene sus propias vulnerabilidades (Twig SSTI, Doctrine ORM). Vanilla PHP: OWASP Top 10 estándar + PHP-specific.
¿Cuáles son los patrones Laravel más comunes para IDOR y privilege escalation?
Tres patrones: (1) Route model binding sin authorization; (2) Mass assignment en modelos User; (3) Eloquent relationships query manipulation. Testeamos los tres sistemáticamente.
¿Cuánto tiempo requiere un pentest Laravel completo?
Escaneo automatizado: 60-90 minutos para aplicación Laravel típica.
¿Podemos integrar Matproof Sentinel en pipeline Laravel (Forge, Vapor, Envoyer)?
Sí. Para Laravel Forge: webhook integration. Para Vapor (AWS Lambda): CloudWatch + post-deployment scan. Para Envoyer: GitHub Actions integration.
¿El informe es aceptado para auditorías LOPDGDD / AEPD en España?
Sí. El informe técnico proporciona la prueba de « medidas técnicas adecuadas » requerida por RGPD Art. 32 y LOPDGDD. Para inspecciones de AEPD, el informe demuestra testing regular y remediation tracking.
Temas relacionados
Profundiza — artículos relacionados del blog
Proteja su aplicación Laravel ahora
Primer escaneo en 3 minutos, pentest Laravel completo en 60-90 minutos. Informe audit-ready DORA / NIS2 / ISO 27001 desde 149 €.
Iniciar escaneo gratuito