Сегодня мы разберем 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. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», увеличит личную накопительную скидку и позволит накапливать профессиональный рейтинг Xakep Score! Подробнее

Вариант 2. Открой один материал

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


Check Also

Великий пакостник. Пробираемся через дебри IPv6 к root-флагу виртуалки с HackTheBox

В этой статье я покажу, как получить права суперпользователя на виртуальной машине Mischie…

Оставить мнение