lançamentos corretivos do PHP 7.3.11, 7.1.33 e 7.2.24, nos quais crítica (CVE-2019-11043) na extensão PHP-FPM (Gerenciador de Processos FastCGI), que permite a execução remota de código no sistema. Um exploit já está disponível publicamente .
O ataque é possível em configurações do Nginx em que a passagem para o PHP-FPM é feita com a separação de partes da URL usando "fastcgi_split_path_info" e definição da variável de ambiente PATH_INFO, mas sem a verificação prévia da existência do arquivo pela diretiva "try_files $fastcgi_script_name" ou a construção "if (!-f $document_root$fastcgi_script_name)". O problema também está nas configurações sugeridas para a plataforma NextCloud. Por exemplo, estão vulneráveis as configurações com estruturas do tipo:
location ~ [^\/]\.php(\/|$) {
fastcgi_split_path_info ^(.+?\.php)(\/.*)$;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_pass php:9000;
}
Acompanhar a resolução do problema nas distribuições pode ser feito nessas páginas: , , , , , , . Como método de contorno de proteção, após a linha "fastcgi_split_path_info" pode-se adicionar uma verificação da existência do arquivo PHP solicitado:
try_files $fastcgi_script_name =404;
O problema é causado por um erro na manipulação de ponteiros no arquivo . Ao atribuir um ponteiro, assume-se que o valor da variável de ambiente PATH_INFO obrigatoriamente contém um prefixo que corresponde ao caminho do script PHP.
Se na diretiva fastcgi_split_path_info a separação do caminho para o script é feita utilizando uma expressão regular sensível à passagem do caractere de nova linha (por exemplo, muitos exemplos sugerem usar "^(.+?\.php)(\/.*)$"), o atacante pode conseguir registrar um valor vazio na variável de ambiente PATH_INFO. Neste caso, ao longo da execução a gravação em path_info[0] do zero e a chamada FCGI_PUTENV.
Solicitando uma URL formatada de maneira específica, o atacante pode conseguir um deslocamento do ponteiro path_info para o primeiro byte da estrutura "_fcgi_data_seg", e a gravação de zero neste byte resultará no deslocamento do ponteiro "char* pos" para uma área de memória anterior. A chamada subsequente FCGI_PUTENV sobrescreverá os dados nessa memória com um valor que pode ser controlado pelo atacante. Também são armazenados nesta memória os valores de outras variáveis FastCGI e, ao gravar seus dados, o atacante pode criar uma variável fictícia PHP_VALUE e conseguir a execução de seu código.
Fonte: opennet.ru
