Bug do PHP permite a execução remota de código em servidores NGINX

Bug do PHP permite a execução remota de código em servidores NGINX

29 de outubro de 2019 0 Por Suporte Rede Digital

Um bug de buffer insuficiente no PHP pode permitir a execução remota de código (RCE) em servidores NGINX direcionados.

Descoberto pela primeira vez durante uma competição hCorem Capture the Flag em setembro, o bug (CVE-2019-11043) existe na diretiva FastCGI usada em algumas implementações de PHP em servidores NGINX, de acordo com pesquisadores do Wallarm.

O PHP fornece cerca de 30% dos sites modernos, incluindo plataformas populares como WordPress e Drupal – mas os servidores NGINX só são vulneráveis ​​se o PHP-FPM estiver ativado (um recurso de otimização não padrão que permite que os servidores executem scripts mais rapidamente). O problema foi corrigido nas versões 7.3.11, 7.2.24 e 7.1.33 do PHP, lançadas na semana passada.

Em uma postagem na segunda-feira , os pesquisadores do Wallarm disseram que o bug pode ser explorado enviando pacotes especialmente criados para o servidor usando a diretiva “fastcgi_split_path” no arquivo de configuração do NGINX. Esse arquivo está configurado para processar dados do usuário, como uma URL. Se um invasor criar uma URL especial que inclua um byte “% 0a” (nova linha), o servidor retornará mais dados do que deveria, o que confunde o mecanismo FastCGI.

“Em particular, [o bug pode ser explorado] em uma diretiva fastcgi_split_path e um truque de regexp com novas linhas”, de acordo com o pesquisador de segurança do Wallarm, Andrew Danau, que encontrou o bug. “Por causa do caractere% 0a, o NGINX definirá um valor vazio para essa variável, e o fastcgi + PHP não esperará isso … [como resultado], é possível inserir [em] variáveis ​​arbitrárias do FastCGI, como PHP_VALUE.”

Outro pesquisador de segurança que participou do exercício do CTF, Emil Lerner, ofereceu mais detalhes no rastreador de erros do PHP : “O regexp na diretiva` fastcgi_split_path_info` pode ser quebrado usando o caractere de nova linha (na forma codificada,% 0a). Regexp quebrado leva a PATH_INFO vazio, o que aciona o bug ”, disse ele.

Lerner postou uma prova de conceito de zero dia para a falha que funciona no PHP 7 para permitir a execução do código. A exploração, que é trivial, utiliza uma otimização usada para armazenar variáveis ​​FastCGI, _fcgi_data_seg.

“Geralmente, esse tipo de resposta [buffer underflow] está relacionado a ataques de corrupção de memória e esperávamos um ataque ao tipo de divulgação de informações”, disseram os pesquisadores de Wallarm. “A divulgação de informações é ruim o suficiente, pois pode resultar em vazamento de dados confidenciais ou financeiros. Pior ainda, de tempos em tempos, embora muito raramente, esse comportamento pode indicar uma vulnerabilidade de execução remota de código. ”

Os pesquisadores acrescentaram que, sem aplicar patches, esse problema pode ser um ponto de entrada perigoso para aplicativos da Web, dada a natureza trivial de montar uma exploração.

Os administradores podem identificar as diretivas FastCGI vulneráveis ​​em suas configurações NGINX com um comando bash, “egrep -Rin –color ‘fastcgi_split_path’ / etc / nginx /”, de acordo com o Wallarm.