
Roundcube 1.0.0 <= 1.2.2 Exploit de Ejecución Remota de Código y contenedor vulnerable
Roundcube es un software de webmail de código abierto ampliamente distribuido utilizado por muchas organizaciones y empresas en todo el mundo. El espejo en SourceForge, por ejemplo, cuenta con más de 260,000 descargas en los últimos 12 meses, lo que es solo una pequeña fracción de los usuarios reales. Una vez que Roundcube está instalado en un servidor, proporciona una interfaz web para que los usuarios autenticados envíen y reciban correos electrónicos con su navegador web.
En Roundcube 1.2.2 y versiones anteriores, la entrada controlada por el usuario fluye sin sanitizar al quinto argumento de una llamada a la función integrada mail() de PHP, la cual está documentada como crítica en seguridad. El problema es que la invocación de la función mail() hará que PHP ejecute el programa sendmail. El quinto argumento permite pasar argumentos a esta ejecución, lo que permite una configuración de sendmail. Dado que sendmail ofrece la opción -X para registrar todo el tráfico de correo en un archivo, un atacante puede abusar de esta opción y generar un archivo PHP malicioso en el directorio webroot del servidor atacado. Las siguientes líneas de código desencadenan la vulnerabilidad.
La vulnerabilidad tiene los siguientes requisitos para su explotación:
mail() de PHP (por defecto, si no se especificó SMTP [1])mail() de PHP está configurada para usar sendmail (por defecto, ver sendmail_path [2])safe_mode desactivado (por defecto, ver safe_mode [3])Estos requisitos no son particularmente exigentes, lo que a su vez significa que había muchos sistemas vulnerables en el mundo real.
Para configurar un entorno vulnerable para tu prueba necesitarás tener Docker instalado, y simplemente ejecuta el siguiente comando:
docker build -t vuln/cve-2016-9920 .
docker run --rm -it -p 80:80 vuln/cve-2016-9920
Y generará una aplicación web vulnerable en tu host en el puerto 80
En Roundcube 1.2.2 y versiones anteriores, la entrada controlada por el usuario fluye sin sanitizar al quinto argumento de una llamada a la función integrada
mail()de PHP, la cual está documentada como crítica en términos de seguridad. El problema es que la invocación de la funciónmail()hará que PHP ejecute el programa sendmail. El quinto argumento permite pasar parámetros adicionales a esta ejecución, lo que permite una configuración de sendmail. Dado que sendmail ofrece la opción-Xpara registrar todo el tráfico de correo en un archivo, un atacante puede abusar de esta opción y generar un archivo PHP malicioso en el directorio webroot del servidor atacado. Aunque esta vulnerabilidad es rara y no ampliamente conocida, RIPS la detectó en segundos. [4]
Para explotar este objetivo simplemente ejecuta:
./exploit.py --host HOST --user USERNAME --pwd PASSWORD --path PATH --www_path WEB_DIRECTORY
Si estás usando esta imagen vulnerable, puedes simplemente ejecutar:
./exploit.py --host 127.0.0.1 --user username --pwd password --path roundcube --www_path "/var/www/html/roundcube"
Después de la explotación, se almacenará un archivo llamado backdoor.php en la carpeta raíz del directorio web. Y el exploit te proporcionará un shell donde puedes enviar comandos a la puerta trasera:
./exploit.py --host 127.0.0.1 --user username --pwd password --path roundcube --www_path "/var/www/html/roundcube"
[+] CVE-2016-9920 exploit by t0kx
[+] Exploiting 127.0.0.1
[+] Target exploited, acessing shell at http://127.0.0.1/roundcube/backdoor.php
[+] Running whoami: www-data
[+] Done
Esta falla fue encontrada por Robin Peraglie [4]. El texto principal y la idea de este material educativo fueron creados por opsxcq.
Este programa o los anteriores son SOLO con fines educativos. No lo use sin permiso. Se aplica el descargo de responsabilidad habitual, especialmente el hecho de que yo (t0kx) no soy responsable de ningún daño causado por el uso directo o indirecto de la información o funcionalidad proporcionada por estos programas. El autor o cualquier proveedor de Internet NO asume ninguna responsabilidad por el contenido o mal uso de estos programas o cualquier derivado de los mismos. Al usar estos programas, acepta el hecho de que cualquier daño (pérdida de datos, caída del sistema, compromiso del sistema, etc.) causado por el uso de estos programas no es responsabilidad de t0kx.