
PoC di CVE-2025-22510
Plugin WordPress
Component name WC Price History for Omnibus
Vulnerable version <= 2.1.4
Component slug wc-price-history
Component link https://wordpress.org/plugins/wc-price-history/
Vulnerability class A3: Injection
Vulnerability type PHP Object Injection
Shop manger(Administrator +)
Nel plugin WC Price History for Omnibus versione 2.1.4 e precedenti, è possibile caricare file JSON tramite la sezione 'Importa dati di debug' nel menu 'Cronologia dei prezzi' della dashboard di WooCommerce (/wp-admin/admin.php?page=wc-price-history). Il file JSON caricato viene inviato come payload wc_price_history_import_file e si verifica una vulnerabilità di PHP Object Injection nel valore della chiave 'serialized' dei dati JSON. Attraverso questa vulnerabilità, un attaccante con privilegi di Shop Manager può iniettare oggetti PHP.
Sebbene il plugin stesso non abbia POP Chains note, se vengono scoperte POP chains in altri plugin o temi sul sito WordPress target, gli aggressori possono eseguire eliminazione arbitraria di file, furto di informazioni sensibili ed esecuzione di codice.
Preparare un sito WordPress con il plugin WC Price History for Omnibus versione 2.1.4 o inferiore installato e attivato.
Per attivare questo plugin, il plugin WooCommerce deve essere prima installato e attivato.
Per testare la vulnerabilità PHP Object Injection, aggiungere la seguente classe PoC_POP_Chain_Object in fondo al file wp-config.php.
class PoC_POP_Chain_Object {
public $message = "";
public function __destruct() {
echo "<mark>Success PoP Chain</mark>";
echo "<br>";
echo "<mark>msg: ". $this->message ."</mark>";
}
}

Successivamente, creare un file con i seguenti dati JSON.
In questi dati JSON, i dati inseriti nella chiave
serializedsono in formato oggetto serializzato PHP, che crea un'istanza della classePoC_POP_Chain_Objectprecedentemente aggiunta al filewp-config.phpe assegna la stringa 'Exploit !!' alla proprietà message.
{
"serialized": "O:20:\"PoC_POP_Chain_Object\":1:{s:7:\"message\";s:10:\"Exploit !!\";}"
}
Quando si caricano dati JSON tramite la sezione 'Importa dati di debug' nel menu 'Cronologia dei prezzi' della dashboard di WooCommerce (/wp-admin/admin.php?page=wc-price-history) e si fa clic sul pulsante 'Importa',
Viene eseguita la funzione import_file() definita nella classe Import del file /wp-content/plugins/wc-price-history/app/PriorPrice/Import.php. Questa funzione recupera il payload della richiesta wc_price_history_import_file contenente il file JSON, quindi recupera i dati con chiave serialized da quei dati JSON ed esegue la deserializzazione tramite la funzione maybe_unserialize.

Pertanto, il payload della richiesta wc_price_history_import_file è in formato JSON e si verifica una vulnerabilità di PHP Object Injection durante il processo di deserializzazione dei dati serializzati con chiave serialized senza validazione.
Successivamente, navigare al menu 'Cronologia dei prezzi' (/wp-admin/admin.php?page=wc-price-history) nella dashboard di WooCommerce. Nella sezione 'Importa dati di debug', selezionare il file JSON precedentemente creato tramite il modulo di caricamento file e fare clic sul pulsante 'Importa' per caricarlo.

Come risultato della richiesta di caricamento, nei dati di risposta si può vedere che il metodo magico __destruct() della classe PoC_POP_Chain_Object aggiunta a wp-config.php viene eseguito, visualizzando il seguente messaggio.
<mark>Success PoP Chain</mark>
<br>
<mark>msg: Exploit !!</mark>
