Cabeçalho penumbroso

A classe Phantom: Armação da injeção de contêiner CVE-2025-32432 Yii2 no Craft CMS

Na hierarquia das vulnerabilidades do PHP, Injeção de dependência (DI) Injeção de contêiner está no topo - complexo para detectar, elegante para explorar e devastador em termos de impacto.

A divulgação de CVE-2025-32432 direcionamento Craft CMS (e, por extensão, o Estrutura do Yii2) serve como um lembrete brutal: quando a entrada do usuário controla a instanciação da classe, o aplicativo pertence ao invasor.

Embora muitos scanners de segurança tenham sinalizado esse problema como um "problema de configuração", os engenheiros de segurança de elite o reconhecem pelo que realmente é: Execução remota de código (RCE) por meio da desserialização insegura de objetos. Este artigo realiza uma autópsia técnica da vulnerabilidade, reconstruindo a cadeia de gadgets e demonstrando como a análise orientada por IA é a única maneira de detectar essas falhas lógicas em escala.

A arquitetura do fracasso: Por dentro do contêiner do Yii2

Para entender o CVE-2025-32432, você deve entender o coração do Yii2: o yii\\di\\Container.

O Craft CMS conta com o contêiner DI do Yii2 para gerenciar as dependências de classe. O contêiner permite que os desenvolvedores configurem objetos usando arrays. Por exemplo:

PHP

// Uso legítimo $object = Yii::createObject([ 'class' => 'app\\models\\\User', 'name' => 'Admin', ]);

A vulnerabilidade surge quando um invasor pode influenciar essa matriz de configuração. Se uma ação do controlador receber uma entrada JSON bruta e passá-la cegamente para Yii::createObject() ou Yii::$container->set()o invasor pode forçar o aplicativo a instanciar qualquer classe disponíveis no caminho de carregamento automático, com qualquer propriedade valores.

A superfície de ataque

A falha normalmente reside nos controladores do CMS Craft que lidam com solicitações de API ou configurações de plug-in em que a sanitização de entrada se concentra em XSS (tags HTML) em vez de lógica (definições de classe).

  • Fonte: JSON fornecido pelo usuário (por exemplo, POST /actions/vulnerable-plugin/save-config).
  • Pia: Yii::createObject($userInput).
A classe Phantom: Armação da injeção de contêiner CVE-2025-32432 Yii2 no Craft CMS

Construindo a cadeia de destruição: O PoC

A exploração requer encontrar um Gadget-uma classe que realiza operações perigosas (como gravação de arquivos ou execução de comandos) em seus métodos de ciclo de vida (__construir, inicial, __destruirou Acordar).

No contexto do CVE-2025-32432, aproveitamos uma cadeia de gadgets comum encontrada no ecossistema Yii2 envolvendo yii\\rest\\IndexAction ou classes similares com muitas chamadas.

O conceito

Queremos instanciar uma classe que nos permita executar uma função de retorno de chamada do PHP (como sistema ou executar) em um argumento fornecido.

Carga útil JSON armada

Abaixo está uma prova de conceito (PoC) conceitual que demonstra como acionar o RCE injetando uma definição de classe maliciosa.

JSON

{ "rce_trigger": { "class": "yii\\\\rest\\\\IndexAction", "checkAccess": "system", "id": "rce", "controller": { "class": "yii\\\\web\\\\Controller", "id": "dummy" }, "modelClass": "yii\\\\base\\\\Model", "run": "id; uname -a" } }

Detalhamento da carga útil:

  1. classe: Instruímos o contêiner DI a instanciar yii\\rest\\IndexAction.
  2. checkAccess: Essa é a nossa propriedade perigosa. Nesse gadget específico, o checkAccess foi projetada para manter um callable. Nós a definimos como sistema.
  3. Acionamento da execução: Quando o aplicativo processa esse objeto (geralmente durante a executar() execução de método ou validação de propriedade), ele invoca o retorno de chamada armazenado em checkAccess com argumentos fornecidos pelo contexto (ou atacante).
  4. Resultado: O servidor executa sistema('id; uname -a').

Observação: Em um ambiente protegido, os invasores podem encadear isso com yii\\caching\\FileCache para escrever um shell da Web PHP para o web/ diretório.

Por que os scanners tradicionais perdem isso

A detecção do CVE-2025-32432 é notoriamente difícil para as ferramentas DAST herdadas.

  • Sem assinatura: A carga útil é um JSON válido. Ele não contém a sintaxe de injeção de SQL (' OU 1=1) ou tags XSS ().
  • Depende do contexto: A vulnerabilidade não está na entrada em si, mas em como A estrutura interpreta o classe chave. Um scanner padrão não entende isso classe mapas para Yii::createObject.

Detecção orientada por IA: A vantagem da penalidade

É aqui que Penligent.ai muda o paradigma. A Penligent utiliza Agentes de IA com reconhecimento de contexto que entendem a lógica específica da estrutura.

  1. Reconhecimento de estrutura: Os agentes da Penligent identificam que o alvo está executando o Craft CMS / Yii2. Ele conhece os "Dangerous Sinks" específicos dessa estrutura (por exemplo, Yii::createObject).
  2. Inferência lógica: Em vez de fazer fuzzing cego, a IA analisa o esquema da API. Se vir um objeto JSON aceitando parâmetros semelhantes aos de configuração, ela injeta de forma inteligente "Probing Payloads", como a tentativa de instanciar uma classe benigna como yii\\helpers\\VarDumper-para testar se o contêiner pode ser acessado.
  3. Verificação automatizada: Se a sondagem for bem-sucedida (por exemplo, o aplicativo se comporta de forma diferente ou retorna um erro específico indicando a instanciação da classe), a Penligent sinaliza o ponto de extremidade como vulnerável a Injeção de contêineres e gera a carga útil específica do RCE para validação da correção.

Remediação e defesa

Para proteger o Craft CMS contra o CVE-2025-32432 e ataques DI semelhantes:

  1. Verificação rigorosa de tipo: Nunca passe matrizes de entrada de usuário brutas para Yii::createObject. Sempre valide se o classe está ausente (codificada no backend) ou está estritamente na lista de permissões.
  2. Atualizar o Craft CMS: Aplique os patches mais recentes imediatamente. É provável que o fornecedor tenha reforçado as ação lógica de processamento para rejeitar definições de classe arbitrárias.
  3. Desativar funções perigosas: Em seu php.ini, use disable_functions para bloquear sistema, executar, passthrue proc_open para mitigar o impacto da RCE.

Conclusão

CVE-2025-32432 é um lembrete claro de que as estruturas PHP modernas, embora poderosas, introduzem superfícies de ataque complexas. A injeção de contêiner é a "injeção de SQL da década de 2020", uma falha lógica que concede controle total.

Para os engenheiros de segurança, a lição é clara: se você permitir que os usuários definam os objetos, eles definirão a sua destruição. Validar a "forma" dos dados não é mais suficiente; você deve validar o "tipo".

Referências confiáveis

Compartilhe a postagem:
Publicações relacionadas
pt_BRPortuguese