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

Лазейка в Webmin. Как работает бэкдор в панели управления сервером

08.11.2019 16:13
Лазейка в Webmin. Как работает бэкдор в панели управления сервером

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

  • Стенд
  • Детали
  • Демонстрация уязвимости (видео)
  • Заключение

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

Webmin полностью написан на Perl, без использования нестандартных модулей. Он состоит из простого веб-сервера и нескольких скриптов — они связывают команды, обеспечивающие исполнение команд, которые пользователь отдает в веб-интерфейсе, на уровне операционной системы и внешних программ. Через веб-админку можно создавать новые учетные записи пользователей, почтовые ящики, изменять настройки служб и разных сервисов и все в таком духе.

Уязвимость находится в модуле восстановления пароля. Манипулируя параметром old в скрипте password_change.cgi, атакующий может выполнять произвольный код на целевой системе с правами суперпользователя, что наводит на мысли об умышленном характере этого бага. Что еще подозрительнее — проблема присутствует только в готовых сборках дистрибутива с SourceForge, а в исходниках на GitHub ее нет.

INFO

Уязвимость получила идентификатор CVE-2019-15107.

Стенд

Для демонстрации уязвимости нам понадобятся две версии дистрибутива Webmin — 1.890 и 1.920, так как тестовые окружения для них немного различаются.
Для этого воспользуемся двумя контейнерами Docker.

$ docker run -it --rm -p10000:10000 --name=webminrce18 --hostname=webminrce18.vh debian /bin/bash $ docker run -it --rm -p20000:10000 --name=webminrce19 --hostname=webminrce19.vh debian /bin/bash 

Теперь установим необходимые зависимости.

$ apt-get update -y && apt install -y perl libnet-ssleay-perl openssl libauthen-pam-perl libpam-runtime libio-pty-perl nano wget python apt-show-versions 

Во время установки apt-show-versions у меня возникла проблема (на скриншоте ниже).

Лазейка в Webmin. Как работает бэкдор в панели управления сервером
Проблема при установке apt-show-versions через apt

Следующие команды помогают ее устранить:

$ apt-get purge -y apt-show-versions $ rm /var/lib/apt/lists/*lz4 $ apt-get -o Acquire::GzipIndexes=false update -y $ apt install -y apt-show-versions 

После этого скачиваем соответствующие версии дистрибутивов с SourceForge.

$ wget http://prdownloads.sourceforge.net/webadmin/webmin_1.890_all.deb $ wget http://prdownloads.sourceforge.net/webadmin/webmin_1.920_all.deb 

И устанавливаем их.

$ dpkg --install webmin_1.890_all.deb $ dpkg --install webmin_1.920_all.deb 
Лазейка в Webmin. Как работает бэкдор в панели управления сервером
Установка обеих версий Webmin закончена

Теперь запускаем демоны Webmin.

$ service webmin start 

Версия 1.890 доступна на дефолтном порте 10000, а 1.920 — на 20000.

Лазейка в Webmin. Как работает бэкдор в панели управления сервером
Готовые к эксплуатации стенды с Webmin

Осталось только установить пароль для пользователя root при помощи команды passwd, и стенды готовы. Переходим к деталям уязвимости.

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

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

Присоединяйся к сообществу «Xakep.ru»!

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

1 год

7690 р.

1 месяц

720 р.

Я уже участник «Xakep.ru»

Источник

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