• Партнер

  • В почтовом сервере 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
    

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

    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
    Форма авторизации SquirrelMail
     

    Детали

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

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

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

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

    Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте

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

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

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


    Подписаться
    Уведомить о
    1 Комментарий
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии