Na hierarquia das vulnerabilidades da Web, poucas coisas chamam a atenção imediata de um operador da Equipe Vermelha como uma Injeção de objeto PHP (POI) exposto a usuários não autenticados.
CVE-2025-32432 é exatamente isso. Com um Pontuação CVSS v3.1 de 10,0Na verdade, essa vulnerabilidade no Craft CMS não é apenas mais um bug; é uma aula magistral sobre como os contêineres modernos de injeção de dependência (DI) podem ser usados como arma contra os aplicativos que eles suportam.
Para os engenheiros de segurança mais dedicados, o interesse aqui não é apenas o RCE, mas o mecanismo. Ele destaca uma falha fundamental na forma como o Estrutura do Yii2 (que alimenta o Craft) manipula matrizes de configuração passadas pela entrada do usuário. Esta análise dissecará o rastreamento de pilha da vulnerabilidade, as cadeias de gadgets específicas necessárias para a exploração e por que esse CVE específico representa o ponto de ruptura para os scanners DAST tradicionais, exigindo o surgimento de agentes ofensivos orientados por IA.
A falha arquitetônica: quando o DI dá errado
Para entender o CVE-2025-32432, é preciso entender a arquitetura do Craft CMS. O Craft depende muito dos padrões Service Locator e Dependency Injection do Yii2.
A vulnerabilidade reside no AtivosControladorespecificamente o actionGenerateTransform método. Esse ponto de extremidade foi projetado para permitir que o front-end solicite transformações de imagem (corte, redimensionamento) em tempo real.
A pia vulnerável
O fluxo de código segue um caminho perigoso da entrada do usuário diretamente para a instanciação do objeto.
- Ingestão: O controlador aceita uma solicitação POST contendo um
transformarmatriz. - Normalização: Os dados são passados para
Craft::$app->getAssetTransforms()->normalizeTransform(). - Execução (The Sink): O método acaba chamando
Craft::createObject($config).
No Yii2, createObject é um poderoso wrapper. Se o $config contém uma matriz classe o Yii2 tentará instanciar essa classe específica, preenchendo suas propriedades públicas com as chaves restantes do array.
PHP
`// Fluxo de vulnerabilidade simplificado public function actionGenerateTransform() { $transformId = Craft::$app->getRequest()->getBodyParam('transformId'); // O invasor controla toda a matriz de configuração $transformConfig = Craft::$app->getRequest()->getBodyParam('transform');
// FATAL FLAW: Nenhuma validação de lista branca no parâmetro 'class'
$object = Craft::createObject($transformConfig);
return $object->transform();
}`
Essa é a definição de Deserialização insegura (CWE-502), mesmo que ele use a configuração JSON/Array em vez da configuração nativa unserialize(). O resultado é idêntico: o invasor dita o fluxo de controle.

A cadeia de exploração: Criando o gadget
Os programadores de scripts falharão nesse CVE porque simplesmente apontar uma carga útil para o endpoint retorna um 400 Solicitação incorreta. A exploração bem-sucedida requer uma compreensão diferenciada do estado do aplicativo.
Fase 1: Reconhecimento contextual (a identificação do ativo)
O actionGenerateTransform tem uma dependência difícil: ela requer um assetId (um número inteiro que representa uma imagem carregada no CMS).
Se o assetId não existe, o código lança uma exceção antes de ele atinge os vulneráveis createObject ligar.
- A armadilha: Os scanners tradicionais (Nessus, Nuclei) disparam cargas úteis às cegas. Eles usam IDs aleatórias ou não usam IDs. Eles recebem erros e marcam o alvo como "Seguro".
- O Bypass: Um invasor (ou agente) sofisticado extrai o código-fonte HTML público, procurando padrões típicos de ativos do Craft (por exemplo,
/assets/images/1042/logo.png). O número inteiro1042é a chave para desbloquear o caminho de execução.
Fase 2: A cadeia de gadgets
Depois que o portão é desbloqueado com um Asset ID válido, o invasor deve fornecer o payload. Como podemos instanciar qualquer precisamos de um "Gadget" - uma classe que aciona atividades maliciosas durante seu ciclo de vida (geralmente __construir, __destruirou inicial).
No contexto do CVE-2025-32432, os pesquisadores identificaram cadeias usando \\Quebra-cabeçaHttp\\\Client (se instalado) ou classes de cache nativas do Yii2.
Um vetor comum envolve a utilização do yii\\rbac\\PhpManager ou abusar do Ver para incluir arquivos locais. No entanto, o método mais direto de RCE envolve o uso do Craft\\Config combinado com invólucros de protocolo PHP.
A estrutura da carga útil da exploração:
JSON
{"assetId": "1042", "transform": { "class": "craft\\\\base\\\\ImageTransform", "width": "100", "height": "100", "format": "php", "quality": { "class": "yii\\\\rest\\\\IndexAction", "checkAccess": "system", "id": "whoami" } } }
Observação: a cadeia real de gadgets pode variar dependendo das dependências específicas do Composer instaladas no servidor, o que exige o ajuste dinâmico da carga útil.

A falha das ferramentas de segurança estática
Essa vulnerabilidade expõe as limitações da geração atual de ferramentas de segurança.
- Apatridia: Os scanners tradicionais são stateless. Eles não "lembram" que encontraram um Asset ID na página inicial e "decidem" usá-lo em uma solicitação POST 10 minutos depois.
- Cegueira de contexto: Eles não podem inferir a lógica comercial. Eles veem uma ID de imagem como apenas um número, não como uma chave de pré-requisito para uma cadeia de exploração.
É para esse ponto que o setor está se voltando Segurança Agêntica.
Raciocínio automatizado: A Abordagem Penligente
Quando analisamos o CVE-2025-32432 em Penligentedescobrimos que o fuzzing padrão tinha uma taxa de sucesso de 0%. Para validar essa vulnerabilidade de forma confiável, tivemos que implantar um agente de IA capaz de raciocinar em várias etapas.
O Penligente O fluxo de trabalho para esse CVE demonstra a diferença entre "varredura" e "teste de penetração":
- Impressão digital: O Agente identifica o
X-Powered-By: Craft CMScabeçalho. - Análise semântica: Em vez de fazer fuzzing, o agente analisa o DOM da página de destino. Ele identifica
<img src="...">e faz a correspondência regex da estrutura de URL para extrair possíveis IDs de ativos. - Teste de hipóteses: O Agente tenta uma solicitação de transformação benigna com a ID extraída. Se ele receber uma
200 OKou umExceção lógica(em vez de um404), ele confirma que o ID é válido. - Mutação de carga útil: O agente constrói a carga útil JSON. Se o servidor estiver executando uma versão mais recente do PHP que pretere determinados wrappers, o Agent modificará a cadeia de gadgets em tempo real para tentar injeções de objetos alternativos.
Essa capacidade de lógica de cadeiaencontrar uma chave na etapa A e usá-la na etapa B - é o que separa os hackers humanos (e agênticos) dos scripts automatizados.
Remediação e defesa
Se você estiver defendendo uma instalação do Craft CMS, é necessário agir imediatamente.
1. Patching
O fornecedor liberou uma validação rigorosa nas seguintes versões. Verifique se você está executando:
- Craft CMS 3.x -> 3.9.15+
- Craft CMS 4.x -> 4.14.15+
- Craft CMS 5.x -> 5.6.17+
2. Configuração do WAF
Se a aplicação de patches não for viável imediatamente (devido ao congelamento do código legado), você deverá bloquear o vetor de ataque específico no nível do WAF.
Exemplo de regra ModSecurity:
Apache
SecRule REQUEST_URI "@contains /actions/assets/generate-transform" \\ "id:100001,phase:2,t:none,t:lowercase,deny,status:403,msg:'Block Craft CMS RCE CVE-2025-32432', \\ chain" SecRule ARGS_POST:transform "@rx class"
Essa regra bloqueia qualquer solicitação para o ponto de extremidade de transformação que tente definir um parâmetro "class" no corpo do POST.
Comparação de vulnerabilidade de alto impacto (2024-2025)
Para contextualizar o CVE-2025-32432, é útil compará-lo com outras falhas arquitetônicas recentes nas principais estruturas.
| ID DO CVE | Alvo | Vetor | Complexidade | Por que é importante |
|---|---|---|---|---|
| CVE-2025-32432 | Craft CMS | Injeção de objetos | Médio | Demonstra a falha de contêineres DI não validados. |
| CVE-2024-21626 | runc | Fuga de contêineres | Alta | Falha fundamental no isolamento do tempo de execução do contêiner. |
| CVE-2024-23897 | Jenkins | Leitura arbitrária de arquivos | Baixa | Abuso dos recursos do analisador de CLI (args4j). |
| CVE-2024-3400 | Palo Alto PAN-OS | Injeção de comando | Baixa | RCE não autenticado em dispositivos de segurança de borda. |
Conclusão
CVE-2025-32432 é um lembrete de que, no desenvolvimento moderno da Web, "rico em recursos" geralmente significa "rico em superfície de ataque". A conveniência do createObject proporcionou flexibilidade aos desenvolvedores, mas deu aos atacantes uma arma carregada.
Para o engenheiro de segurança, essa vulnerabilidade ressalta o fim da era da varredura "point-and-shoot". As vulnerabilidades estão se tornando mais lógicas, mais contextuais e mais dependentes do estado. A defesa contra elas requer ferramentas que possam pensar, raciocinar e se adaptar tão rapidamente quanto os atacantes.
Referências e leituras adicionais:

