Pull to refresh

Уязвимость в плагине WP-Slimstat 3.9.5 и ниже для WordPress

Reading time2 min
Views2.8K
Original author: Marc-Alexandre Montpas


Пользователям плагина WP-Slimstat версии 3.9.5 и ниже следует обновиться как можно быстрее! Во время проведения очередного аудита безопасности мы обнаружили ошибку в безопасности, благодаря которой злоумышленник может получить «секретный» ключ плагина и, тем самым, осуществить SQL-инъекцию.

Успешная реализация этого бага может привести к атакам типа «слепая sql-инъекция» (Blind SQL-Injection), которая позволит злоумышленнику получить данные из БД, в том числе имя пользователя, хэш пароля, а в некоторых конфигурациях и секретные ключи самого WordPress (полный контроль над сайтом).

WP-Slimstat использует «секретный» ключ для подписи данных, передаваемых от/к клиенту. Взглянув на то, каким образом генерируется этот ключ, можно сделать вывод, что злоумышленнику не составит труда узнать его:


В качестве «секретного» ключа используется хэш от времени, когда был установлен плагин. Злоумышленник может воспользоваться такими сайтами, как, например, Internet Archive, чтобы узнать примерное время создания сайта (после этого остается примерно 30 миллионов значений для проверки, что для современных CPU займет около 10 минут).

Чтобы можно было выполнить брутфорс, требуется только получить валидные и подписанные данные от плагина. Их несложно найти в разных фрагментах сгенерированных веб-страниц:


На первый взгляд это может показаться сложным, но, глядя на то, как эта структура данных используется в плагине, можно проследить простой способ подписи данных и хэширования составной строки, состоящей из payload и «секретного» токена:


Зная эту информацию злоумышленник может брутфорсить временные метки до тех пор, пока не получит такую же сигнатуру, как у атакуемого сайта.

В ходе расследования нам удалось установить, что мы можем передавать произвольные данные при вызове unserialize(), которые в дальнейшем буду переданы в метод maybe_insert_row() через переменную $content_info:




Учитывая то, что мы контролируем $_data, мы можем добавить в нее ассоциативный массив, индексами которого будут SQL-выражения, например:
array(“1=sleep(100)–“=>”1″)

Эта способность выполнять любые запросы, позволяет злоумышленнику получить любые данные из базы. Это опасная уязвимость и вы должны обновить плагин как можно быстрее.
Tags:
Hubs:
Total votes 4: ↑3 and ↓1+2
Comments0

Articles