← volver
CVE-2025-32432criticalbajo ataqueCWE-94

Craft CMS Allows Remote Code Execution

100Vexday Risk Score

Corrige ahora. Ella está bajo explotación confirmada por CISA y tiene exploit funcional público.

ssvc Actcvss 10epss 100%
de la publicación al arma1 días
Publicada en NVD25 abr
1ª PoC+1d
metasploit14 abr
CISA KEV+329d
probabilidad de explotación
100%top 1% de las CVE
explotación observada
CISA + VulnCheck
28 exploit(s) público(s)
Acción exigida por CISAplazo federal: 2026-04-03

Apply mitigations per vendor instructions, follow applicable BOD 22-01 guidance for cloud services, or discontinue use of the product if mitigations are unavailable.

Resumen

Falha de execução remota de código pré-autenticação no controller de assets do Craft CMS, explorável via requisição HTTP não autenticada contra a rota de geração de transformação de imagens. É uma correção adicional para a CVE-2023-41892: o patch original validou o parâmetro assetId mas deixou o parâmetro handle sem validação de tipo, permitindo reabrir a mesma classe de bug. Está no catálogo KEV da CISA com exploração confirmada em campanha real, tem CVSS 10.0, EPSS próximo de 1.0, módulo Metasploit e template Nuclei públicos — é praticamente exploração garantida em qualquer instância não corrigida e exposta.

Detalle técnico

O ponto vulnerável é o método actionGenerateTransform() em src/controllers/AssetsController.php. Esse endpoint recebe os parâmetros de corpo assetId e handle para gerar uma transformação de imagem sob demanda. Antes da correção, o código pegava getRequiredBodyParam('handle') e usava o valor diretamente, sem checar se era uma string — um atacante podia enviar handle como array (por exemplo, handle[]=x) em vez de string.

Essa falta de validação de tipo (CWE-20, com efeito de CWE-843 type confusion) é a mesma classe de problema explorada na CVE-2023-41892 original, onde o parâmetro assetId aceitava um tipo inesperado e alimentava uma cadeia de deserialização/instanciação de objeto PHP (na linha de CWE-502) que o Craft/Yii2 processava internamente na geração da transformação, eventualmente permitindo que o atacante forçasse a execução de código no servidor. O fornecedor tratou o assetId na correção de 2023, mas o vetor equivalente via handle continuou aberto até esta CVE — por isso a descrição oficial chama isso de 'fix adicional' para a falha antiga, não uma vulnerabilidade nova e independente.

O commit de correção (e1c8544) é minimalista: adiciona um `if (!is_string($handle)) { throw new BadRequestHttpException(...) }` antes de qualquer uso do parâmetro. O tamanho da correção confirma que o problema real é ausência de validação de entrada num ponto que alimenta uma cadeia de gadget já conhecida do ecossistema Yii2/Craft, não uma lógica de negócio nova.

Cómo se explota

O vetor é uma requisição HTTP não autenticada (PR:N, UI:N no vetor CVSS) contra a action de geração de transformação de assets, que em muitas instalações Craft é acessível publicamente porque o front-end usa esse endpoint para gerar variações de imagem sob demanda. O atacante precisa apenas conseguir alcançar a rota via rede (AV:N) e enviar um assetId válido — em instalações típicas, IDs de asset são sequenciais e fáceis de enumerar ou descobrir via HTML público — junto com um handle malformado (array em vez de string) para acionar o caminho de código vulnerável.

A complexidade de ataque é baixa (AC:L): não exige condição de corrida, timing ou conhecimento de segredos internos, só a capacidade de montar a requisição corretamente. O resultado documentado por pesquisadores e pela exploração ativa observada é execução de código arbitrário no servidor, tipicamente usada para gravar um webshell acessível via HTTP, dando ao atacante controle total do processo PHP e, por consequência, do host.

Há exploração confirmada em campanha real (motivo da entrada no catálogo KEV da CISA), com PoC pública, módulo Metasploit e template Nuclei disponíveis — isso baixa a barreira para qualquer scanner automatizado de internet incluir a checagem. Instâncias expostas sem patch devem ser tratadas como já comprometidas ou sob varredura ativa, não apenas 'vulneráveis'.

Versiones

Afectadas
3.0.0-RC1 até anterior a 3.9.15; 4.0.0-RC1 até anterior a 4.14.15; 5.0.0-RC1 até anterior a 5.6.17.
Corregidas en
3.9.15 (ramo 3.x), 4.14.15 (ramo 4.x), 5.6.17 (ramo 5.x).

Cómo protegerse

Atualizar é a única mitigação com respaldo do fornecedor: 3.9.15 para o ramo 3.x, 4.14.15 para o ramo 4.x, 5.6.17 para o ramo 5.x. Instâncias que aplicaram apenas o patch da CVE-2023-41892 (dezembro de 2024, versões 3.9.14/4.x/5.x correspondentes) permanecem vulneráveis a este bypass — é preciso confirmar a versão exata pós-abril de 2025, não só que 'já foi corrigido para o RCE anterior'.

Não há workaround oficial documentado pelo fornecedor além do patch — a lógica vulnerável está no controller core de assets, usado por padrão em qualquer site que sirva imagens com transformação. Como controle compensatório não vendor-endorsed, é possível bloquear no WAF ou proxy reverso requisições POST para a rota de geração de transformação (actions/assets/generate-transform) que enviem o parâmetro handle como array (múltiplas ocorrências de handle[] no corpo) em vez de valor único — isso reduz risco mas não substitui o patch, pois não cobre variações do payload.

Não funciona como mitigação: restringir apenas o painel administrativo ou exigir autenticação no /admin, já que o endpoint vulnerável é acionado pelo front-end público, não pela área administrativa.

Cómo detectar

Em logs de acesso web, procurar requisições POST para a action de geração de transformação de assets (rota do tipo actions/assets/generate-transform, dependendo de como o site expõe o front controller) contendo o parâmetro handle enviado múltiplas vezes ou em formato de array em vez de string única — esse é o indicador estrutural do bypass. Após o patch, tentativas desse tipo geram BadRequestHttpException com a mensagem de handle inválido nos logs de aplicação; a ausência desse erro em ambiente não corrigido não significa ausência de exploração, apenas que o patch não estava presente para bloquear.

Complementarmente, verificar arquivos inesperados gravados em diretórios acessíveis via web (cache de transformação de assets, storage/runtime) como sinal de webshell pós-exploração, e cruzar timestamps de criação desses arquivos com entradas de log da rota vulnerável. Não há assinatura de rede única e confiável documentada pelas fontes revisadas além do padrão de parâmetro handle malformado.

Investigado y redactado con IA a partir del advisory del fabricante y análisis públicos, con las fuentes citadas. Verifica siempre la versión corregida en el advisory oficial antes de actuar.
Craft is a flexible, user-friendly CMS for creating custom digital experiences on the web and beyond. Starting from version 3.0.0-RC1 to before 3.9.15, 4.0.0-RC1 to before 4.14.15, and 5.0.0-RC1 to before 5.6.17, Craft is vulnerable to remote code execution. This is a high-impact, low-complexity attack vector. This issue has been patched in versions 3.9.15, 4.14.15, and 5.6.17, and is an additional fix for CVE-2023-41892.
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:L
Productos afectados
craftcms · cms
PoCs públicas encontradas28
exploitdbwww.exploit-db.com/exploits/52525no verificadogithubgithub.com/Sachinart/CVE-2025-3243227githubgithub.com/Chocapikk/CVE-2025-3243210githubgithub.com/CTY-Research-1/CVE-2025-32432-PoC6githubgithub.com/c0gnit00/CVE-2025-324323githubgithub.com/bambooqj/CVE-2025-324322githubgithub.com/cd-ratel/CVE-2025-324322githubgithub.com/Cosm3No1de/htb-orion-writeup0githubgithub.com/TheMursalin/CVE-2025-324320githubgithub.com/n40y/PoC_CVE-2025-324320githubgithub.com/theeomega/CVE-2025-32432-POC0githubgithub.com/PsyGuy007-sys/craftcms-cve-2025-32432-rce0githubgithub.com/EzraMansor/CVE-2025-32432-PoC0githubgithub.com/HeltonPojo/CVE-2025-324320vulncheckvulncheck.com/xdb/c6ea5169f9ecno verificadovulncheckvulncheck.com/xdb/298d32565f13no verificadovulncheckvulncheck.com/xdb/44a1c7835732no verificadovulncheckvulncheck.com/xdb/475a01011f66no verificadovulncheckvulncheck.com/xdb/20a318144b85no verificadovulncheckvulncheck.com/xdb/594630302d82no verificadovulncheckvulncheck.com/xdb/607359dbad90no verificadovulncheckvulncheck.com/xdb/fd579a16deaeno verificadovulncheckvulncheck.com/xdb/70ecf19db567no verificadovulncheckvulncheck.com/xdb/e32d0c6e52f9no verificadovulncheckvulncheck.com/xdb/3273899fa3b6no verificadovulncheckvulncheck.com/xdb/d7daf9fe47f5no verificadovulncheckvulncheck.com/xdb/912fcaaa7164no verificadocve_referencesensepost.com/blog/2025/investigating-an-in-the-wild-campaign-using-rce-in-craftcms/no verificado
⚠ Recursos públicos, para evaluar la exposición de sistemas que controlas o estás autorizado a probar. Prueba solo con autorización.