Cabeçalho penumbroso

Anatomia do CVE-2025-32432: injeção de contêiner do Yii2 no Craft CMS

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.

  1. Ingestão: O controlador aceita uma solicitação POST contendo um transformar matriz.
  2. Normalização: Os dados são passados para Craft::$app->getAssetTransforms()->normalizeTransform().
  3. 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.

Anatomia do CVE-2025-32432: injeção de contêiner do Yii2 no Craft CMS

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 inteiro 1042 é 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.

Armação da injeção de contêineres do Yii2 no Craft CMS

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.

  1. 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.
  2. 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":

  1. Impressão digital: O Agente identifica o X-Powered-By: Craft CMS cabeçalho.
  2. 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.
  3. Teste de hipóteses: O Agente tenta uma solicitação de transformação benigna com a ID extraída. Se ele receber uma 200 OK ou um Exceção lógica (em vez de um 404), ele confirma que o ID é válido.
  4. 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 CVEAlvoVetorComplexidadePor que é importante
CVE-2025-32432Craft CMSInjeção de objetosMédioDemonstra a falha de contêineres DI não validados.
CVE-2024-21626runcFuga de contêineresAltaFalha fundamental no isolamento do tempo de execução do contêiner.
CVE-2024-23897JenkinsLeitura arbitrária de arquivosBaixaAbuso dos recursos do analisador de CLI (args4j).
CVE-2024-3400Palo Alto PAN-OSInjeção de comandoBaixaRCE 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:

Compartilhe a postagem:
Publicações relacionadas
pt_BRPortuguese