NOVITÀ: Pubblicato il rapporto 2025 SANS ICS/OT sulla sicurezza informatica

Scarica il rapporto
Per le traduzioni dei siti utilizziamo l'intelligenza artificiale e, sebbene ci sforziamo di essere accurati, non sempre le traduzioni sono precise al 100%. La vostra comprensione è apprezzata.

CVE-2025-32432: Esecuzione di codice remoto non autenticato in Craft CMS

da OPSWAT
Condividi questo post
Due ricercatori del programma di borse di studio post-laurea in sicurezza informatica delle infrastrutture OPSWAT su sfondo blu

Nell'aprile 2025, Orange Cyberdefense ha scoperto una vulnerabilità critica in Craft CMS durante un'indagine su un incidente, ora tracciata come CVE-2025-32432. La falla consente l'esecuzione di codice remoto (RCE) non autenticato con un punteggio CVSS v3.1 massimo di 10,0 (critico) dal NVD (National Vulnerability Database).

Nell'ambito del programmaOPSWAT Infrastructure Cybersecurity Graduate Fellowship, i nostri borsisti hanno condotto uno studio approfondito su questa vulnerabilità, riproducendo l'exploit, verificandone l'impatto, valutando i rischi organizzativi e analizzando le strategie di protezione raccomandate.

Questo blog offre un'analisi approfondita e completa della vulnerabilità CVE-2025-32432, analizzandone la causa principale, il flusso di sfruttamento e le implicazioni più ampie in termini di sicurezza, fornendo al contempo indicazioni pratiche alle organizzazioni per difendersi da questa minaccia.

CVE-2025-32432 Introduzione

CVE-2025-32432 interessa le versioni di Craft CMS dalla 3.0.0-RC1 alla 3.9.14, dalla 4.0.0-RC1 alla 4.14.14 e dalla 5.0.0-RC1 alla 5.6.16. Classificato come CWE-94: Code Injection, il difetto deriva da una gestione impropria degli input non attendibili, consentendo in ultima analisi un RCE non autenticato.  

Metriche CVSS 3.x per CVE-2025-32432 Vulnerabilità di esecuzione di codice remoto Craft CMS che mostra punteggi di base critici

Craft CMS e il framework Yii

Craft CMS è un moderno sistema di gestione dei contenuti che consente agli sviluppatori e ai team di contenuti di creare siti web flessibili e completamente personalizzati, anziché affidarsi a modelli rigidi e predefiniti. Adottato da oltre 46.000 siti web in tutto il mondo, è ampiamente utilizzato e spesso bersaglio di attacchi da parte di hacker alla ricerca di vulnerabilità ad alto impatto.

Craft CMS è basato sul framework Yii, un framework PHP veloce e potente creato per lo sviluppo web moderno. Yii fornisce la struttura e gli strumenti di base, mentre Craft CMS lo estende per offrire un sistema di gestione dei contenuti flessibile.

Loghi Craft CMS e Yii Framework affiancati, relativi alla vulnerabilità di esecuzione di codice remoto CVE-2025-32432

Una delle caratteristiche principali del framework Yii è il suo contenitore Dependency Injection (DI). La Dependency Injection è un modello di progettazione che fornisce ai componenti le risorse di cui hanno bisogno, invece di richiedere loro di costruire tali risorse autonomamente. Il contenitore DI di Yii è altamente flessibile, in grado di costruire oggetti complessi a partire da regole di configurazione relativamente semplici.

Tuttavia, questa flessibilità comporta dei rischi. Nel caso di CVE-2025-32432, il contenitore DI è stato utilizzato in modo improprio in combinazione con input utente non attendibili, creando un percorso per l'esecuzione di codice remoto. Questo caso dimostra che anche le funzionalità di framework sicure e potenti possono diventare pericolose se integrate senza una comprensione completa delle loro implicazioni di sicurezza.

Approfondimento su CVE-2025-32432

Craft CMS include una funzione chiamata Image Transforms, progettata per ottimizzare le prestazioni generando immagini ridimensionate direttamente sul server. Invece di fornire un'immagine di grandi dimensioni (4,5 MB) da visualizzare come miniatura 300×300, Craft CMS crea e fornisce automaticamente una versione più piccola e ottimizzata. Questo approccio riduce l'utilizzo della larghezza di banda e migliora significativamente la velocità di caricamento della pagina.

Per rendere questa funzionalità ampiamente disponibile, Craft CMS espone l'endpoint actions/assets/generate-transform senza richiedere l'autenticazione. Sebbene ciò garantisca che sia gli utenti autenticati che quelli anonimi possano beneficiare di immagini ottimizzate, introduce anche una superficie di attacco accessibile al pubblico dove chiunque può fornire input appositamente creati all'applicazione.

Frammento di codice tratto da Craft CMS AssetsController che mostra la logica allowAnonymous relativa alla vulnerabilità CVE-2025-32432.

Attraverso un'analisi dettagliata di questo flusso di lavoro, i nostri colleghi hanno identificato che il metodo AssetsController::actionGenerateTransform viene richiamato ogni volta che viene inviata una richiesta POST all'endpoint esposto. Questa funzione recupera il parametro handle direttamente dal corpo della richiesta e lo inoltra a valle per un'ulteriore elaborazione nella fase successiva.

Screenshot del codice PHP di Craft CMS relativo all'analisi della vulnerabilità di esecuzione di codice remoto CVE-2025-32432

Nel passaggio successivo, viene richiamato il metodo ImageTransforms::normalizeTransform(). Questo metodo prende il parametro handle fornito dall'utente e lo converte in un oggetto ImageTransform. Poiché l'oggetto viene creato direttamente da un input non attendibile, ciò rappresenta un punto critico di rischio nel flusso di esecuzione.

Frammento di codice PHP da Craft CMS relativo all'analisi della vulnerabilità di esecuzione di codice remoto CVE-2025-32432

Durante questo processo, tutte le coppie chiave-valore dell'array $transform controllato dall'utente (proveniente dal parametro handle) vengono unite in un array di configurazione. Il metodo normalizeTransform passa quindi questo array a Craft::createObject(), che è responsabile dell'istanziazione di un nuovo oggetto ImageTransform.

Frammento di codice che mostra la logica di Craft CMS relativa alla vulnerabilità di esecuzione di codice remoto CVE-2025-32432

La vulnerabilità deriva dal modo in cui Craft::createObject() (che racchiude Yii::createObject() di Yii) elabora gli array di configurazione. Poiché questo meccanismo utilizza il contenitore DI per istanziare e configurare oggetti direttamente dall'array non convalidato, gli aggressori potrebbero ottenere il controllo sul processo di costruzione degli oggetti.

Codice PHP evidenziato che mostra la funzione createObject relativa alla vulnerabilità CVE-2025-32432 di Craft CMS che consente l'esecuzione di codice remoto.

Quando viene passato un payload dannoso, il costruttore dell'oggetto (ereditato dalla classe Model ) richiama il metodo App::configure().

Codice PHP evidenziato che mostra la logica del costruttore Craft CMS relativa alla vulnerabilità di esecuzione di codice remoto CVE-2025-32432

Questo metodo esegue un'iterazione su ciascuna proprietà dell'array controllato dall'autore dell'attacco e le assegna al nuovo oggetto.

Frammento di codice PHP che mostra una funzione di configurazione, rilevante per la vulnerabilità CVE-2025-32432 Craft CMS relativa all'esecuzione di codice remoto.

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.

Uno di questi payload dannosi può essere creato per sfruttare il modo in cui Component::__set elabora le proprietà con prefisso as, come ad esempio exploit:

Screenshot del codice che mostra il payload dell'exploit per CVE-2025-32432 Vulnerabilità di esecuzione di codice remoto in Craft CMS

Dalla nostra analisi, l'implementazione di Component::__set include una misura di sicurezza: quando un comportamento viene associato tramite tale proprietà, il framework verifica che la classe specificata nell'array di configurazione sia una sottoclasse valida di yii\base\Behavior. Questo controllo ha lo scopo di impedire che classi arbitrarie vengano associate direttamente ai componenti.

Codice PHP evidenziato da Craft CMS che mostra la logica collegata alla vulnerabilità di esecuzione di codice remoto CVE-2025-32432

Tuttavia, questa misura di sicurezza non è così efficace come sembra. La debolezza deriva dal modo in cui Yii::createObject gestisce gli array di configurazione.

Quando si istanzia un oggetto, Yii::createObject dà priorità al parametro speciale __class. Se questa chiave è presente, il suo valore viene utilizzato come classe di destinazione per l'istanziazione e la chiave di classe standard nell'array di configurazione viene ignorata.

Frammento di codice PHP che mostra la logica di creazione degli oggetti relativa alla vulnerabilità CVE-2025-32432 di Craft CMS che consente l'esecuzione di codice remoto.

L'autore dell'attacco può creare un payload per il comportamento dell'exploit che include due chiavi:

  1. 'class' => '\craft\behaviors\FieldLayoutBehavior' - Una classe legittima che estende yii\base\Behavior. Questo valore esiste esclusivamente per soddisfare il controllo is_subclass_of in Component::__set, consentendo l'esecuzione senza generare un errore.
  2. '__class' => '\yii\rbac\PhpManager' - Il vero obiettivo dell'autore dell'attacco. Si tratta della classe "gadget" che desidera istanziare.

Quando il codice viene eseguito, Component::__set supera il controllo di sicurezza perché ispeziona solo la chiave della classe. Tuttavia, quando il framework chiama successivamente Yii::createObject per allegare il comportamento, dà la precedenza a __class, con il risultato che viene istanziato invece l'oggetto \yii\rbac\PhpManager scelto dall'autore dell'attacco.

L'uso di \yii\rbac\PhpManager è intenzionale. La semplice creazione di un oggetto non è sufficiente per lo sfruttamento; per ottenere l'RCE è necessaria una classe gadget con effetti collaterali che possano essere utilizzati come arma. PhpManager è un bersaglio comune negli attacchi POI (PHP Object Injection) a causa del suo flusso di inizializzazione. Al momento dell'istanziazione, il suo metodo init() chiama load(), che a sua volta richiama loadFromFile($this->itemFile). Con il controllo su $this->itemFile, un aggressore può forzare l'applicazione a caricare un file dannoso, trasformando la creazione dell'oggetto in esecuzione di codice.

Flusso di codice PHP evidenziato che mostra la vulnerabilità CVE-2025-32432 di Craft CMS relativa all'esecuzione di codice remoto con inclusione di file

Il pericolo risiede nel metodo loadFromFile. In PHP, un require esegue il file di destinazione come codice, quindi se un aggressore controlla il percorso del file, può attivare l'esecuzione di codice arbitrario.

Per inserire codice dannoso sul server, l'autore dell'attacco sfrutta i file di sessione PHP. Inserendo PHP in un parametro di richiesta, Craft CMS salva il payload in un file di sessione durante il processo di reindirizzamento. Successivamente, quando PhpManager carica questo file, il codice dell'autore dell'attacco potrebbe essere eseguito.

Diagramma di flusso che mostra il processo di sfruttamento della vulnerabilità CVE-2025-32432 relativa all'esecuzione di codice remoto in Craft CMS

La catena di attacco completa funziona in tre fasi. Innanzitutto, l'autore dell'attacco inserisce un codice PHP dannoso inviando un URL appositamente creato, che Craft CMS salva in un file di sessione. Successivamente, sfrutta il bypass __class nell'endpoint di trasformazione delle immagini per caricare il gadget PhpManager e indirizzarlo verso il file di sessione compromesso. Infine, quando PhpManager carica il file, viene eseguito il payload dell'autore dell'attacco, che ottiene l'RCE e il controllo completo del server, spesso tramite una webshell o una reverse shell.

Diagramma di flusso che mostra la vulnerabilità CVE-2025-32432 di Craft CMS relativa all'esecuzione di codice remoto con exploit JSON e fasi dell'attacco
Output del terminale che mostra le fasi di sfruttamento della vulnerabilità CVE-2025-32432 relativa all'esecuzione di codice remoto in Craft CMS
Terminale che mostra CVE-2025-32432 Craft CMS exploit di esecuzione di codice remoto con accesso alla shell come utente www-data

Mitigazione e riparazione

Per mitigare efficacemente i rischi associati a CVE-2025-32432, le organizzazioni devono avere visibilità e controllo sui propri componenti open source. Senza un inventario chiaro dei componenti, l'applicazione delle patch diventa un'operazione aleatoria.

OPSWAT , una tecnologia proprietaria dellapiattaforma MetaDefender®, risponde a questa esigenza fornendo un inventario di tutti i componenti software, le librerie, i container Docker e le dipendenze in uso. Consente alle organizzazioni di monitorare, proteggere e aggiornare i propri componenti in modo proattivo.

Interfaccia utente della scansione di sicurezza che mostra l'archivio Craft CMS bloccato con vulnerabilità critiche per la mitigazione CVE-2025-32432
Pannello di controllo della sicurezza che mostra la vulnerabilità CVE-2025-32432 Craft CMS relativa all'esecuzione di codice remoto e i dettagli relativi alla risoluzione del problema.

Nell'esempio sopra riportato,la tecnologia SBOM di MetaDefender ha eseguito la scansione del pacchetto nginx-ingress-controller che conteneva la vulnerabilità CVE-2025-32432. Il sistema ha automaticamente contrassegnato il problema come critico e ha fornito indicazioni sulle versioni corrette disponibili, consentendo ai team di dare rapidamente priorità alla vulnerabilità e di applicare la patch prima che potesse essere sfruttata.

OPSWAT è disponibile in MetaDefender Core e MetaDefender Software Chain™,consentendo ai team di sicurezza di identificare e agire più rapidamente sulle vulnerabilità. Con OPSWAT , i team di sicurezza possono:

  • Individuazione rapida dei componenti vulnerabili: identifica immediatamente i componenti open source interessati dagli attacchi di deserializzazione. Ciò garantisce un intervento rapido nell'applicazione di patch o nella sostituzione delle librerie vulnerabili. 
  • Garantire patch e aggiornamenti proattivi - Monitorare costantemente i componenti open source tramite OPSWAT per prevenire le vulnerabilità di deserializzazione. OPSWAT è in grado di rilevare componenti obsoleti o non sicuri, consentendo aggiornamenti tempestivi e riducendo l'esposizione agli attacchi. 
  • Mantenere la conformità e la rendicontazione: OPSWAT aiuta le organizzazioni a soddisfare i requisiti di conformità, poiché i quadri normativi richiedono sempre più trasparenza nelle catene di fornitura del software.

Sei pronto a rafforzare la tua catena di fornitura software contro le minacce emergenti?

Rimanete aggiornati con OPSWAT!

Iscriviti oggi stesso per ricevere gli ultimi aggiornamenti sull'azienda, storie, informazioni sugli eventi e altro ancora.