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 é
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:
try_files $fastcgi_script_name =404;
O problema é causado por um erro ao manipular ponteiros em um arquivo
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
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