Investigadores han identificado una vulnerabilidad crítica en el framework Laravel que permite a los atacantes aprovechar la exposición pública de las claves APP_KEY para obtener capacidades de ejecución remota de código (RCE) en cientos de aplicaciones.
Filtración de APP_KEY y su impacto
La clave APP_KEY, esencial para el cifrado de datos confidenciales en Laravel, suele filtrarse públicamente, por ejemplo en repositorios como GitHub. Si los atacantes acceden a esta clave, pueden explotar una falla de deserialización para ejecutar código arbitrario en el servidor, poniendo en riesgo la infraestructura y los datos.
La compañía GitGuardian, en colaboración con Synacktiv, afirmó haber extraído más de 260.000 APP_KEYs de GitHub entre 2018 y el 30 de mayo de 2025, identificando más de 600 aplicaciones Laravel vulnerables.
Funcionamiento de la clave APP_KEY
La APP_KEY es una clave de cifrado aleatoria de 32 bytes generada durante la instalación de Laravel. Se almacena en el archivo .env y se utiliza para cifrar, descifrar datos, generar cadenas aleatorias seguras, firmar y verificar datos, así como crear tokens de autenticación únicos.
Explotación mediante herramientas
Los investigadores utilizaron Shodan para identificar 650.000 instancias de Laravel y recuperaron las cookies de sesión correspondientes mediante la consulta Set-Cookie: XSRF-TOKEN=. Con un reconocimiento sistemático usando dorks, recopilaron APP_KEYs públicamente expuestas. Mediante una herramienta personalizada, validaron más de 6.000 claves y identificaron que más de 400 aplicaciones Laravel podrían verse comprometidas mediante ataques RCE.
Vulnerabilidad en la función decrypt()
GitGuardian señaló que la implementación actual de la función decrypt() en Laravel presenta un problema: deserializa automáticamente los datos descifrados, lo que facilita la ejecución remota de código.
CVE y persistencia del vector de ataque
Esta vulnerabilidad fue documentada inicialmente con CVE-2018-15133, afectando a versiones anteriores a la 5.6.30. Sin embargo, el vector de ataque persiste en versiones más recientes cuando los desarrolladores configuran explícitamente la serialización de sesiones en las cookies mediante SESSION_DRIVER=cookie, como se muestra en CVE-2024-55556.
Explotación por actores maliciosos
CVE-2018-15133 ha sido explotada por actores de amenazas asociados con el malware AndroxGh0st, tras escanear internet en busca de aplicaciones Laravel con archivos .env mal configurados.
Exposición de secretos y riesgos
Análisis posteriores revelaron que el 63% de las exposiciones de APP_KEY se originan en archivos .env (o sus variantes), que suelen contener otros secretos valiosos, como tokens de almacenamiento en la nube, credenciales de bases de datos y secretos asociados con plataformas de comercio electrónico.
Más importante aún, aproximadamente 28.000 pares APP_KEY y APP_URL se han expuesto simultáneamente en GitHub. De estos, el 10% han resultado ser válidos, lo que deja a 120 aplicaciones vulnerables a ataques triviales de RCE.
Consecuencias de la exposición
Dado que la configuración APP_URL especifica la URL base de la aplicación, la exposición tanto de APP_URL como de APP_KEY crea un potente vector de ataque que los cibercriminales pueden aprovechar para acceder directamente a la aplicación, recuperar cookies de sesión e intentar descifrarlas con la clave expuesta.
Borrar los secretos de los repositorios no es suficiente, especialmente cuando ya han sido clonados o almacenados en caché por herramientas de terceros. Lo que los desarrolladores necesitan es una ruta de rotación clara, respaldada por una monitorización que detecte cualquier reaparición futura de cadenas sensibles en los registros de CI, compilaciones de imágenes y capas de contenedores.
Relación con otras vulnerabilidades
Este tipo de incidentes también se alinea con una clase más amplia de vulnerabilidades de deserialización de PHP, donde herramientas como phpggc ayudan a los atacantes a crear cadenas de gadgets que desencadenan comportamientos no deseados durante la carga de objetos. Al utilizarlos en entornos de Laravel con claves filtradas, estos gadgets pueden lograr una RCE completa sin necesidad de violar la lógica ni las rutas de la aplicación.
Exposición de secretos en imágenes Docker
La revelación se produce después de que GitGuardian revelara el descubrimiento de 100.000 secretos válidos en imágenes de Docker accesibles públicamente en el registro de DockerHub, incluyendo secretos asociados con AWS, Google Cloud y tokens de GitHub.
Un nuevo análisis de Binarly de más de 80.000 imágenes Docker únicas que abarcan 54 organizaciones y 3.539 repositorios también descubrió 644 secretos únicos, entre ellos credenciales genéricas, tokens web JSON, encabezados de autorización básica HTTP, claves de API de Google Cloud, tokens de acceso de AWS y tokens de API de CircleCI.
Exposición de secretos en repositorios MCP
La rápida adopción del Protocolo de Contexto de Modelo (MCP) para habilitar flujos de trabajo con agentes en aplicaciones de IA empresariales ha abierto nuevos vectores de ataque, siendo uno preocupante la filtración de secretos de servidores MCP publicados en repositorios de GitHub.
GitGuardian descubrió que 202 de ellos filtraron al menos un secreto, lo que representa el 5,2% del total de repositorios. Esta cifra es ligeramente superior a la tasa de incidencia del 4,6% observada en todos los repositorios públicos.
Conclusión
Si bien esta investigación se centra en Laravel, el mismo problema de raíz (secretos sin protección en repositorios públicos) se aplica a otras plataformas. Las organizaciones deberían explorar el escaneo centralizado de secretos, las guías de refuerzo específicas de Laravel y los patrones de seguridad por diseño para gestionar archivos .env y secretos de contenedores en todos los frameworks.