jueves, 6 de junio de 2013

Vulnerabilidad en Parallels Plesk permite ejecución remota de código

Kingcope ha publicado en la lista Full Disclosure un exploit que aprovecha un fallo de configuración en los sistemas Parallels Plesk. Permite la ejecución remota de código PHP y por tanto, la inyección de comandos en el sistema operativo. El exploit no afecta a las últimas versiones de Plesk (10 y 11), pero sí a versiones que han terminado o están a punto de finalizar su ciclo de vida.

El fallo aprovecha una directiva scriptAlias en php-cgi.conf para llegar directamente al binario de PHP en el sistema. La directiva es:

scriptAlias /phppath/ "/usr/bin/"

Esto permite que se puedan hacer peticiones HTTP sobre /phppath/php, que serían ejecutadas /usr/bin/php. En el exploit, Kingcope pasa como parámetro de la petición una cadena en codificación URL, que decodificada:

POST /phppath/php?-d allow_url_include=on -d safe_mode=off –d suhosin.simulation=on -d disable_functions="" -d open_basedir=none –d auto_prepend_file=php://input -n

Está pasando directivas de inicio a php. Estas desactivan algunas medidas de seguridad (safe_mode=off, suhosin.simulation=on), permiten la inclusión de ficheros a través de URL, la ejecución de ficheros fuera del árbol de directorios (open_basedir=none). Finalmente, fuerza la inclusión del contenido POST en bruto que se va a pasar a continuación con auto_prepend_file=php://input -n. El contenido es:

User-Agent: Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html) Content-Type: application/x-www-form-urlencoded Content-Length: 82 <?php echo "Content-Type:text/html\r\n\r\n";echo "OK\n";system("uname -a;id;"); ?>

Lo que terminará ejecutando el código PHP y la llamada a system con los permisos del servidor Apache, que ejecutará comandos del sistema.

Este método difiere de otros similares (como el famoso CVE-2012-1823, descubierto el año pasado) en que la llamada al binario de php es directa, sin utilizar ningún fichero php intermedio. En aquel caso se hacía uso de un envoltorio para php-cgi, pero ya en el artículo se indicaba que se podían obtener los mismos resultados si el binario se copiara directamente al directorio.

Las versiones en las que se ha probado la vulnerabilidad son la 8.6 y varias versiones 9 de Plesk en sistemas Red Hat, CentOS y Fedora y bajo arquitecturas i386 y x86_64. No se ha probado en versiones Windows, aunque esto no significa que no sean vulnerables. La versión 11 de Plesk no está afectada.

La vulnerabilidad se ha publicado solo unos días antes de que la versión 9 de Plesk acabe su ciclo de vida el día 9 de junio, por tanto Parallels tiene unos cuatro días para corroborar el fallo y publicar una solución, aunque también podría instar a actualizar a la versión 10 y dejar el fallo sin solucionar, lo que parece poco probable puesto que cuenta con una gran base de usuarios.

Más información:

Plesk Apache Zeroday Remote Exploit

Parallels Plesk Panel Lifecycle Policy

Plesk 0-Day Targets Web Servers



Francisco López

No hay comentarios:

Publicar un comentario en la entrada