Vulnerabilidad en PHP 7 permite ejecución remota en servidore NGINX

PHP Elephant Logo
Estándar

Si estás ejecutando un sitio web basado en PHP en un servidor web NGINX y tienes habilitada la función PHP-FPM para un mejor rendimiento, ten cuidado con una vulnerabilidad recientemente revelada que podría permitir que atacantes remotos puedan tomar el control de tu servidor web.

La vulnerabilidad, rastreada como CVE-2019-11043, afecta a sitios web con ciertas configuraciones de PHP-FPM que según los informes, no es infrecuente en la web y podría explotarse fácilmente con una vulnerabilidad de prueba de concepto (PoC) para la falla, lanzado públicamente en GitHub.

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

La vulnerabilidad principal es un problema de corrupción de memoria de flujo inferior “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 los servidores web vulnerables.

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

Aunque el exploit PoC lanzado públicamente está diseñado para apuntar específicamente a servidores vulnerables que ejecutan versiones de PHP 7+, el error de desbordamiento PHP-FPM también afecta a versiones anteriores de PHP y podría ser configurado de una manera diferente para ser explotado en plataformas más antiguas.

En resumen, un sitio web es vulnerable si cumple los siguientes requisitos:

  • 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.

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

nginx-php-fpm-hacking

En el ejemplo anterior, la directiva fastcgi_split_path_info se usa para dividir la URL de las páginas web PHP en dos partes, que ayuda al motor PHP-FPM a distinguir cuál es el nombre del script y el otro parámetro contiene su información de ruta.

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

Según los investigadores, la expresión regular que define la directiva fastcgi_split_path_info, como se muestra en el ejemplo de código de líneas arriba, puede manipularse utilizando el carácter de nueva línea de manera que la función de división eventualmente deje vacía la información de la ruta.

A continuación, dado que hay un puntero aritmético en el código FPM que supone 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, el atacante puede explotar el problema para sobrescribir los datos. en la memoria solicitando URL especialmente diseñadas de los sitios web vulnerables.

Los investigadores que han creado el exploit de prueba de concepto basan sus scripts en manipular la memoria y agregar valores a php.ini personalizados, lo que permite a los atacantes ejecutar código arbitrario utilizando un shell web.

Actualizaciones de PHP 7 lanzadas para corregir la falla de FPM

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

Uno de los proveedores de alojamiento web afectados es Nextcloud, quien lanzó el día jueves pasado (24 de Octubre) un aviso advirtiendo a sus usuarios que: “la configuración predeterminada de Nextcloud NGINX también es vulnerable a este ataque” y recomendó a los administradores del sistema que tomen medidas inmediatas.

Ese mismo día (24 de Octubre), la fundación PHP lanzó un parche para esta vulnerabilidad, casi un mes después de que los investigadores lo informaron al equipo de desarrolladores de PHP.

Dado que el exploit PoC ya está disponible y el parche fue lanzado casi en simultáneo, es probable que algunos ciberdelincuentes ya hayan comenzado a escanear Internet para buscar sitios web vulnerables y tomado el control de alguno de ellos.

Por lo tanto, se recomienda encarecidamente a los usuarios que actualicen PHP a que actualicen a las últimas versiones estables PHP 7.3.11 y PHP 7.2.24. Se recomienda hacerlo incluso si tu configuración no es vulnerable a este tipo de ataque.