
PHP Object Injection в Profile Builder < 4.0.1
Исследователь: Vivien Lebas
Уязвимый плагин: Profile Builder (WordPress)
Уязвимые версии: < 4.0.1
Исправлено в: 4.0.1
Тип: Инъекция PHP-объектов (небезопасная десериализация)
CWE: CWE-502
OWASP: A8 – Insecure Deserialization
CVSS 3.1: 6.6 (Medium) — AV:N/AC:H/PR:H/UI:N/S:U/C:H/I:H/A:H
WPScan: Подтверждённое уведомление
Дополнение Import/Export плагина Profile Builder не проверяет тип данных, подвергаемых десериализации, при импорте файла конфигурации. Пользователь с высокими привилегиями (администратор) может тем самым вызвать инъекцию PHP-объектов, импортировав специально сформированный JSON-файл.
Дополнение является бесплатным расширением, отключённым по умолчанию, а сам Profile Builder не содержит пригодной для использования цепочки POP (Property-Oriented Programming). Поэтому для достижения конкретного воздействия требуется подходящий гаджет из другого установленного плагина или темы.
Уязвимость находится в функции импорта:
/wp-admin/admin.php?page=pbie-import-export&tab=import
Значение внутри импортируемого файла передаётся в maybe_unserialize() WordPress
без какой-либо проверки типа. Если значение является строкой сериализованного
объекта, PHP создаёт экземпляр указанного класса и выполняет его магические
методы (__wakeup, __destruct) во время запроса импорта.
manage_options). В мультисайте импорт
ограничен правом manage_network, поэтому требуется Network/Super Administrator;
администратору подсайта доступ запрещён.Evil в качестве замены любого такого класса,
предоставляемого установленным плагином или темой. https://victim.example/wp-admin/admin.php?page=pbie-import-export&tab=import
payload.json: {
"options": {},
"posts": {
"wppb-rf-cpt": [
{
"post_title": "POC",
"post_name": "poc",
"post_type": "post",
"post_status": "publish",
"postmeta": {
"poc": ["O:4:\"Evil\":0:{}"]
}
}
]
}
}
payload.json в поле JSON File и нажмите Import.Строка внутри значения postmeta передаётся в maybe_unserialize(), поэтому
указанный класс создаётся и его магические методы выполняются во время запроса
импорта.
wppb-ul-cpt, wppb-rf-cpt или wppb-epf-cpt,
но фактически создаваемый тип записи берётся из поля post_type каждой записи,
поэтому путь достижим без лицензии Pro.Инъекция PHP-объектов. При наличии подходящей цепочки гаджетов из другого установленного плагина или темы это может привести к таким действиям, как операции с файлами или, в зависимости от доступных гаджетов, к удалённому выполнению кода.
Обновите Profile Builder до версии 4.0.1 или более поздней.
Эта уязвимость была ответственно раскрыта производителю и публикуется после того, как исправление стало доступно, в образовательных и защитных целях.