Vulnerabilidade en php-fpm que permite a execución remota de código no servidor

Dispoñible versións correctivas de PHP 7.3.11, 7.1.33 e 7.2.24, nas que eliminado crítico vulnerabilidade (CVE-2019-11043) na extensión PHP-FPM (FastCGI Process Manager), que che permite executar o teu código de forma remota no sistema. Para atacar servidores que usan PHP-FPM xunto con Nginx para executar scripts PHP, xa está dispoñible publicamente traballador explotar.

O ataque é posible en configuracións de nginx nas que o reenvío a PHP-FPM se realiza separando partes do URL usando "fastcgi_split_path_info" e definindo a variable de ambiente PATH_INFO, pero sen comprobar antes a existencia do ficheiro usando o "try_files $fastcgi_script_name" directiva ou "if (!-f $) raíz_documento$nome_script_fastcgi)". O problema tamén é aparece na configuración ofrecida para a plataforma NextCloud. Por exemplo, configuracións con estruturas como:

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

Podes seguir a resolución do problema nos kits de distribución nestas páxinas: Debian, RHEL, Ubuntu, SUSE/openSUSE, FreeBSD, Arco, Fedora. Como solución alternativa, pode engadir unha comprobación da existencia do ficheiro PHP solicitado despois da liña "fastcgi_split_path_info":

try_files $fastcgi_script_name =404;

O problema é causado por un erro ao manipular os punteiros nun ficheiro sapi/fpm/fpm/fpm_main.c. Ao asignar un punteiro, asúmese que o valor da variable de ambiente PATH_INFO debe conter un prefixo que coincida coa ruta do script PHP.
Se a directiva fastcgi_split_path_info especifica dividir a ruta do script usando unha expresión regular sensible á nova liña (por exemplo, moitos exemplos suxiren usar "^(.+?\.php)(/.*)$"), entón un atacante podería asegurarse de que un o valor baleiro escríbese na variable de ambiente PATH_INFO. Neste caso, máis adiante na execución levado a cabo escribindo path_info[0] a cero e chamando a FCGI_PUTENV.

Ao solicitar un URL formateado dun determinado xeito, un atacante pode conseguir un desprazamento do punteiro path_info ao primeiro byte da estrutura "_fcgi_data_seg" e escribir un cero neste byte levará ao movemento do "char* pos" punteiro a unha área de memoria localizada anteriormente. O seguinte FCGI_PUTENV sobrescribirá os datos desta memoria cun valor que o atacante poida controlar. A memoria especificada tamén almacena os valores doutras variables FastCGI e, ao escribir os seus datos, un atacante pode crear unha variable PHP_VALUE ficticia e lograr a execución do seu código.

Fonte: opennet.ru

Engadir un comentario