28 de octubre de 2019

Fallo de ejecución de código en PHP7 configurado con NGINX y PHP-FPM

Un nuevo bug en PHP7 permite tomar el control del servidor vulnerable ejecutando código remoto. El exploit publicado convierte esta hazaña en algo trivial, por lo que es muy posible que esté siendo aprovechada por atacantes «in the wild».
Esta vulnerabilidad (CVE-2019-11043) es una ejecución de código remoto en PHP7, la nueva rama en producción de PHP, uno de los lenguajes de programación más extendidos para sitios web.
La vulnerabilidad afecta a sitios que funcionan con el servidor web NGINX y PHP-FPM, centrándose en una configuración en concreto, la cual es muy común encontrar en webs en producción. Se trata de algo muy sencillo de explotar con este exploit que los investigadores que encontraron la vulnerabilidad han hecho público.
PHP-FPM es una alternativa a PHP FastCGI que gestiona mejor sitios web con mucho tráfico, además de ofrecer un manejo avanzado de los procesos.
La vulnerabilidad principal es un error de underflow memory corruption en «env_paht_info» en el módulo PHP-FMP, que combinándose con otros errores permiten ejecutar código en servidores vulnerables de forma remota.
Andrew Danau descubrió la vulnerabilidad en una competición CTF (Capture The Flag), cuyo objetivo es resolver una serie de retos informáticos. El fallo se encontró a partir de un comportamiento extraño en la parte del servidor al introducir un salto de línea codificado en la URL ‘%0A’. A partir de ese comportamiento Andrew, junto a otros dos investigadores, Emil Lerner y Omar Ganiev, descubrieron el fallo y crearon el exploit, cuya ejecución se realiza en una simple línea de comando.
Un sitio web es vulnerable a la explotación si cumple las siguientes características:
·        Utiliza NGINX y está configurado para reenviar las peticiones al procesador PHP-FPM.
·        Está configurado ‘fast_split_path_info‘ con una expresión regular que comience con ‘^’ y termine con ‘$’ (no contempla un salto de línea).
·        La variable PATH_INFO esta definida con fastcgi_param.
·        No hay comprobaciones como try_files $ uri = 404 o if (-f $ uri) que determinen si un archivo existe o no.
La configuración que se describe puede parecerse a la siguiente:
Se trata de una situación frecuente. Incluso algunos hosting utilizan esta configuración como parte de tutoriales de PHP-FPM. El proveedor de hosting Nextclowd ya ha avisado a sus clientes para que revisen sus servidores, ya que en un manual de instalación anteriormente publicado se utilizaba la configuración vulnerable.
Ayer se lanzó un parche para esta vulnerabilidad, casi un mes después de ser informado al equipo de desarrolladores de PHP, y dado que el exploit ya está disponible es probable que atacantes estén escaneando Internet para encontrar sitios web vulnerables.
Este fallo ha sido catalogado como CVE-2019-11043 y se recomienda encarecidamente que los usuarios actualicen PHP a PHP 7.3.11 y PHP 7.2.24 incluso si no están utilizando la configuración vulnerable.
Más información
·        Bugs.php-net
·        Exploit en GitHub
Fuente: Hispasec