Vulnerabilidad en php-fpm que permite la ejecución remota de código en el servidor

Disponible versiones de corrección de PHP 7.3.11, 7.1.33 y 7.2.24, en las que eliminado crítico vulnerabilidad (CVE-2019-11043) en la extensión PHP-FPM (FastCGI Process Manager) que le permite ejecutar su código de forma remota en el sistema. Atacar servidores que usan PHP-FPM para ejecutar scripts PHP junto con Nginx, ya está disponible públicamente laboral explotar.

El ataque es posible en configuraciones de nginx en las que el reenvío en PHP-FPM se realiza dividiendo partes de la URL usando "fastcgi_split_path_info" y definiendo la variable de entorno PATH_INFO, pero sin comprobar primero la existencia del archivo con el "try_files $fastcgi_script_name" directiva o "if (!-f $ document_root$fastcgi_script_name)". problema incluyendo проявляется en la configuración ofrecida para la plataforma NextCloud. Por ejemplo, las configuraciones con construcciones de la forma son vulnerables:

ubicación ~ [^/]\.php(/|$) {
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_passphp:9000;
}

Puede seguir la solución de problemas en distribuciones en estas páginas: Debian, RHEL, Ubuntu, SUSE/openSUSE, FreeBSD, Arco, Fedora. Como solución de seguridad, después de la línea "fastcgi_split_path_info", puede agregar una verificación de la existencia del archivo PHP solicitado:

try_files $fastcgi_script_name =404;

El problema se debe a un error al manipular los punteros en el archivo. sapi/fpm/fpm/fpm_main.c. 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 la directiva fastcgi_split_path_info especifica dividir la ruta al script usando una expresión regular que es sensible a la transmisión del carácter de nueva línea (por ejemplo, en muchos ejemplos se sugiere usar "^(.+?\.php)(/. *)$"), entonces el atacante puede lograr escribir un valor vacío en la variable de entorno PATH_INFO. En este caso, más adelante en la ejecución realizado escribiendo path_info[0] a cero y llamando a FCGI_PUTENV.

Al solicitar una URL formateada de cierta manera, un atacante puede mover el puntero path_info al primer byte de la estructura "_fcgi_data_seg", y escribir cero en este byte moverá el puntero "char * pos" al área de memoria que estaba anteriormente. El FCGI_PUTENV llamado a continuación sobrescribirá los datos en esta memoria con un valor que el atacante pueda controlar. La memoria especificada también almacena los valores de otras variables FastCGI y, al escribir sus datos, el atacante puede crear una variable PHP_VALUE ficticia y lograr la ejecución de su código.

Fuente: opennet.ru

Añadir un comentario