
PoC of CVE-2025-22510
Плагин WordPress
Название компонента WC Price History for Omnibus
Уязвимая версия <= 2.1.4
Слаг компонента wc-price-history
Ссылка на компонент https://wordpress.org/plugins/wc-price-history/
Класс уязвимости A3: Инъекция
Тип уязвимости PHP Object Injection
Менеджер магазина (Администратор +)
В плагине WC Price History for Omnibus версии 2.1.4 и ниже JSON-файлы могут быть загружены через раздел «Import debug data» в меню «Price History» панели управления WooCommerce (/wp-admin/admin.php?page=wc-price-history). Загруженный JSON-файл отправляется в качестве полезной нагрузки wc_price_history_import_file, и уязвимость PHP Object Injection возникает в значении ключа serialized данных JSON. Через эту уязвимость злоумышленник с правами менеджера магазина может внедрять PHP-объекты.
Хотя сам плагин не содержит известных POP-цепочек, если POP-цепочки обнаружены в других плагинах или темах на целевом сайте WordPress, злоумышленники могут выполнять произвольное удаление файлов, кражу конфиденциальной информации и выполнение кода.
Подготовьте сайт WordPress с установленным и активированным плагином WC Price History for Omnibus версии 2.1.4 или ниже.
Для активации этого плагина сначала необходимо установить и активировать плагин WooCommerce.
Чтобы протестировать уязвимость PHP Object Injection, добавьте следующий класс PoC_POP_Chain_Object в конец файла 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>";
}
}

Затем создайте файл со следующими JSON-данными.
В этих JSON-данных данные, введённые в ключ
serialized, представлены в формате PHP-сериализованного объекта, который создаёт экземпляр ранее добавленного в файлwp-config.phpклассаPoC_POP_Chain_Objectи присваивает строку 'Exploit !!' свойствуmessage.
{
"serialized": "O:20:\"PoC_POP_Chain_Object\":1:{s:7:\"message\";s:10:\"Exploit !!\";}"
}
Когда вы загружаете JSON-данные через раздел «Import debug data» в меню «Price History» панели управления WooCommerce (/wp-admin/admin.php?page=wc-price-history) и нажимаете кнопку «Import»,
Выполняется функция import_file(), определённая в классе Import файла /wp-content/plugins/wc-price-history/app/PriorPrice/Import.php. Эта функция получает полезную нагрузку запроса wc_price_history_import_file, содержащую JSON-файл, затем извлекает данные с ключом serialized из этих JSON-данных и выполняет десериализацию через функцию maybe_unserialize.

Следовательно, полезная нагрузка запроса wc_price_history_import_file имеет формат JSON, и уязвимость PHP Object Injection возникает в процессе десериализации сериализованных данных с ключом serialized без проверки.
Затем перейдите в меню «Price History» (/wp-admin/admin.php?page=wc-price-history) в панели управления WooCommerce. В разделе «Import debug data» выберите ранее созданный JSON-файл через форму загрузки файлов и нажмите кнопку «Import», чтобы загрузить его.

В результате запроса на загрузку в данных ответа вы увидите, что магический метод __destruct() класса PoC_POP_Chain_Object, добавленного в wp-config.php, выполняется, отображая следующее сообщение.
<mark>Success PoP Chain</mark>
<br>
<mark>msg: Exploit !!</mark>
