Envío de registros, alertas y datos de telemetría a través de un diodo de datos

Descubre cómo
Utilizamos inteligencia artificial para traducir el sitio web y, aunque nos esforzamos por garantizar la precisión, es posible que las traducciones no sean siempre 100 % exactas. Agradecemos tu comprensión.

CVE-2025-32432: Ejecución remota de código sin autenticación en Craft CMS

Por OPSWAT
Comparte esta publicación
Dos investigadores del Programa de Becas de Posgrado en Ciberseguridad de Infraestructuras OPSWAT sobre un fondo azul

En abril de 2025, Orange Cyberdefense descubrió una vulnerabilidad crítica en Craft CMS durante la investigación de un incidente, que ahora se registra con el identificador CVE-2025-32432. La vulnerabilidad permite la ejecución remota de código (RCE) sin autenticación y tiene una puntuación máxima de gravedad de 10,0 (crítica) según el CVSS v3.1 de la NVD (Base de Datos Nacional de Vulnerabilidades).

En el marco del Programa de Becas de Posgrado en Ciberseguridad de InfraestructurasOPSWAT , nuestros becarios llevaron a cabo un estudio exhaustivo de esta vulnerabilidad, que incluyó la reproducción del exploit, la validación de su impacto, la evaluación de los riesgos para la organización y el análisis de las estrategias de protección recomendadas.

Este blog ofrece un análisis exhaustivo y detallado de CVE-2025-32432, en el que se examinan su causa principal, el proceso de explotación y sus implicaciones generales para la seguridad, al tiempo que proporciona recomendaciones prácticas para que las organizaciones puedan defenderse de esta amenaza.

CVE-2025-32432: Introducción

La vulnerabilidad CVE-2025-32432 afecta a las versiones de Craft CMS 3.0.0-RC1 a 3.9.14, 4.0.0-RC1 a 4.14.14 y 5.0.0-RC1 a 5.6.16. Clasificada como CWE-94: Inyección de código, la vulnerabilidad se debe a un manejo inadecuado de entradas no confiables, lo que en última instancia permite la ejecución remota de código (RCE) sin autenticación.  

Métricas CVSS 3.x para la vulnerabilidad de ejecución remota de código CVE-2025-32432 de Craft CMS, que presenta puntuaciones básicas críticas

Craft CMS y el marco Yii

Craft CMS es un moderno sistema de gestión de contenidos que permite a los desarrolladores y a los equipos de contenido crear sitios web flexibles y totalmente personalizados, en lugar de depender de plantillas rígidas y predefinidas. Con más de 46 000 sitios web que lo utilizan en todo el mundo, es una plataforma muy extendida y, al mismo tiempo, un objetivo frecuente para los atacantes que buscan vulnerabilidades de gran impacto.

Craft CMS se basa en el framework Yii, un framework de PHP rápido y potente diseñado para el desarrollo web moderno. Yii proporciona la estructura y las herramientas básicas, mientras que Craft CMS lo amplía para ofrecer un sistema de gestión de contenidos flexible.

Logotipos de Craft CMS y Yii Framework uno al lado del otro, en relación con la vulnerabilidad de ejecución remota de código CVE-2025-32432

Una de las características principales del marco Yii es su contenedor de inyección de dependencias (DI). La inyección de dependencias es un patrón de diseño que proporciona a los componentes los recursos que necesitan, en lugar de obligarlos a crearlos por sí mismos. El contenedor DI de Yii es muy flexible y capaz de crear objetos complejos a partir de reglas de configuración relativamente sencillas.

Sin embargo, esta flexibilidad conlleva riesgos. En el caso de CVE-2025-32432, el contenedor DI se utilizó de forma indebida junto con entradas de usuario no fiables, lo que abrió una vía para la ejecución remota de código. Este caso demuestra que incluso las funciones de un marco de trabajo que son seguras y potentes pueden resultar peligrosas si se integran sin comprender plenamente sus implicaciones de seguridad.

Análisis en profundidad de CVE-2025-32432

Craft CMS incluye una función denominada «Image Transforms», diseñada para optimizar el rendimiento mediante la generación de imágenes redimensionadas directamente en el servidor. En lugar de enviar una imagen grande de 4,5 MB para mostrarla como una miniatura de 300 × 300, Craft CMS crea y sirve automáticamente una versión más pequeña y optimizada. Este enfoque reduce el consumo de ancho de banda y mejora considerablemente la velocidad de carga de la página.

Para que esta funcionalidad esté ampliamente disponible, Craft CMS expone el punto final «actions/assets/generate-transform» sin requerir autenticación. Si bien esto garantiza que tanto los usuarios autenticados como los anónimos puedan beneficiarse de imágenes optimizadas, también crea una superficie de ataque accesible al público en la que cualquiera puede introducir datos manipulados en la aplicación.

Fragmento de código del AssetsController de Craft CMS que muestra la lógica de «allowAnonymous» relacionada con la vulnerabilidad CVE-2025-32432

Tras un análisis detallado de este flujo de trabajo, nuestros becarios determinaron que el método `AssetsController::actionGenerateTransform ` se invoca cada vez que se envía una solicitud POST al punto final expuesto. Esta función recupera el parámetro «handle» directamente del cuerpo de la solicitud y lo reenvía a la siguiente etapa para su posterior procesamiento.

Captura de pantalla del código PHP de Craft CMS relacionada con el análisis de la vulnerabilidad de ejecución remota de código CVE-2025-32432

En el siguiente paso, se invoca el método ImageTransforms::normalizeTransform(). Este método toma el parámetro «handle» proporcionado por el usuario y lo convierte en un objeto ImageTransform. Dado que el objeto se crea directamente a partir de datos de entrada no fiables, esto supone un punto crítico de riesgo en el flujo de ejecución.

Fragmento de código PHP de Craft CMS relacionado con el análisis de la vulnerabilidad de ejecución remota de código CVE-2025-32432

Durante este proceso, todos los pares clave-valor del array $transform controlado por el usuario (procedente del parámetro handle) se fusionan en un array de configuración. A continuación, el método normalizeTransform pasa este array a Craft::createObject(), que se encarga de instanciar un nuevo objeto ImageTransform.

Fragmento de código que muestra la lógica de Craft CMS relacionada con la vulnerabilidad de ejecución remota de código CVE-2025-32432

La vulnerabilidad se debe a la forma en que Craft::createObject() (que envuelve el método Yii::createObject() de Yii) procesa las matrices de configuración. Dado que este mecanismo utiliza el contenedor de inyección de dependencias para instanciar y configurar objetos directamente a partir de la matriz no validada, los atacantes podrían hacerse con el control del proceso de creación de objetos.

Código PHP resaltado que muestra la función `createObject`, relacionada con la vulnerabilidad de ejecución remota de código CVE-2025-32432 de Craft CMS

Cuando se pasa una carga maliciosa, el constructor del objeto (heredado de la clase Model ) invoca el método App::configure().

Código PHP resaltado que muestra la lógica del constructor de Craft CMS relacionada con la vulnerabilidad de ejecución remota de código CVE-2025-32432

Este método recorre cada propiedad de la matriz controlada por el atacante y las asigna al nuevo objeto.

Fragmento de código PHP que muestra una función de configuración, relacionada con la vulnerabilidad CVE-2025-32432 de Craft CMS que permite la ejecución remota de código

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.

Una de estas cargas maliciosas puede diseñarse para aprovechar la forma en que Component::__set procesa las propiedades que comienzan por «as», como, por ejemplo, este exploit:

Captura de pantalla del código que muestra la carga útil del exploit para la vulnerabilidad CVE-2025-32432 de Craft CMS, que permite la ejecución remota de código

Según nuestro análisis, la implementación de Component::__set incluye una medida de seguridad: cuando se adjunta un comportamiento a través de dicha propiedad, el marco comprueba que la clase especificada en la matriz de configuración sea una subclase válida de yii\base\Behavior. Esta comprobación tiene por objeto evitar que se adjunten clases arbitrarias directamente a los componentes.

Código PHP resaltado de Craft CMS que muestra la lógica relacionada con la vulnerabilidad de ejecución remota de código CVE-2025-32432

Sin embargo, esta medida de seguridad no es tan eficaz como parece. La debilidad radica en la forma en que Yii::createObject gestiona las matrices de configuración.

Al instanciar un objeto, Yii::createObject da prioridad al parámetro especial __class. Si esta clave está presente, su valor se utiliza como clase de destino para la instanciación, y se ignora la clave «class» estándar del array de configuración.

Fragmento de código PHP que muestra la lógica de creación de objetos relacionada con la vulnerabilidad CVE-2025-32432 de Craft CMS, que permite la ejecución remota de código

El atacante puede crear una carga útil para el comportamiento del exploit que incluya dos claves:

  1. 'class' => '\craft\behaviors\FieldLayoutBehavior' - Una clase válida que hereda de yii\base\Behavior. Este valor existe únicamente para satisfacer la comprobación is_subclass_of en Component::__set, lo que permite que la ejecución continúe sin generar un error.
  2. '__class' => '\yii\rbac\PhpManager' - El objetivo real del atacante. Se trata de la clase «gadget» que quiere instanciar.

Cuando se ejecuta el código, Component::__set supera la comprobación de seguridad, ya que solo inspecciona la clave de clase. Sin embargo, cuando el marco llama posteriormente a Yii::createObject para asociar el comportamiento, da prioridad a __class, lo que provoca que se instancie en su lugar el objeto \yii\rbac\PhpManager elegido por el atacante.

El uso de \yii\rbac\PhpManager es intencionado. La mera creación de un objeto no basta para aprovechar la vulnerabilidad; para lograr la ejecución de código remoto (RCE) se requiere una clase de gadget con efectos secundarios que puedan utilizarse como arma. PhpManager es un objetivo habitual en los ataques POI (inyección de objetos PHP) debido a su flujo de inicialización. Al instanciarse, su método init() llama a load(), que a su vez invoca a loadFromFile($this->itemFile). Al controlar $this->itemFile, un atacante puede obligar a la aplicación a cargar un archivo malicioso, transformando la creación de objetos en ejecución de código.

Flujo de código PHP resaltado que muestra la vulnerabilidad CVE-2025-32432 de Craft CMS, que permite la ejecución remota de código mediante la inclusión de archivos

El peligro reside en el método `loadFromFile`. En PHP, la instrucción `require` ejecuta el archivo de destino como código, por lo que, si un atacante controla la ruta del archivo, puede provocar la ejecución de código arbitrario.

Para introducir código malicioso en el servidor, el atacante aprovecha los archivos de sesión de PHP. Al inyectar código PHP en un parámetro de solicitud, Craft CMS guarda la carga útil en un archivo de sesión durante el proceso de redireccionamiento. Posteriormente, cuando PhpManager carga este archivo, el código del atacante podría ejecutarse.

Diagrama de flujo que muestra el proceso de explotación de la vulnerabilidad de ejecución remota de código CVE-2025-32432 en Craft CMS

La cadena de ataque completa se desarrolla en tres fases. En primer lugar, el atacante introduce código PHP malicioso enviando una URL manipulada, que Craft CMS guarda en un archivo de sesión. A continuación, aprovecha la vulnerabilidad de elusión de __class en el punto final de transformación de imágenes para cargar el gadget PhpManager y dirigirlo hacia el archivo de sesión malicioso. Por último, cuando PhpManager carga el archivo, se ejecuta la carga útil del atacante, lo que le otorga ejecución remota de código (RCE) y control total del servidor, a menudo a través de un webshell o un shell inverso.

Diagrama de flujo que muestra la vulnerabilidad CVE-2025-32432 de Craft CMS que permite la ejecución remota de código, con el código JSON del exploit y los pasos del ataque
Salida de la terminal que muestra los pasos para explotar la vulnerabilidad CVE-2025-32432 de Craft CMS que permite la ejecución remota de código
Terminal que muestra el exploit CVE-2025-32432 de Craft CMS para la ejecución remota de código con acceso a la línea de comandos como usuario «www-data»

Mitigación y remediación

Para mitigar de forma eficaz los riesgos asociados al CVE-2025-32432, las organizaciones necesitan visibilidad y control sobre sus componentes de código abierto. Sin un inventario claro de los componentes, la aplicación de parches se convierte en una cuestión de conjeturas.

OPSWAT , una tecnología propia dela plataforma MetaDefender®, responde a esta necesidad al ofrecer un inventario de todos los componentes de software, bibliotecas, contenedores Docker y dependencias que se utilizan. Permite a las organizaciones realizar un seguimiento, proteger y actualizar sus componentes de forma proactiva.

Interfaz de usuario del análisis de seguridad que muestra un archivo de Craft CMS bloqueado debido a vulnerabilidades críticas, como medida de mitigación para CVE-2025-32432
Panel de control de seguridad que muestra la vulnerabilidad CVE-2025-32432 de Craft CMS, que permite la ejecución remota de código, y los detalles de su corrección

En el ejemplo anterior,la tecnología SBOM de MetaDefender analizó el paquete nginx-ingress-controller, que contenía la vulnerabilidad CVE-2025-32432. El sistema clasificó automáticamente el problema como «crítico» y proporcionó información sobre las versiones corregidas disponibles, lo que permitió a los equipos priorizar y corregir rápidamente la vulnerabilidad antes de que pudiera ser explotada.

OPSWAT está disponible en MetaDefender Core y MetaDefender Software Chain™,lo que permite a los equipos de seguridad identificar las vulnerabilidades y actuar ante ellas con mayor rapidez. Con OPSWAT , los equipos de seguridad pueden:

  • Localice rápidamente los componentes vulnerables: identifique de inmediato los componentes de código abierto afectados por ataques de deserialización. Esto garantiza una actuación rápida, ya sea mediante la aplicación de parches o la sustitución de las bibliotecas vulnerables. 
  • Garantice la aplicación proactiva de parches y actualizaciones: supervise continuamente los componentes de código abierto mediante OPSWAT para adelantarse a las vulnerabilidades de deserialización. OPSWAT puede detectar componentes obsoletos o inseguros, lo que permite realizar actualizaciones oportunas y reducir la exposición a los ataques. 
  • Cumplimiento normativo y presentación de informes: OPSWAT ayuda a las organizaciones a cumplir los requisitos normativos, en un contexto en el que los marcos reguladores exigen cada vez más transparencia en las cadenas de suministro de software.

¿Estás listo para reforzar tu cadena de suministro de software frente a las amenazas emergentes?

Etiquetas:

¡Mantente al día con OPSWAT!

Regístrate hoy mismo para recibir las últimas novedades de la empresa, historias, información sobre eventos y mucho más.