В популярной панели управления сервером Webmin обнаружилась уязвимость, которая больше всего похожа на оставленную кем-то закладку. Атакующий в результате может выполнять произвольный код на целевой системе с правами суперпользователя. Давай посмотрим, как это работает, в чем заключается проблема и как с ней бороться.
Webmin полностью написан на Perl, без использования нестандартных модулей. Он состоит из простого веб-сервера и нескольких скриптов — они связывают команды, обеспечивающие исполнение команд, которые пользователь отдает в веб-интерфейсе, на уровне операционной системы и внешних программ. Через веб-админку можно создавать новые учетные записи пользователей, почтовые ящики, изменять настройки служб и разных сервисов и все в таком духе.
Уязвимость находится в модуле восстановления пароля. Манипулируя параметром old
в скрипте password_change.cgi
, атакующий может выполнять произвольный код на целевой системе с правами суперпользователя, что наводит на мысли об умышленном характере этого бага. Что еще подозрительнее — проблема присутствует только в готовых сборках дистрибутива с SourceForge, а в исходниках на GitHub ее нет.
Уязвимость получила идентификатор 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
у меня возникла проблема (на скриншоте ниже).
Следующие команды помогают ее устранить:
$ 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.
$ service webmin start
Версия 1.890 доступна на дефолтном порте 10000, а 1.920 — на 20000.
Осталось только установить пароль для пользователя root
при помощи команды passwd
, и стенды готовы. Переходим к деталям уязвимости.
Материалы из последних выпусков становятся доступны по отдельности только через два месяца после публикации. Чтобы продолжить чтение, необходимо стать участником сообщества «Xakep.ru».
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», увеличит личную накопительную скидку и позволит накапливать профессиональный рейтинг Xakep Score! Подробнее
1 год7690 р. |
1 месяц720 р. |
Я уже участник «Xakep.ru»
Читайте также
Последние новости