Сегодня мы разберем CSRF-уязвимость в популярном форуме phpBB, а также покажем пример поиска подобных ошибок в большом проекте. Далее разберем технологию обхода kASLR и изучим эксплоит, основанный на удаленном выполнении кода в Ruby on Rails.

 

CSRF-уязвимость в phpBB

 

CVSSv2

N/A

 

BRIEF

Дата релиза: 25 января 2016 года
Автор: Lander Brandt
CVE: N/A

Уязвимость была найдена в администраторской панели управления форума в форме создания BBCode. Поскольку BBCode добавлен в белый список, созданный для администраторов, атакующий может инжектить произвольный HTML или JavaScript в посты на форуме.

Для лучшего понимания автор рекомендует рассмотреть скрипт ./phpbb/phpBB/posting.php, так как он вызывается, когда пользователи создают сообщения или темы. Этот контроллер должен проверять права доступа и возможность создания записей, а также обрабатывать формы и, возможно, экранировать HTML. В самом начале файла мы можем увидеть нечто интересное.

// Оставляем только нужные параметры
$post_id    = request_var('p', 0);
$topic_id   = request_var('t', 0);
$forum_id   = request_var('f', 0);
$draft_id   = request_var('d', 0);
$lastclick  = request_var('lastclick', 0);

$preview    = (isset($_POST['preview'])) ? true : false;
$save       = (isset($_POST['save'])) ? true : false;
$load       = (isset($_POST['load'])) ? true : false;
$confirm    = $request->is_set_post('confirm');
$cancel     = (isset($_POST['cancel']) && !isset($_POST['save'])) ? true : false;

Здесь определено большинство параметров, используемых в контроллере. Часть из них берет свои значения из устаревшей функции request_var(). Она представляет собой обертку метода \phpbb\request\request_interface::variable(), который возвращает запрошенные значения из некоторого ассоциативного массива. Массив этот является объединением значений глобальных переменных $_GET и $_POST. Все эти значения также обработаны функцией trim() и приведены к нужному типу.

Таким образом, если мы найдем форму, которая отправляет запросы POST, то, возможно, там же сможем отправить и GET. А это верный путь к нахождению CSRF-уязвимости.

Но для начала разберем, как работают CSRF-токены в phpBB. Поищем строку с обработчиком одной из форм.

if ($submit && check_form_key('posting'))

Из названия функции check_form_key() ясно, что она проверяет токен CSRF, а если заглянуть внутрь, то обнаруживается, что делает она это простым сравнением. Ниже в файле есть вызов еще одной функции.

  add_form_key('posting');

То есть и добавление, и проверка токена CSRF осуществляется вручную. А это еще больше наталкивает на мысль о наличии уязвимости.

Попробуем найти в исходниках вызовы функций add_form_key() и check_form_key(). Наша задача — найти файлы, где есть add_form_key() и при этом нет check_form_key(). На следующем скриншоте показаны результаты такого поиска.

Найденные вызовы функций `add_form_key()` и `check_form_key()`
Найденные вызовы функций `add_form_key()` и `check_form_key()`

Большее количество вызовов check_form_key(), чем add_form_key(), не должно тебя смущать, так как проверять токен можно сколько угодно раз. Мы же ищем такие места, где токен добавляется, но не проверяется. Таких мест всего два: acp_bbcode.php и acp_extensions.php.

Файл acp_extensions.php нам не слишком интересен, так как он всего лишь предоставляет администраторам возможность видеть нестабильные версии расширений phpBB при проверке обновлений. В ходе успешной эксплуатации такой CSRF-уязвимости атакующий может сделать так, что администратор будет думать, будто его плагины устарели. Не слишком полезно.

Продолжение статьи доступно только подписчикам

Вариант 1. Оформи подписку на «Хакер», чтобы читать все статьи на сайте

Подписка позволит тебе в течение указанного срока читать ВСЕ платные материалы сайта, включая эту статью. Мы принимаем оплату банковскими картами, электронными деньгами и переводами со счетов мобильных операторов. Подробнее о подписке

Вариант 2. Купи одну статью

Заинтересовала статья, но нет возможности оплатить подписку? Тогда этот вариант для тебя! Обрати внимание: этот способ покупки доступен только для статей, опубликованных более двух месяцев назад.


Комментарии

Подпишитесь на ][, чтобы участвовать в обсуждении

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

Check Also

Группировка APT28 эксплуатирует недавно исправленную уязвимость в Adobe Flash Player

Эксперты компании Proofpoint обнаружили, что «правительственные» хакеры из группы APT28 (о…