
PoC de CVE-2025-22510
Plugin de WordPress
Nombre del componente WC Price History for Omnibus
Versión vulnerable <= 2.1.4
Slug del componente wc-price-history
Enlace del componente https://wordpress.org/plugins/wc-price-history/
Clase de vulnerabilidad A3: Injection
Tipo de vulnerabilidad Inyección de Objetos PHP
Gerente de tienda (Administrador +)
En el complemento WC Price History for Omnibus, versión 2.1.4 y anteriores, se pueden subir archivos JSON a través de la sección 'Import debug data' en el menú 'Price History' del panel de WooCommerce (/wp-admin/admin.php?page=wc-price-history). El archivo JSON subido se envía como un payload wc_price_history_import_file, y se produce una vulnerabilidad de Inyección de Objetos PHP en el valor de la clave 'serialized' de los datos JSON. Mediante esta vulnerabilidad, un atacante con privilegios de Gerente de tienda puede inyectar objetos PHP.
Si bien el complemento en sí no tiene cadenas POP conocidas, si se descubren cadenas POP en otros complementos o temas del sitio de WordPress objetivo, los atacantes pueden realizar eliminación arbitraria de archivos, robo de información confidencial y ejecución de código.
Prepare un sitio de WordPress con el complemento WC Price History for Omnibus versión 2.1.4 o inferior instalado y activado.
Para activar este complemento, el complemento WooCommerce debe estar instalado y activado primero.
Para probar la vulnerabilidad de Inyección de Objetos PHP, agregue la siguiente clase PoC_POP_Chain_Object al final del archivo 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>";
}
}

A continuación, cree un archivo con los siguientes datos JSON.
En estos datos JSON, el dato introducido en la clave
serializedestá en formato de objeto serializado de PHP, lo que crea una instancia de la clasePoC_POP_Chain_Objectañadida anteriormente al archivowp-config.phpy asigna la cadena 'Exploit !!' a la propiedadmessage.
{
"serialized": "O:20:\"PoC_POP_Chain_Object\":1:{s:7:\"message\";s:10:\"Exploit !!\";}"
}
Cuando se suben datos JSON a través de la sección 'Import debug data' en el menú 'Price History' del panel de WooCommerce (/wp-admin/admin.php?page=wc-price-history) y se hace clic en el botón 'Import',
Se ejecuta la función import_file() definida en la clase Import del archivo /wp-content/plugins/wc-price-history/app/PriorPrice/Import.php. Esta función recupera el payload de la solicitud wc_price_history_import_file que contiene el archivo JSON, luego obtiene los datos con la clave serialized de esos datos JSON y realiza la deserialización mediante la función maybe_unserialize.

Por lo tanto, el payload de la solicitud wc_price_history_import_file está en formato JSON, y se produce una vulnerabilidad de Inyección de Objetos PHP durante el proceso de deserialización de los datos serializados con la clave serialized sin validación.
A continuación, navegue hasta el menú 'Price History' (/wp-admin/admin.php?page=wc-price-history) en el panel de WooCommerce. En la sección 'Import debug data', seleccione el archivo JSON creado anteriormente a través del formulario de carga de archivos y haga clic en el botón 'Import' para subirlo.

Como resultado de la solicitud de carga, en los datos de respuesta puede ver que se ejecuta el método mágico __destruct() de la clase PoC_POP_Chain_Object añadida a wp-config.php, mostrando el siguiente mensaje.
<mark>Success PoP Chain</mark>
<br>
<mark>msg: Exploit !!</mark>
