Uma vulnerabilidade relatada recentemente, identificada como CVE-2019-11043, pode afetar sites que usam o PHP‑FPM para executar páginas PHP. O uso do PHP‑FPM é particularmente comum em sites que utilizam o NGINX, pois ele não conta com um ambiente de execução PHP integrado ao processo. Em vez disso, o NGINX atua como proxy reverso para servidores de aplicações e gerenciadores de processos, como o PHP‑FPM.
A vulnerabilidade está no próprio PHP‑FPM, e não no NGINX. Portanto, a única solução garantida é atualizar para a versão corrigida (ou posterior) da sua versão do PHP: PHP 7.1.33, PHP 7.2.24, ou PHP 7.3.11.
Qual é a natureza da vulnerabilidade?
O NGINX se comunica com o PHP‑FPM usando o protocolo FastCGI. Cada mensagem FastCGI contém um conjunto de variáveis de ambiente. Uma delas, PATH_INFO, é derivada de outros parâmetros da solicitação. Se o valor dela estiver inesperadamente vazio, isso poderá causar corrupção de memória no binário do PHP‑FPM. É possível explorar essa situação e fazer com que o binário do PHP‑FPM execute comandos arbitrários no servidor local.
Essa vulnerabilidade pode ser acionada por uma configuração comum do NGINX, na qual o NGINX usa uma expressão regular na diretiva fastcgi_split_path_info para dividir o URI da solicitação em duas partes. Uma forma de acionar a vulnerabilidade é inserir um caractere de quebra de linha (%0a) ou de retorno de carro (%0d) no URI da solicitação, que não é processado corretamente pela expressão regular.
Mitigação da vulnerabilidade
Como mencionado acima, a única maneira garantida de corrigir essa vulnerabilidade é atualizar sua versão do PHP para a versão corrigida (ou posterior): PHP 7.1.33, PHP 7.2.24, ou PHP 7.3.11.
Se não for possível atualizar imediatamente o binário do PHP, há várias medidas de mitigação parcial que você pode adotar:
- Várias fontes sugeriram adicionar uma diretiva
try_filesà configuração do NGINX para verificar se a variável$uricorresponde a um arquivo (o script PHP) e, caso contrário, rejeitar a solicitação com o código404(NãoEncontrado):
location ~ [^/]\.php(/|$) { fastcgi_split_path_info ^(.+?\.php)(/.*)$;
fastcgi_param PATH_INFO $fastcgi_path_info;
try_files $uri =404;
#...
}- Observe que essa mitigação só funciona se o NGINX e o PHP‑FPM compartilharem o mesmo diretório raiz de documentos no mesmo host. As configurações do PHP variam de acordo com as necessidades da aplicação upstream. Teste alterações como essa para verificar se elas não afetam sua aplicação.
- Use o F5 BIG-IP ASM (Application Security Manager) para proteger a aplicação. Os conjuntos de assinaturas existentes “Command Execution” e “Server Side Code Injection” incluem assinaturas de ataque que bloqueiam a maioria das tentativas de descobrir e explorar essa vulnerabilidade do PHP‑FPM.Editor – Desde a publicação deste blog, a equipe de segurança da F5 lançou uma assinatura adicional específica para essa vulnerabilidade. Para obter detalhes, consulte o F5 DevCentral.
- Adicione uma regra do ModSecurity para bloquear solicitações que contenham o caractere suspeito
%0aou%0d:
SecRule REQUEST_URI "@rx %0(a|A|d|D)" "id:1,phase:1,t:lowercase,deny"- Essa solução é descrita no relatório original da Wallarm sobre a vulnerabilidade; ela pode gerar falsos positivos, e um invasor ainda pode encontrar outras formas de explorar a vulnerabilidade.
Usando um gerenciador de processos PHP diferente
Em vez de depender do PHP‑FPM, você pode usar o NGINX Unit para executar seus aplicativos PHP. O NGINX Unit é um servidor de aplicativos e gerenciador de processos de código aberto e alto desempenho que, além do PHP, oferece suporte a diversas linguagens e frameworks. Ele pode dimensionar automaticamente os aplicativos PHP de acordo com a carga e executar simultaneamente aplicativos que usam diferentes runtimes do PHP. Disponibilizamos gratuitamente binários, código-fonte e imagens do Docker.
Consulte a documentação do NGINX Unit para obter instruções sobre como configurar e operar o NGINX Unit para WordPress, uma aplicação popular, de alto tráfego e baseada em PHP. A implantação aproveita o suporte ao fornecimento de arquivos estáticos disponível no NGINX Unit 1.11.0 e versões posteriores.
Sobre o autor

Publicações relacionadas no blog

Como o F5 NGINX One aprimora o gerenciamento e a observabilidade
Descubra como o F5 NGINX One aprimora o gerenciamento e a observabilidade de ambientes híbridos e multicloud ao oferecer um console web centralizado baseado em SaaS, com insights em tempo real, conformidade automatizada e gerenciamento simplificado de configurações.

Do OpenAPI ao NGINX como gateway de API usando uma API declarativa
Descubra como transformar uma definição de esquema OpenAPI em uma configuração NGINX totalmente funcional, operando como um API Gateway com a segurança de um Web Application Firewall e um Portal do Desenvolvedor, usando uma abordagem declarativa de API.

Como gerenciar picos repentinos de tráfego e sobrecarga do servidor
Picos de tráfego e sobrecarga de servidores são preocupações sérias para varejistas online em qualquer época, mas especialmente durante a “Cyber Season” de compras de fim de ano. Detalhamos como você pode aproveitar as soluções de entrega de aplicações de nível de produção da NGINX para se preparar para aumentos repentinos de tráfego.

Distribuição segura de chaves privadas SSL com o NGINX
Descrevemos três maneiras progressivamente mais seguras de proteger chaves privadas SSL ao configurar o NGINX para processar tráfego HTTPS: permitir acesso de leitura apenas ao usuário root, criptografar as chaves com senhas armazenadas separadamente e distribuir as senhas a partir de um repositório central.
Agrupando solicitações de API em lotes com NGINX Plus e o módulo JavaScript do NGINX
O módulo JavaScript do NGINX lançado com o NGINX Plus R15 oferece suporte a subsolicitações, possibilitando uma classe totalmente nova de casos de uso para o NGINX Plus. Este exemplo completo também usa a API do NGINX Plus e os módulos de chave-valor para converter solicitações de API dos clientes em solicitações separadas para as APIs dos microsserviços que compõem um aplicativo.
Como superar o esgotamento de portas efêmeras no NGINX e no NGINX Plus
Confira dicas para evitar o esgotamento de portas efêmeras com ajustes no kernel do Linux, conexões keepalive e conexões vinculadas dinamicamente a endereços IP locais.