las actualizaciones de PHP 7.3.11, 7.1.33 y 7.2.24, que son críticas (CVE-2019-11043) en la extensión PHP-FPM (gestor de procesos FastCGI), que permite ejecutar código remotamente en el sistema. Para atacar servidores que ejecutan scripts PHP mediante PHP-FPM con Nginx, ya está disponible públicamente .
El ataque es posible en configuraciones de nginx donde el paso a PHP-FPM se realiza con el desglose de partes de la URL usando «fastcgi_split_path_info» y la definición de la variable de entorno PATH_INFO, pero sin verificar previamente la existencia del archivo mediante la directiva «try_files $fastcgi_script_name» o la construcción «if (!-f $document_root$fastcgi_script_name)». El problema también está en las configuraciones recomendadas para la plataforma NextCloud. Por ejemplo, son vulnerables las configuraciones que contienen construcciones como:
location ~ [^\/]\.php(\/|$) {
fastcgi_split_path_info ^(.+?\.php)(\/.*)$;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_pass php:9000;
}
Se puede seguir la solución del problema en estas páginas: , , , , , , . Como un método alternativo de protección, después de la línea «fastcgi_split_path_info» se puede añadir una verificación de la existencia del archivo PHP solicitado:
try_files $fastcgi_script_name =404;
El problema es causado por un error en la manipulación de punteros en el archivo . Al asignar un puntero, se supone que el valor de la variable de entorno PATH_INFO contiene necesariamente un prefijo que coincide con la ruta al script PHP.
Si en la directiva fastcgi_split_path_info se indica un desglose de la ruta al script utilizando una expresión regular que es sensible al paso del carácter de nueva línea (por ejemplo, en muchos ejemplos se sugiere usar «^(.+?\.php)(\/.*)$»), el atacante puede conseguir que la variable de entorno PATH_INFO se escriba con un valor vacío. En este caso, a lo largo de la ejecución se escribe un cero en path_info[0] y se llama a FCGI_PUTENV.
Al solicitar una URL formateada de una manera específica, el atacante puede desplazar el puntero path_info al primer byte de la estructura «_fcgi_data_seg», y escribir un cero en este byte llevará a desplazar el puntero «char* pos» a una zona de memoria previa. La llamada a FCGI_PUTENV sobreescribirá los datos en esta memoria con un valor que el atacante puede controlar. En la memoria indicada, también se almacenan los valores de otras variables FastCGI, y al escribir sus datos, el atacante puede crear una variable ficticia PHP_VALUE y lograr la ejecución de su código.
Fuente: opennet.ru
