Не так давно стало известно об уязвимости в плагине WordPress Mindstien Technologies My Geo Posts Free, которая получила идентификатор CVE-2024-52433.
Из-за уязвимости десериализации ненадежных данных, злоумышленник может внедрять объекты, которые в последствии могут использоваться в качестве цепочек, приводящих к RCE.
Затронуты все версии плагина до 1.2.
Если ваше приложение написано с использованием плагина Mindstien Technologies My Geo Posts Free, настоятельно рекомендуем проверить версии и обновиться по мере выхода вендорского патча.
В процессе эмуляции мы обнаружили, что эксплуатация возможна вследствие уязвимости следующего участка кода плагина Mindstien Technologies My Geo Posts Free:
$mdata = unserialize(stripslashes(base64_decode($_COOKIE['mgpf_geo_coockie'])));
То есть при передаче параметра COOKIE mgpf_geo_coockie со значением, предположим, TzoxNDoiVnVsbmVyYWJsZUNsYXNzIjoxOntzOjc6ImNvbW1hbmQiO3M6MTI6ImVjaG8gJ0hhY2tlZCEnIjt9…
…происходит следующее:
1) отрабатывает функция base64_decode, которая преобразует переданную строку в
O:14:"VulnerableClass":1:{s:7:"command";s:12:"echo 'Hacked!'";}2) далее будет вызвана функция
stripslashes, которая уберет слеши, в нашем примере их нет;
3) наконец, после выполнения
unserialize, объект $object будет экземпляром класса VulnerableClass с атрибутом command, равным echo 'Hacked!', напримерVulnerableClass Object
(
[command] => echo 'Hacked!'
)
Следовательно, если у нас есть класс вроде этого:
class VulnerableClass {
public $command;
public function __wakeup() {
system($this->command);
}
}То, используя уязвимость внедрения объекта, можно выполнить произвольный код.
Поделимся детектирующей логикой, которая позволит заблокировать эксплуатацию данной уязвимости.
Необходимо блокировать все запросы, содержащие параметр COOKIE
mgpf_geo_coockie, значение которого при декодировании из base64 даст сериализованную строку для хранения объекта; эту строку можно описать следующим регулярным выражением:
O:\d+:\"[a-zA-Z0-9_-]+\":\d+:(\{s:\d+:\"[a-zA-Z0-9_-]+\";(a|s|i|b|O):\d+|{})