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:
sudo grep -rhiE '\?(%AD|[^ ]*(\+|%20)%AD)[a-z]' --include='*access*' --exclude='*.gz' /var/log/apache2 /var/log/httpd 2>/dev/null | tail -20Num servidor Windows, verifique a versão do PHP e se o Apache o executa como CGI:
php -vCorrigir (Windows)
- 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.
- Melhor ainda, pare de rodar o PHP como CGI: use-o como módulo do Apache, FastCGI ou PHP-FPM.
- No XAMPP, se você não precisa do PHP-CGI, comente a linha
ScriptAlias /php-cgi/emapache/conf/extra/httpd-xampp.confe reinicie o Apache.
Até você poder atualizar, os pesquisadores que encontraram a falha publicaram esta regra temporária do Apache para os locales afetados:
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
- O agente anota quais portas SSH e quais sites respondem.
- Ele grava a regra (id ModSecurity 9920003) entre os próprios marcadores no seu arquivo ModSecurity, executa
apachectl configteste recarrega o Apache de forma suave. Se o teste falhar, o arquivo anterior volta ao lugar. - Ele verifica se o SSH e os sites ainda respondem, e remove o patch se não responderem.
- Ele verifica se o ModSecurity realmente bloqueia com a regra, com uma requisição de teste local inofensiva. Um ModSecurity em
DetectionOnlysó 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.
