NOVO: Relatório de Cibersegurança SANS ICS/OT 2025 já disponível

Obter o relatório
Utilizamos inteligência artificial para as traduções dos sítios e, embora nos esforcemos por garantir a exatidão, estas podem nem sempre ser 100% precisas. Agradecemos a sua compreensão.

CVE-2025-32432: Execução remota de código não autenticado no Craft CMS

por OPSWAT
Partilhar esta publicação
Dois investigadores do Programa de Bolsas de Estudo de Pós-Graduação em Cibersegurança de Infraestruturas OPSWAT sobre um fundo azul

Em abril de 2025, a Orange Cyberdefense descobriu uma vulnerabilidade crítica no Craft CMS durante uma investigação de incidente, agora rastreada como CVE-2025-32432. A falha permite a execução remota de código (RCE) não autenticada com a pontuação máxima de gravidade CVSS v3.1 de 10,0 (crítica) do NVD (National Vulnerability Database).

Como parte do Programa de Bolsas de Estudo em Segurança Cibernética para InfraestruturasOPSWAT , os nossos bolsistas realizaram um estudo abrangente sobre essa vulnerabilidade, incluindo a reprodução da exploração, a validação do seu impacto, a avaliação dos riscos organizacionais e a análise das estratégias de proteção recomendadas.

Este blog oferece uma análise aprofundada e abrangente sobre o CVE-2025-32432, analisando sua causa raiz, fluxo de exploração e implicações mais amplas para a segurança, ao mesmo tempo em que oferece orientações práticas para que as organizações se defendam contra essa ameaça.

CVE-2025-32432 Introdução

A CVE-2025-32432 afeta as versões 3.0.0-RC1 a 3.9.14, 4.0.0-RC1 a 4.14.14 e 5.0.0-RC1 a 5.6.16 do Craft CMS. Classificada como CWE-94: Injeção de código, a falha surge do tratamento inadequado de entradas não confiáveis, permitindo, em última instância, RCE não autenticado.  

Métricas CVSS 3.x para CVE-2025-32432 Vulnerabilidade de execução remota de código no Craft CMS, apresentando pontuações básicas críticas

Craft CMS e a estrutura Yii

O Craft CMS é um sistema de gestão de conteúdos moderno que permite aos programadores e equipas de conteúdos criar websites flexíveis e totalmente personalizados, em vez de dependerem de modelos rígidos e pré-definidos. Com adoção em mais de 46.000 websites em todo o mundo, é amplamente utilizado e um alvo frequente para atacantes que procuram vulnerabilidades de alto impacto.

O Craft CMS é construído com base no Yii Framework, uma estrutura PHP rápida e poderosa criada para o desenvolvimento web moderno. O Yii fornece a estrutura e as ferramentas principais, enquanto o Craft CMS a amplia para oferecer um sistema de gestão de conteúdo flexível.

Logotipos do Craft CMS e do Yii Framework lado a lado, relacionados à vulnerabilidade de execução remota de código CVE-2025-32432

Uma das principais características do framework Yii é o seu contentor de injeção de dependências (DI). A injeção de dependências é um padrão de design que fornece aos componentes os recursos de que necessitam, em vez de exigir que eles próprios construam esses recursos. O contentor DI do Yii é altamente flexível, capaz de construir objetos complexos a partir de regras de configuração relativamente simples.

No entanto, essa flexibilidade acarreta riscos. No caso do CVE-2025-32432, o contentor DI foi utilizado indevidamente em combinação com entradas de utilizadores não confiáveis, criando um caminho para a execução remota de código. Este caso demonstra que mesmo funcionalidades seguras e poderosas de uma estrutura podem tornar-se perigosas se forem integradas sem uma compreensão completa das suas implicações de segurança.

Análise aprofundada do CVE-2025-32432

O Craft CMS inclui um recurso chamado Image Transforms, que foi projetado para otimizar o desempenho, gerando imagens redimensionadas diretamente no servidor. Em vez de entregar uma imagem grande de 4,5 MB para exibir como uma miniatura de 300×300, o Craft CMS cria e serve automaticamente uma versão menor e otimizada. Essa abordagem reduz o uso de largura de banda e melhora significativamente a velocidade de carregamento da página.

Para tornar essa funcionalidade amplamente disponível, o Craft CMS expõe o endpoint actions/assets/generate-transform sem exigir autenticação. Embora isso garanta que usuários autenticados e anónimos possam se beneficiar de imagens otimizadas, também introduz uma superfície de ataque acessível ao público, onde qualquer pessoa pode fornecer entradas criadas para o aplicativo.

Trecho de código do Craft CMS AssetsController mostrando a lógica allowAnonymous relevante para a vulnerabilidade CVE-2025-32432

Através de uma análise detalhada deste fluxo de trabalho, os nossos colegas identificaram que o método AssetsController::actionGenerateTransform é invocado sempre que uma solicitação POST é enviada para o ponto final exposto. Esta função recupera o parâmetro handle diretamente do corpo da solicitação e o encaminha para processamento posterior na próxima etapa.

Captura de ecrã do código PHP do Craft CMS relacionado com a análise da vulnerabilidade de execução remota de código CVE-2025-32432

Na etapa seguinte, o método ImageTransforms::normalizeTransform() é chamado. Esse método recebe o parâmetro handle fornecido pelo utilizador e o converte em um objeto ImageTransform. Como o objeto é criado diretamente a partir de uma entrada não confiável, isso representa um ponto crítico de risco no fluxo de execução.

Trecho de código PHP do Craft CMS relacionado à análise da vulnerabilidade de execução remota de código CVE-2025-32432

Durante este processo, todos os pares chave-valor da matriz $transform controlada pelo utilizador (originária do parâmetro handle) são mesclados numa matriz de configuração. O método normalizeTransform então passa esta matriz para Craft::createObject(), que é responsável por instanciar um novo objeto ImageTransform.

Trecho de código mostrando a lógica do Craft CMS relevante para a vulnerabilidade de execução remota de código CVE-2025-32432

A vulnerabilidade decorre da forma como Craft::createObject() (envolvendo Yii::createObject() do Yii) processa matrizes de configuração. Como esse mecanismo usa o contentor DI para instanciar e configurar objetos diretamente da matriz não validada, os atacantes podem obter controlo sobre o processo de construção do objeto.

Código PHP destacado mostrando a função createObject relevante para a vulnerabilidade de execução remota de código CVE-2025-32432 do Craft CMS

Quando uma carga maliciosa é passada, o construtor do objeto (herdado da classe Model ) invoca o método App::configure().

Código PHP destacado mostrando a lógica do construtor Craft CMS relacionada à vulnerabilidade de execução remota de código CVE-2025-32432

Este método itera sobre cada propriedade na matriz controlada pelo invasor e atribui-as ao novo objeto.

Trecho de código PHP mostrando uma função de configuração, relevante para a vulnerabilidade de execução remota de código CVE-2025-32432 do Craft CMS.

When App::configure() assigns properties from the attacker-controlled configuration array, most keys are mapped directly onto the object. However, if a key begins with the prefix as, the assignment is routed through Component::__set, Yii’s magic setter. This method interprets as <name> as an instruction to attach a behavior (mixin) to the object.

Uma carga maliciosa desse tipo pode ser criada para explorar a forma como Component::__set processa propriedades com o prefixo as, como por exemplo:

Captura de ecrã do código mostrando a carga útil da exploração para a vulnerabilidade de execução remota de código CVE-2025-32432 do Craft CMS

De acordo com a nossa análise, a implementação do Component::__set inclui uma salvaguarda: quando um comportamento é anexado por meio dessa propriedade, a estrutura verifica se a classe especificada na matriz de configuração é uma subclasse válida do yii\base\Behavior. Essa verificação tem como objetivo impedir que classes arbitrárias sejam anexadas diretamente aos componentes.

Código PHP destacado do Craft CMS mostrando a lógica ligada à vulnerabilidade de execução remota de código CVE-2025-32432

No entanto, essa proteção não é tão eficaz quanto parece. A fraqueza vem da forma como o Yii::createObject lida com matrizes de configuração.

Ao instanciar um objeto, Yii::createObject dá prioridade ao parâmetro especial __class. Se essa chave estiver presente, o seu valor é usado como a classe de destino para a instanciação, e a chave de classe padrão na matriz de configuração é ignorada.

Trecho de código PHP mostrando a lógica de criação de objetos relacionada à vulnerabilidade de execução remota de código CVE-2025-32432 do Craft CMS

O invasor pode criar uma carga útil para o comportamento de exploração que inclui duas chaves:

  1. 'class' => '\craft\behaviors\FieldLayoutBehavior' - Uma classe legítima que estende yii\base\Behavior. Este valor existe apenas para satisfazer a verificação is_subclass_of em Component::__set, permitindo que a execução continue sem gerar um erro.
  2. '__class' => '\yii\rbac\PhpManager' - O alvo real do invasor. Esta é a classe "gadget" que eles querem instanciar.

Quando o código é executado, Component::__set passa na verificação de segurança porque apenas inspeciona a chave da classe. No entanto, quando a estrutura chama posteriormente Yii::createObject para anexar o comportamento, dá precedência a __class, resultando na instanciação do objeto \yii\rbac\PhpManager escolhido pelo invasor.

O uso de \yii\rbac\PhpManager é intencional. Simplesmente criar um objeto não é suficiente para a exploração; para conseguir RCE, é necessária uma classe gadget com efeitos colaterais que possam ser transformados em armas. O PhpManager é um alvo comum em ataques POI (PHP Object Injection) devido ao seu fluxo de inicialização. Após a instanciação, o seu método init() chama load(), que então invoca loadFromFile($this->itemFile). Com o controlo sobre $this->itemFile, um invasor pode forçar a aplicação a carregar um ficheiro malicioso, transformando a criação de objetos em execução de código.

Fluxo de código PHP destacado mostrando a vulnerabilidade CVE-2025-32432 do Craft CMS para execução remota de código com inclusão de ficheiros

O perigo reside no método loadFromFile. Em PHP, um require executa o ficheiro de destino como código, portanto, se um invasor controlar o caminho do ficheiro, poderá acionar a execução de código arbitrário.

Para colocar código malicioso no servidor, o invasor explora os ficheiros de sessão PHP. Ao injetar PHP num parâmetro de solicitação, o Craft CMS guarda a carga útil num ficheiro de sessão durante o processo de redirecionamento. Posteriormente, quando o PhpManager carrega esse ficheiro, o código do invasor pode ser executado.

Fluxograma mostrando o processo de exploração da vulnerabilidade de execução remota de código CVE-2025-32432 do Craft CMS

A cadeia de ataque completa funciona em três etapas. Primeiro, o invasor planta um PHP malicioso enviando uma URL criada, que o Craft CMS guarda num ficheiro de sessão. Em seguida, eles exploram o bypass __class no endpoint de transformação de imagem para carregar o gadget PhpManager e direcioná-lo para o ficheiro de sessão corrompido. Por fim, quando o PhpManager carrega o ficheiro, a carga útil do invasor é executada, concedendo RCE e controle total do servidor — geralmente por meio de um webshell ou shell reverso.

Fluxograma mostrando a vulnerabilidade CVE-2025-32432 do Craft CMS para execução remota de código com JSON de exploração e etapas do ataque
Saída do terminal mostrando as etapas de exploração para CVE-2025-32432 Vulnerabilidade de execução remota de código do Craft CMS
Terminal mostrando CVE-2025-32432 Exploração de execução remota de código Craft CMS com acesso shell como utilizador www-data

Mitigação e reparação

Para mitigar eficazmente os riscos associados ao CVE-2025-32432, as organizações precisam de visibilidade e controlo sobre os seus componentes de código aberto. Sem um inventário claro dos componentes, a aplicação de patches torna-se uma tarefa aleatória.

OPSWAT , uma tecnologia proprietária daplataforma MetaDefender®, atende a essa necessidade, fornecendo um inventário de todos os componentes de software, bibliotecas, contentores Docker e dependências em uso. Ele permite que as organizações rastreiem, protejam e atualizem seus componentes de forma proativa.

Interface de utilizador da verificação de segurança mostrando o arquivo Craft CMS bloqueado com vulnerabilidades críticas para mitigação CVE-2025-32432
Painel de segurança mostrando a vulnerabilidade de execução remota de código CVE-2025-32432 do Craft CMS e detalhes da correção

No exemplo acima,a tecnologia SBOM do MetaDefender verificou o pacote nginx-ingress-controller que continha a vulnerabilidade CVE-2025-32432. O sistema sinalizou automaticamente o problema como crítico e forneceu orientações sobre as versões corrigidas disponíveis, permitindo que as equipas priorizassem e corrigissem rapidamente a vulnerabilidade antes que ela pudesse ser explorada.

OPSWAT está disponível em MetaDefender Core e MetaDefender Software Chain™,permitindo que as equipas de segurança identifiquem e ajam sobre vulnerabilidades mais rapidamente. Com OPSWAT , as equipas de segurança podem:

  • Localize rapidamente os componentes vulneráveis - Identifique imediatamente os componentes de código aberto afetados por ataques de desserialização. Isso garante uma ação rápida na correção ou substituição das bibliotecas vulneráveis. 
  • Garanta a aplicação proativa de patches e atualizações – Monitore continuamente os componentes de código aberto por meio OPSWAT para se antecipar às vulnerabilidades de deserialização. OPSWAT pode detectar componentes desatualizados ou inseguros, permitindo atualizações oportunas e reduzindo a exposição a ataques. 
  • Manter a conformidade e a comunicação de relatórios – OPSWAT ajuda as organizações a cumprir os requisitos de conformidade, à medida que as estruturas regulatórias exigem cada vez mais transparência nas cadeias de fornecimento de software.

Pronto para fortalecer a sua cadeia de fornecimento de software contra ameaças emergentes?

Etiquetas:

Mantenha-se atualizado com OPSWAT!

Inscreva-se hoje para receber as últimas actualizações da empresa, histórias, informações sobre eventos e muito mais.