Nueva falla de PHP podría permitir a los atacantes piratear sitios que se ejecutan en servidores Nginx

Explosión de pirateo de php-fpm de nginx

Si está ejecutando cualquier sitio web basado en PHP en el servidor NGINX y tiene habilitada la función PHP-FPM para un mejor rendimiento, tenga cuidado con una vulnerabilidad recientemente revelada que podría permitir que atacantes no autorizados pirateen el servidor de su sitio web de forma remota.

La vulnerabilidad, rastreada como CVE-2019-11043afecta a sitios web con ciertas configuraciones de PHP-FPM que, según se informa, no son infrecuentes en la naturaleza y podrían explotarse fácilmente como un exploit de prueba de concepto (PoC) para la falla que ya se ha lanzado públicamente.

PHP-FPM es una implementación alternativa de PHP FastCGI que ofrece procesamiento avanzado y altamente eficiente para scripts escritos en lenguaje de programación PHP.

La principal vulnerabilidad es un problema de corrupción de la memoria de subdesbordamiento «env_path_info» en el módulo PHP-FPM, y encadenarlo junto con otros problemas podría permitir a los atacantes ejecutar de forma remota código arbitrario en servidores web vulnerables.

La vulnerabilidad fue detectada por Andrew Danau, un investigador de seguridad de Wallarm mientras buscaba errores en una competencia Capture The Flag, que luego fue armada por dos de sus colegas investigadores, Omar Ganiev y Emil Lerner, para desarrollar un exploit de ejecución remota de código completamente funcional. .

¿Qué sitios web basados ​​en PHP son vulnerables a los piratas informáticos?

Aunque el exploit PoC publicado públicamente está diseñado para apuntar específicamente a servidores vulnerables que ejecutan versiones de PHP 7+, el error de subdesbordamiento de PHP-FPM también afecta a versiones anteriores de PHP y podría armarse de una manera diferente.

En resumen, un sitio web es vulnerable si:

  • NGINX está configurado para reenviar solicitudes de páginas PHP al procesador PHP-FPM,
  • La directiva fastcgi_split_path_info está presente en la configuración e incluye una expresión regular que comienza con un símbolo ‘^’ y termina con un símbolo ‘$’,
  • La variable PATH_INFO se define con la directiva fastcgi_param,
  • No hay comprobaciones como try_files $ uri = 404 o if (-f $ uri) para determinar si un archivo existe o no.

Esta configuración vulnerable de NGINX y PHP-FPM se parece al siguiente ejemplo:

piratería nginx php-fpm

Aquí, la directiva fastcgi_split_path_info se usa para dividir la URL de las páginas web PHP en dos partes, el valor de una ayuda al motor PHP-FPM para aprender el nombre del script y la otra contiene su información de ruta.

¿Cómo funciona el exploit PoC RCE para PHP FPM?

Según los investigadores, la expresión regular de muestra, que define la directiva fastcgi_split_path_info, como se muestra, se puede manipular usando el carácter de nueva línea de manera que la función de división finalmente deja vacía la información de la ruta.

Luego, dado que hay un puntero aritmético en el código FPM que asume incorrectamente que env_path_info tiene un prefijo igual a la ruta del script php sin verificar realmente la existencia del archivo en el servidor, un atacante puede aprovechar el problema para sobrescribir los datos. en la memoria al solicitar direcciones URL especialmente diseñadas de los sitios web objetivo.

pirateo de php-fpm

truco de ejecución de código php-fpm

En segundo plano, el exploit PoC [1 (PHuiP-FPizdaM), 2 ] Los investigadores lanzaron cadenas para unir estos dos problemas para manipular la memoria y agregar valores php.ini personalizados, como se muestra en la captura de pantalla, en el archivo de configuración PHP-FPM de un servidor objetivo, lo que permite a los atacantes ejecutar código arbitrario utilizando un shell web.

«Usando una longitud cuidadosamente elegida de la ruta URL y la cadena de consulta, un atacante puede hacer que path_info apunte con precisión al primer byte de la estructura _fcgi_data_seg. Poner cero mueve el campo ‘char * pos’ hacia atrás, y seguir FCGI_PUTENV sobrescribe algunos datos (incluidos otras variables cgi rápidas) con la ruta del script «, dijeron los investigadores en un informe de error enviado al proyecto PHP.

«Usando esta técnica, pude crear una variable fcgi PHP_VALUE falsa y luego usar una cadena de valores de configuración cuidadosamente elegidos para ejecutar el código».

Actualizaciones de PHP 7 lanzadas para parchear la falla de FPM

La lista de condiciones previas para una explotación exitosa, como se mencionó anteriormente, no es infrecuente porque las configuraciones vulnerables están siendo utilizadas por algunos de los proveedores de alojamiento web y están disponibles en Internet como parte de muchos tutoriales PHP FPM.

Uno de los proveedores de alojamiento web afectados es Nextcloud, que ayer publicó un aviso advirtiendo a sus usuarios que «la configuración predeterminada de NGINX de Nextcloud también es vulnerable a este ataque» y recomendando a los administradores del sistema que tomen medidas inmediatas.

Ayer se lanzó un parche para esta vulnerabilidad, casi un mes después de que los investigadores lo informaran al equipo de desarrolladores de PHP.

Dado que el exploit PoC ya está disponible y el parche se lanzó ayer, es probable que los piratas informáticos ya hayan comenzado a escanear Internet en busca de sitios web vulnerables.

Por lo tanto, se recomienda encarecidamente a los usuarios que actualicen PHP a la última versión de PHP 7.3.11 y PHP 7.2.24. Simplemente hágalo, incluso si no está utilizando la configuración vulnerable.

Continua leyendo