Vulnerabilidades do PHP

CVE-2024-2961: a falha glibc iconv que mira o PHP

Ilustração: CVE-2024-2961, falha glibc iconv que mira o PHP

Na primavera (no hemisfério norte) de 2024, uma falha de vinte e quatro anos na biblioteca C do Linux mudou o nível de perigo de muitas aplicações PHP. A CVE-2024-2961 não afeta o WordPress diretamente, mas permite transformar uma simples leitura de arquivo em execução remota de código. Este artigo explica o mecanismo sem receita de exploração, quem é afetado e, sobretudo, como verificar e corrigir a sua hospedagem.

O que a CVE-2024-2961 corrige

A falha está na função iconv() da GNU C Library (glibc), usada para converter texto de um conjunto de caracteres para outro. Durante uma conversão para o conjunto ISO-2022-CN-EXT, a função pode gravar até 4 bytes além do buffer de saída que recebe. Esse estouro pode derrubar a aplicação ou sobrescrever uma variável vizinha na memória. Segundo o aviso oficial da glibc, o código defeituoso foi introduzido no ano 2000 e nunca havia sido notado.

O National Vulnerability Database atribui a ela uma pontuação CVSS 3.1 de 7,3. A falha foi descoberta por Charles Fol (Ambionics / Lexfo), relatada em 26 de março de 2024 e publicada em 17 de abril de 2024, junto com a correção.

Diagrama em quatro etapas: leitura de arquivo, filtro PHP, estouro na glibc, execução de código
A cadeia típica: uma leitura de arquivo vira tomada de controle do servidor.

Por que o PHP é o alvo mais exposto

O ponto-chave é o wrapper php://filter. O PHP permite aplicar conversões convert.iconv a qualquer fluxo lido. Um atacante que tenha um meio de fazer a aplicação ler um arquivo pode pedir que ela converta esse fluxo para ISO-2022-CN-EXT e, assim, disparar o bug da glibc. Segundo a análise do autor, todas as funções de leitura padrão do PHP são afetadas:

  • file_get_contents(), file(), readfile(), fgets()
  • getimagesize() e SplFileObject
  • gravações como file_put_contents() também são
  • por outro lado, as funções que apenas testam um arquivo (file_exists(), is_file()) não disparam a conversão

A técnica foi demonstrada em versões do PHP da 7.0 à 8.3. Em outras palavras, atualizar o PHP não basta: é a glibc do servidor que precisa ser corrigida. O wrapper phar:// também não é o assunto aqui, ao contrário de outros ataques de desserialização.

O filtro não é a única porta de entrada. O autor cita várias formas de levar um fluxo até o iconv: uma injeção de SQL que explora LOAD DATA LOCAL INFILE, uma falha XXE, certas bibliotecas de processamento de imagens ou de tradução. O ponto em comum é sempre o mesmo: é preciso um meio de fazer a aplicação manipular um conteúdo que o atacante controla e, por baixo, uma glibc não corrigida. Por isso a correção acontece no nível do sistema, e não de um único plugin.

Um caso WordPress e uma exploração em massa

A primeira demonstração pública mirava um WordPress com o plugin BuddyForms 2.7.7, vulnerável à CVE-2023-26326 (desserialização sem autenticação). Essa falha de plugin fornecia a primitiva de leitura de arquivo necessária para chegar à glibc. É um bom lembrete: uma falha de plugin considerada média pode se tornar crítica quando encadeada com um defeito do sistema.

O perigo não ficou na teoria. A partir do meio de 2024, a campanha chamada CosmicSting encadeou a CVE-2024-34102 (uma falha XXE do Adobe Commerce / Magento) com a CVE-2024-2961 para obter execução de código. Segundo a Sansec, em dados divulgados pelo BleepingComputer em outubro de 2024, mais de 4.000 lojas (cerca de 5% da base de Adobe Commerce e Magento) foram comprometidas. Entre as vítimas citadas havia grandes marcas.

Linha do tempo da CVE-2024-2961, do ano 2000 à exploração em massa do fim de 2024
De um bug adormecido por 24 anos a uma exploração em massa em poucos meses.

Versões da glibc afetadas e corrigidas

A falha afeta a glibc 2.39 e todas as versões anteriores. Ela foi corrigida na versão 2.40 e levada por backport aos ramos de manutenção. Em um servidor, o que conta quase sempre é o pacote da sua distribuição, não a versão do projeto original.

OrigemSituaçãoDetalhe
glibc original < 2.40VulnerávelCódigo defeituoso presente desde o ramo 2.1.93
glibc 2.40CorrigidoCorreção de referência, abril de 2024
Ramos 2.32 a 2.39Corrigido por backportVia pacotes da distribuição
Debian 12 (bookworm)Corrigido2.36-9+deb12u6 e superior
Debian 13 (trixie)Corrigido2.37-18 e superior
Verifique sempre a versão do pacote glibc fornecida pela sua hospedagem.

Os números de pacote vêm do rastreamento do Debian e do aviso da glibc; confirme a situação exata nos boletins da sua própria distribuição (Red Hat, Ubuntu, AlmaLinux…).

Como saber se você é afetado

Em uma hospedagem compartilhada, nem sempre é você quem gerencia a glibc, mas muitas vezes dá para verificar e alertar o suporte. Se você tem acesso SSH:

  1. Liste os conjuntos de caracteres ativos: iconv -l | grep -E 'CN-?EXT'. Uma saída contendo ISO-2022-CN-EXT indica que o módulo vulnerável está presente.
  2. Compare a versão do pacote glibc (ldd --version) com a correção anunciada pela sua distribuição.
  3. Pergunte à hospedagem a data em que a correção da glibc foi aplicada nos seus servidores.

Segundo a Zend, uma aplicação não fica exposta por esse caminho se uma destas condições for verdadeira: ela não usa a extensão iconv, a glibc está atualizada, o conjunto ISO-2022-CN-EXT foi removido da configuração, ou a aplicação só passa ao iconv conjuntos de caracteres explicitamente autorizados.

Corrigir e reduzir o risco

A única correção de verdade é atualizar a glibc. Como lembram a Zend e a Red Hat, nenhuma correção do PHP será publicada, já que o defeito está na biblioteca do sistema. Enquanto a atualização não chega, a Red Hat e o Rocky Linux documentam uma medida temporária: remover o conjunto ISO-2022-CN-EXT comentando as três linhas correspondentes em gconv-modules-extra.conf e regenerando o cache com iconvconfig. Isso deve ser feito por um administrador, depois de testes, porque pode quebrar aplicações que realmente usam esse conjunto.

Além disso, dois reflexos limitam o alcance desse tipo de cadeia. Primeiro, reduzir o número de plugins capazes de ler um arquivo a partir de um parâmetro: são eles que fornecem a primitiva inicial. Depois, monitorar nos seus logs as tentativas de leitura de arquivos sensíveis, que muitas vezes indicam uma fase de reconhecimento antes de um ataque encadeado. Uma falha de sistema corrigida rapidamente vale sempre mais do que uma detecção depois do fato.

Para lembrar

  • A CVE-2024-2961 é um estouro na glibc (iconv, conjunto ISO-2022-CN-EXT), não no PHP: atualizar só o PHP não protege.
  • Uma leitura de arquivo por meio de uma falha de plugin pode, encadeada a esse bug, levar à execução de código.
  • A glibc 2.39 e anteriores são afetadas; a correção está na 2.40 e nos pacotes com backport.
  • Verifique a versão da glibc da sua hospedagem e a data da correção; mantenha o PHP e os seus plugins atualizados.

O papel do WP Masquerade

Sejamos claros: o WP Masquerade não corrige uma falha da glibc, do PHP, de um tema ou de um plugin. O papel dele é reduzir a superfície e o ruído e complementar uma manutenção saudável, nunca substituí-la. Três contribuições são pertinentes aqui. Primeiro, o endurecimento e o mascaramento das assinaturas públicas atrasam o reconhecimento automatizado que muitas vezes precede a exploração. Depois, as armadilhas para robôs contam as requisições a endereços sensíveis (/.env, backups .sql, caminhos de outros softwares), o que dá um sinal precoce de reconhecimento. Por fim, a verificação de integridade do núcleo (Pro) ajuda a detectar uma modificação depois de um comprometimento. A proteção de fundo continua sendo a atualização da glibc, do PHP e dos plugins, com backups testados.

Vídeos para se aprofundar

A palestra de referência do pesquisador que fez a descoberta (GreHack 2024, em inglês).
A mesma pesquisa apresentada na DEF CON 32 (em inglês).

Fontes

Outras fontes consultadas: documentação oficial, páginas oficiais dos fornecedores, publicações de pesquisadores de segurança e artigos da imprensa especializada.

Vulnerabilidades do PHP6 min

CVE-2024-4577: a falha do PHP-CGI no Windows explicada

Uma conversão de caracteres do Windows reabriu uma falha do PHP-CGI de doze anos atrás. Condições de exposição, cronologia da exploração, versões corrigidas e verificações a…

Segurança WordPress, sem ruído

Um e-mail quando importa: novos ataques observados, atualizações do plugin e guias práticos. Sem spam, cancelamento com um clique.

Comece de graça e mude para o Pro quando estiver pronto

A versão gratuita já oculta o WordPress e muda o endereço da página de login. O Pro acrescenta aliases, verificação em duas etapas e monitoramento.