Vulnerabilidade no php-fpm que permite execução remota de código no servidor

Disponível versões corretivas do PHP 7.3.11, 7.1.33 e 7.2.24, nas quais eliminado crítico vulnerabilidade (CVE-2019-11043) na extensão PHP-FPM (FastCGI Process Manager), que permite executar remotamente seu código no sistema. Para atacar servidores que usam PHP-FPM em conjunto com Nginx para executar scripts PHP, já está disponível publicamente trabalhando explorar.

O ataque é possível em configurações nginx nas quais o encaminhamento para PHP-FPM é realizado separando partes da URL utilizando “fastcgi_split_path_info” e definindo a variável de ambiente PATH_INFO, mas sem antes verificar a existência do arquivo utilizando o “try_files $fastcgi_script_name” diretiva ou “if (!-f $) document_root$fastcgi_script_name)". O problema também é manifesta-se nas configurações oferecidas para a plataforma NextCloud. Por exemplo, configurações com estruturas como:

localização ~ [^/]\.php(/|$) {
fastcgi_split_path_info ^ (. +? \. php) (/.*) $;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_pass php:9000;
}

Você pode acompanhar a resolução do problema nos kits de distribuição nestas páginas: Debian, RHEL, Ubuntu, SUSE / openSUSE, FreeBSD, arco, Fedora. Como solução alternativa, você pode adicionar uma verificação da existência do arquivo PHP solicitado após a linha “fastcgi_split_path_info”:

try_files $fastcgi_script_name =404;

O problema é causado por um erro ao manipular ponteiros em um arquivo sapi/fpm/fpm/fpm_main.c. Ao atribuir um ponteiro, assume-se que o valor da variável de ambiente PATH_INFO deve conter um prefixo que corresponda ao caminho para o script PHP.
Se a diretiva fastcgi_split_path_info especifica a divisão do caminho do script usando uma expressão regular sensível a nova linha (por exemplo, muitos exemplos sugerem o uso de "^(.+?\.php)(/.*)$"), então um invasor pode garantir que um o valor vazio é gravado na variável de ambiente PATH_INFO. Neste caso, mais adiante na execução é escrevendo path_info[0] como zero e chamando FCGI_PUTENV.

Ao solicitar uma URL formatada de uma determinada maneira, um invasor pode conseguir uma mudança do ponteiro path_info para o primeiro byte da estrutura “_fcgi_data_seg”, e escrever um zero neste byte levará ao movimento do “char* pos” ponteiro para uma área de memória localizada anteriormente. O próximo chamado FCGI_PUTENV substituirá os dados nesta memória por um valor que o invasor possa controlar. A memória especificada também armazena os valores de outras variáveis ​​​​FastCGI e, ao gravar seus dados, um invasor pode criar uma variável PHP_VALUE fictícia e executar seu código.

Fonte: opennet.ru

Adicionar um comentário