Следующая новость
Предыдущая новость

Как подчинить белку. Учимся эксплуатировать новую уязвимость в почтовике SquirrelMail

21.03.2018 12:57
Как подчинить белку. Учимся эксплуатировать новую уязвимость в почтовике SquirrelMail

Содержание статьи

  • Как тестировать уязвимость
  • Детали
  • Удаление произвольных файлов
  • Чтение произвольных файлов
  • Демонстрация уязвимости (видео)
  • Выводы

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

Почти год назад я писал о другой уязвимости SquirrelMail — тогда речь шла об RCE, а проблема была в некорректной фильтрации параметров, которые отправляются бинарнику sendmail. Через месяц после этого, в мае 2017 года, исследователь из TROOPERS18 Флориан Груноу (Florian Grunow) обнаружил еще одну критическую уязвимость в этом же продукте. На сей раз проблема закралась в функцию прикрепления файлов к сообщению, а успешная эксплуатация позволяет атакующему читать файлы на целевой системе.

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

Как тестировать уязвимость

Перво-наперво поднимем стенд. Почтовые сервисы — это такой тип приложений, развертывание которых дает тебе как минимум +3 к навыкам администрирования. Тут много подводных камней, и без погружения в конфиги не обойтись. Хорошо хоть старый добрый Docker может выручить. Если не хочешь возиться с настройкой, то качай готовый контейнер из моего репозитория и переходи к следующему абзацу.

Запускаем докер и устанавливаем необходимый набор сервисов.

docker run -ti -p80:80 --rm --name=squirrel --hostname=squirrel debian /bin/bash apt-get update && apt-get install -y sendmail wget nano apache2 dovecot-core dovecot-imapd php 

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

install -d /usr/local/src/downloads cd /usr/local/src/downloads wget http://prdownloads.sourceforge.net/squirrelmail/squirrelmail-webmail-1.4.22.tar.gz mkdir /usr/local/squirrelmail cd /usr/local/squirrelmail mkdir data temp attach chown www-data:www-data data temp attach tar xvzf /usr/local/src/downloads/squirrelmail-webmail-1.4.22.tar.gz mv squirrelmail-webmail-1.4.22 www 

Теперь нужно создать конфигурационный файл для Squirrell. Для этих целей существует конфигуратор.

www/configure 

Или по старинке можешь вручную отредактировать дефолтный конфигурационный файл www/config/config_default.php.

Для нас главное, что в нем нужно указать, — это пути, по которым будут располагаться временные файлы, в том числе прикрепляемые к письмам. По умолчанию пути такие:

  1. Data Directory: /var/local/squirrelmail/data/.
  2. Attachment Directory: /var/local/squirrelmail/attach/.

Меняем их в соответствии с реальным положением вещей.

sed "s/domain = 'example.com'/domain = 'visualhack'/; s#/var/local/squirrelmail/#/usr/local/squirrelmail/#g" /usr/local/squirrelmail/www/config/config_default.php > /usr/local/squirrelmail/www/config/config.php 

Приближаемся к финишной прямой — настройке почтовых сервисов. Указываем, какие протоколы будем использовать.

echo "protocols = imap" > /etc/dovecot/dovecot.conf 

Разрешаем авторизацию по файлу паролей.

echo !include auth-passwdfile.conf.ext > /etc/dovecot/conf.d/10-auth.conf 

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

useradd -G mail attacker install -d -g attacker -o attacker /home/attacker cat /etc/passwd|grep attacker|sed 's/x/{PLAIN}passw/; s/.$//' > /etc/dovecot/users 

Не забываем прописать в конфиге Apache алиас для доступа к дистрибутиву SquirrelMail и доступ на чтение папки, в которой он находится.

cat >>/etc/apache2/apache2.conf <<EOL Alias /squirrelmail /usr/local/squirrelmail/www <Directory /usr/local/squirrelmail>     Options Indexes FollowSymLinks     AllowOverride None     Require all granted </Directory> EOL 

Вот вроде бы и все приготовления. Теперь запускаем требуемые сервисы и переходим непосредственно к изучению уязвимости.

service dovecot start && service apache2 start && service sendmail start 
Форма авторизации SquirrelMail

Детали

Проблема кроется в функции создания нового письма, так что с этого и начнем. Авторизуемся и откроем скрипт compose.php.

Как подчинить белку. Учимся эксплуатировать новую уязвимость в почтовике SquirrelMail

Страница создания нового письма в SquirrelMail

Приложение SquirrelMail написано на PHP, поэтому никаких проблем с чтением исходников не возникает. За вывод всей формы отвечает метод showInputForm.

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

Материалы из последних выпусков можно покупать отдельно только через два месяца после публикации. Чтобы продолжить чтение, необходимо купить подписку.

Подпишись на «Хакер» по выгодной цене!

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

1 год

6490 р.

Экономия 1400 рублей!

1 месяц

720 р.

25-30 статей в месяц

Уже подписан?

Источник

Последние новости