InfraFenceInfraFence

Live Security Operations

Começar

CVE-2024-4577: injeção de argumentos no PHP-CGI, verificar e corrigir

Última atualização:

O PHP-CGI no Windows, com algumas páginas de código (japonesa, chinesa e outras), converte um soft hyphen (%AD) na linha de comando em um hífen. Pelo Apache, a query string chega ao PHP-CGI na linha de comando, então uma URL como /?%ADd+allow_url_include%3d1 vira uma opção do PHP e leva à execução de código.

A falha depende de uma conversão de caracteres do Windows: o PHP no Linux não é afetado. Os scanners enviam as mesmas requisições para todos os servidores, Linux incluído, e é por isso que você as vê nos seus logs.

Em resumo

CVE
CVE-2024-4577
Software
PHP (PHP-CGI no Windows)
Versões afetadas
8.3 antes da 8.3.8, 8.2 antes da 8.2.20, 8.1 antes da 8.1.29 e anteriores, no Windows
Corrigida em
8.1.29, 8.2.20, 8.3.8
Pontuação CVSS
9.8 Crítica (NVD, CVSS 3.1) · CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
CISA Known Exploited Vulnerabilities
Sim, adicionada em 12 de junho de 2024
Publicada pelo NVD
9 de junho de 2024
Patch virtual do InfraFence
vp-cve-2024-4577 (ModSecurity id 9920003)

O que é afetado

PHP 8.3 antes da 8.3.8, 8.2 antes da 8.2.20, 8.1 antes da 8.1.29 e versões mais antigas, no Windows, quando o PHP roda como CGI (o Action do Apache para php-cgi.exe, ou o binário do PHP acessível a partir de uma pasta CGI). O XAMPP para Windows expunha o PHP-CGI por padrão. O PHP como módulo do Apache, como FastCGI ou PHP-FPM não é afetado.

Verificar se um servidor está vulnerável

No Linux não há nada a corrigir para esta CVE; mantenha o PHP numa versão com suporte e atualizada por causa das outras. Mesmo assim, você pode ver quem está tentando:

Logs de acesso do Apache
sudo grep -rhiE '\?(%AD|[^ ]*(\+|%20)%AD)[a-z]' --include='*access*' --exclude='*.gz' /var/log/apache2 /var/log/httpd 2>/dev/null | tail -20

Num servidor Windows, verifique a versão do PHP e se o Apache o executa como CGI:

Prompt de comando do Windows
php -v

Corrigir (Windows)

  1. Atualize o PHP para 8.3.8, 8.2.20 ou 8.1.29 ou posterior. Versões sem suporte não receberam correção: migre para uma com suporte.
  2. Melhor ainda, pare de rodar o PHP como CGI: use-o como módulo do Apache, FastCGI ou PHP-FPM.
  3. No XAMPP, se você não precisa do PHP-CGI, comente a linha ScriptAlias /php-cgi/ em apache/conf/extra/httpd-xampp.conf e reinicie o Apache.

Até você poder atualizar, os pesquisadores que encontraram a falha publicaram esta regra temporária do Apache para os locales afetados:

Configuração do Apache
RewriteEngine On
RewriteCond %{QUERY_STRING} ^%ad [NC]
RewriteRule .? - [F,L]

Como o InfraFence a bloqueia

O patch virtual para a CVE-2024-4577 é uma regra ModSecurity sobre a query string: ele bloqueia um soft hyphen (%AD ou o byte bruto) seguido de uma letra no início da query string ou depois de um + ou de um espaço codificado, que é a forma como o ataque passa uma opção.

Nota: O agente do InfraFence roda no Linux, onde o PHP não é vulnerável a esta CVE. Num servidor Linux, o patch bloqueia as tentativas e as reporta, para que você veja os scans; ele não corrige nada que estivesse quebrado.

Como o patch é aplicado

  1. O agente anota quais portas SSH e quais sites respondem.
  2. Ele grava a regra (id ModSecurity 9920003) entre os próprios marcadores no seu arquivo ModSecurity, executa apachectl configtest e recarrega o Apache de forma suave. Se o teste falhar, o arquivo anterior volta ao lugar.
  3. Ele verifica se o SSH e os sites ainda respondem, e remove o patch se não responderem.
  4. Ele verifica se o ModSecurity realmente bloqueia com a regra, com uma requisição de teste local inofensiva. Um ModSecurity em DetectionOnly só registra: nesse caso, o patch é removido e reportado como ineficaz, nunca como aplicado.

Cada requisição que o patch bloqueia é reportada com CVE-2024-4577 (agente 1.0.37 ou posterior): você vê as tentativas na atividade do servidor e na página Exploração do painel, e assim sabe que a vulnerabilidade está sendo testada contra você.

Atenção: Um patch virtual bloqueia a forma conhecida do ataque nas requisições que passam pelo Apache naquele servidor. Ele não substitui a atualização: instale a versão corrigida e depois remova o patch em Atividade com Desfazer, se não precisar mais dele.

Os patches virtuais precisam do Apache com ModSecurity, da configuração Permitir alterações na configuração do servidor web e de nenhum painel de hospedagem ou ferramenta de gerenciamento de configuração controlando o servidor web; eles fazem parte do plano Pro e do AutoMode. Uma pessoa os aplica a partir da análise por IA, ou o AutoMode faz isso. Veja Patches virtuais.

Fontes

Os fatos desta página vêm destas fontes; consulte-as para ver se houve mudanças.

Teste grátis em 1 servidor

O Starter é gratuito para um servidor, com proteção completa e bloqueio automático. Sem cartão de crédito.

Instale o agente como root, com o seu token no lugar de <TOKEN>:

curl -fsSL https://github.com/infrafence/infrafence-agent/releases/latest/download/install.sh | sudo bash -s -- --token <TOKEN>

O token é criado no painel, em Servidores › Adicionar servidor.