NOUVEAU : le rapport 2025 SANS ICS/OT sur la cybersécurité est désormais disponible

Obtenir le rapport
Nous utilisons l'intelligence artificielle pour les traductions de sites et, bien que nous nous efforcions d'être précis, il se peut que les traductions ne soient pas toujours exactes à 100 %. Nous vous remercions de votre compréhension.

CVE-2025-32432 : Exécution de code à distance non authentifiée dans Craft CMS

par OPSWAT
Partager cet article
Deux chercheurs du programme de bourses d'études supérieures en cybersécurité des infrastructures OPSWAT sur fond bleu

En avril 2025, Orange Cyberdefense a découvert une vulnérabilité critique dans Craft CMS lors d'une enquête sur un incident, désormais référencée sous le numéro CVE-2025-32432. Cette faille permet l'exécution de code à distance (RCE) sans authentification et a reçu la note maximale de 10,0 (critique) selon le score CVSS v3.1 de la NVD (National Vulnerability Database).

Dans le cadre du programme de bourses d'études supérieures en cybersécurité des infrastructuresOPSWAT , nos boursiers ont mené une étude approfondie de cette vulnérabilité, notamment en reproduisant l'exploit, en validant son impact, en évaluant les risques organisationnels et en analysant les stratégies de protection recommandées.

Ce blog propose une analyse approfondie et complète de la vulnérabilité CVE-2025-32432, en examinant sa cause première, son mode d'exploitation et ses implications plus larges en matière de sécurité, tout en offrant des conseils pratiques aux entreprises pour se défendre contre cette menace.

CVE-2025-32432 Introduction

CVE-2025-32432 affecte les versions 3.0.0-RC1 à 3.9.14, 4.0.0-RC1 à 4.14.14 et 5.0.0-RC1 à 5.6.16 de Craft CMS. Classée CWE-94 : injection de code, cette faille résulte d'une mauvaise gestion des entrées non fiables, permettant finalement une exécution de code à distance non authentifiée.  

Mesures CVSS 3.x pour CVE-2025-32432 Vulnérabilité d'exécution de code à distance Craft CMS affichant des scores de base critiques

Craft CMS et le framework Yii

Craft CMS est un système de gestion de contenu moderne qui permet aux développeurs et aux équipes de contenu de créer des sites Web flexibles et entièrement personnalisés plutôt que de s'appuyer sur des modèles rigides et prédéfinis. Adopté par plus de 46 000 sites Web à travers le monde, il est à la fois largement utilisé et fréquemment ciblé par les pirates à la recherche de vulnérabilités à fort impact.

Craft CMS est basé sur le framework Yii, un framework PHP rapide et puissant conçu pour le développement web moderne. Yii fournit la structure et les outils de base, tandis que Craft CMS les complète pour offrir un système de gestion de contenu flexible.

Logos Craft CMS et Yii Framework côte à côte, liés à la vulnérabilité d'exécution de code à distance CVE-2025-32432

L'une des principales fonctionnalités du framework Yii est son conteneur d'injection de dépendances (DI). L'injection de dépendances est un modèle de conception qui fournit aux composants les ressources dont ils ont besoin, au lieu de leur demander de construire eux-mêmes ces ressources. Le conteneur DI de Yii est très flexible et capable de construire des objets complexes à partir de règles de configuration relativement simples.

Cependant, cette flexibilité comporte des risques. Dans le cas de CVE-2025-32432, le conteneur DI a été utilisé de manière abusive en combinaison avec des entrées utilisateur non fiables, créant ainsi une voie d'accès à l'exécution de code à distance. Ce cas démontre que même les fonctionnalités sûres et puissantes d'un framework peuvent devenir dangereuses si elles sont intégrées sans une compréhension complète de leurs implications en matière de sécurité.

Analyse approfondie de CVE-2025-32432

Craft CMS comprend une fonctionnalité appelée Image Transforms, conçue pour optimiser les performances en générant des images redimensionnées directement sur le serveur. Au lieu de fournir une image volumineuse de 4,5 Mo à afficher sous forme de vignette 300×300, Craft CMS crée et fournit automatiquement une version optimisée plus petite. Cette approche réduit l'utilisation de la bande passante et améliore considérablement la vitesse de chargement des pages.

Pour rendre cette fonctionnalité largement accessible, Craft CMS expose le point de terminaison actions/assets/generate-transform sans exiger d'authentification. Si cela permet aux utilisateurs authentifiés et anonymes de bénéficier d'images optimisées, cela introduit également une surface d'attaque accessible au public, où n'importe qui peut fournir des données spécialement conçues à l'application.

Extrait de code provenant de Craft CMS AssetsController montrant la logique allowAnonymous pertinente pour la vulnérabilité CVE-2025-32432.

Grâce à une analyse détaillée de ce flux de travail, nos collègues ont identifié que la méthode AssetsController::actionGenerateTransform est invoquée chaque fois qu'une requête POST est envoyée au point de terminaison exposé. Cette fonction récupère le paramètre handle directement dans le corps de la requête et le transmet en aval pour un traitement ultérieur à l'étape suivante.

Capture d'écran du code PHP Craft CMS lié à l'analyse de la vulnérabilité d'exécution de code à distance CVE-2025-32432

À l'étape suivante, la méthode ImageTransforms::normalizeTransform() est appelée. Cette méthode prend le paramètre handle fourni par l'utilisateur et le convertit en un objet ImageTransform. Étant donné que l'objet est créé directement à partir d'une entrée non fiable, cela représente un point critique de risque dans le flux d'exécution.

Extrait de code PHP provenant de Craft CMS lié à l'analyse de la vulnérabilité d'exécution de code à distance CVE-2025-32432

Au cours de ce processus, toutes les paires clé-valeur du tableau $transform contrôlé par l'utilisateur (provenant du paramètre handle) sont fusionnées dans un tableau de configuration. La méthode normalizeTransform transmet ensuite ce tableau à Craft::createObject(), qui est chargé d'instancier un nouvel objet ImageTransform.

Extrait de code illustrant la logique Craft CMS pertinente pour la vulnérabilité d'exécution de code à distance CVE-2025-32432

La vulnérabilité provient de la manière dont Craft::createObject() (qui encapsule Yii::createObject() de Yii) traite les tableaux de configuration. Étant donné que ce mécanisme utilise le conteneur DI pour instancier et configurer des objets directement à partir du tableau non validé, les attaquants peuvent prendre le contrôle du processus de construction des objets.

Code PHP mis en évidence montrant la fonction createObject liée à la vulnérabilité d'exécution de code à distance CVE-2025-32432 Craft CMS.

Lorsqu'une charge utile malveillante est transmise, le constructeur de l'objet (hérité de la classe Model ) invoque la méthode App::configure().

Code PHP mis en évidence montrant la logique du constructeur Craft CMS liée à la vulnérabilité d'exécution de code à distance CVE-2025-32432.

Cette méthode itère sur chaque propriété du tableau contrôlé par l'attaquant et les attribue au nouvel objet.

Extrait de code PHP montrant une fonction de configuration, en rapport avec la vulnérabilité d'exécution de code à distance CVE-2025-32432 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.

Une telle charge utile malveillante peut être conçue pour exploiter la manière dont Component::__set traite les propriétés préfixées par « as », comme dans l'exemple suivant:

Capture d'écran du code montrant la charge utile de l'exploit pour CVE-2025-32432, vulnérabilité d'exécution de code à distance dans Craft CMS.

D'après notre analyse, la mise en œuvre de Component::__set comprend une mesure de sécurité : lorsqu'un comportement est associé à une telle propriété, le framework vérifie que la classe spécifiée dans le tableau de configuration est une sous-classe valide de yii\base\Behavior. Cette vérification vise à empêcher que des classes arbitraires soient directement associées à des composants.

Code PHP mis en évidence provenant de Craft CMS montrant la logique liée à la vulnérabilité d'exécution de code à distance CVE-2025-32432.

Cependant, cette protection n'est pas aussi efficace qu'elle le paraît. La faiblesse provient de la manière dont Yii::createObject gère les tableaux de configuration.

Lors de l'instanciation d'un objet, Yii::createObject donne la priorité au paramètre spécial __class. Si cette clé est présente, sa valeur est utilisée comme classe cible pour l'instanciation, et la clé de classe standard dans le tableau de configuration est ignorée.

Extrait de code PHP illustrant la logique de création d'objets liée à la vulnérabilité d'exécution de code à distance CVE-2025-32432 Craft CMS.

L'attaquant peut créer une charge utile pour le comportement d'exploitation qui comprend deux clés :

  1. « class » => « \craft\behaviors\FieldLayoutBehavior » - Une classe légitime qui étend yii\base\Behavior. Cette valeur existe uniquement pour satisfaire la vérification is_subclass_of dans Component::__set, permettant à l'exécution de se poursuivre sans générer d'erreur.
  2. '__class' => '\yii\rbac\PhpManager' - La cible réelle de l'attaquant. Il s'agit de la classe « gadget » qu'il souhaite instancier.

Lorsque le code est exécuté, Component::__set passe le contrôle de sécurité car il inspecte uniquement la clé de classe. Cependant, lorsque le framework appelle ensuite Yii::createObject pour attacher le comportement, il donne la priorité à __class, ce qui entraîne l'instanciation de l'objet \yii\rbac\PhpManager choisi par l'attaquant.

L'utilisation de \yii\rbac\PhpManager est intentionnelle. La simple création d'un objet ne suffit pas pour l'exploitation ; pour parvenir à un RCE, il faut une classe gadget avec des effets secondaires pouvant être utilisés comme arme. PhpManager est une cible courante dans les attaques POI (PHP Object Injection) en raison de son flux d'initialisation. Lors de l'instanciation, sa méthode init() appelle load(), qui invoque ensuite loadFromFile($this->itemFile). En contrôlant $this->itemFile, un attaquant peut forcer l'application à charger un fichier malveillant, transformant ainsi la création d'objet en exécution de code.

Code PHP mis en évidence montrant la vulnérabilité CVE-2025-32432 Craft CMS permettant l'exécution de code à distance avec inclusion de fichiers.

Le danger réside dans la méthode loadFromFile. En PHP, une instruction require exécute le fichier cible en tant que code. Ainsi, si un attaquant contrôle le chemin d'accès au fichier, il peut déclencher l'exécution d'un code arbitraire.

Pour placer du code malveillant sur le serveur, l'attaquant exploite les fichiers de session PHP. En injectant du PHP dans un paramètre de requête, Craft CMS enregistre la charge utile dans un fichier de session pendant le processus de redirection. Plus tard, lorsque PhpManager charge ce fichier, le code de l'attaquant peut être exécuté.

Organigramme illustrant le processus d'exploitation de la vulnérabilité CVE-2025-32432 permettant l'exécution de code à distance dans Craft CMS.

La chaîne d'attaque complète fonctionne en trois étapes. Tout d'abord, l'attaquant implante un code PHP malveillant en envoyant une URL spécialement conçue, que Craft CMS enregistre dans un fichier de session. Ensuite, il exploite le contournement __class dans le point de terminaison de transformation d'image pour charger le gadget PhpManager et le diriger vers le fichier de session infecté. Enfin, lorsque PhpManager charge le fichier, la charge utile de l'attaquant s'exécute, lui accordant un RCE et le contrôle total du serveur, souvent via un webshell ou un reverse shell.

Organigramme illustrant la vulnérabilité CVE-2025-32432 de Craft CMS permettant l'exécution de code à distance avec exploitation JSON et étapes de l'attaque
Sortie du terminal affichant les étapes d'exploitation pour CVE-2025-32432 Vulnérabilité d'exécution de code à distance Craft CMS
Terminal affichant CVE-2025-32432 Exploit d'exécution de code à distance Craft CMS avec accès shell en tant qu'utilisateur www-data

Atténuation et remédiation

Pour atténuer efficacement les risques associés à CVE-2025-32432, les organisations doivent disposer d'une visibilité et d'un contrôle sur leurs composants open source. Sans un inventaire clair des composants, l'application de correctifs relève de la conjecture.

OPSWAT , une technologie exclusive intégrée àla plateforme MetaDefender®, répond à ce besoin en fournissant un inventaire de tous les composants logiciels, bibliothèques, conteneurs Docker et dépendances utilisés. Elle permet aux organisations de suivre, sécuriser et mettre à jour leurs composants de manière proactive.

Interface utilisateur du scan de sécurité affichant l'archive Craft CMS bloquée présentant des vulnérabilités critiques pour l'atténuation CVE-2025-32432.
Tableau de bord de sécurité affichant la vulnérabilité CVE-2025-32432 Craft CMS relative à l'exécution de code à distance et les détails de la correction.

Dans l'exemple ci-dessus,la technologie SBOM de MetaDefender a analysé le package nginx-ingress-controller qui contenait la vulnérabilité CVE-2025-32432. Le système a automatiquement signalé le problème comme critique et a fourni des conseils sur les versions corrigées disponibles, permettant aux équipes de hiérarchiser rapidement les priorités et de corriger la vulnérabilité avant qu'elle ne puisse être exploitée.

OPSWAT est disponible dans MetaDefender Core et MetaDefender Software Chain™,ce qui permet aux équipes de sécurité d'identifier et de traiter plus rapidement les vulnérabilités. Avec OPSWAT , les équipes de sécurité peuvent :

  • Localisez rapidement les composants vulnérables - Identifiez immédiatement les composants open source affectés par les attaques de désérialisation. Cela permet d'agir rapidement pour corriger ou remplacer les bibliothèques vulnérables. 
  • Assurez-vous que les correctifs et les mises à jour sont proactifs - Surveillez en permanence les composants open source à l'aide OPSWAT afin de garder une longueur d'avance sur les vulnérabilités liées à la désérialisation. OPSWAT peut détecter les composants obsolètes ou non sécurisés, ce qui permet d'effectuer des mises à jour en temps opportun et de réduire l'exposition aux attaques. 
  • Maintenir la conformité et la déclaration – OPSWAT aide les organisations à respecter les exigences de conformité, alors que les cadres réglementaires imposent de plus en plus la transparence dans les chaînes d'approvisionnement logicielles.

Prêt à renforcer votre chaîne logistique logicielle contre les menaces émergentes ?

Tags :

Restez à jour avec OPSWAT!

Inscrivez-vous dès aujourd'hui pour recevoir les dernières mises à jour de l'entreprise, de l'entreprise, des histoires, des informations sur les événements, et plus encore.