Пару месяцев назад была обнаружена уязвимость, присущая в основном большим интернет-проектам (вроде Рамблера, Мейла, Яндекса, Оперы и пр.). Исследователи (2Товарища и Антон Исайкин) смогли получить доступ к файловым структурам известнейших сайтов (в общей сложности 3320 сайтов) и в ряде случаев их полные исходные коды.
Проблема связана с системой контроля версий SVN. SVN является продвинутым средством для организации совместной разработки десятков, а то и сотен разработчиков. В силу особенностей архитектуры, SVN хранит в каждой директории проекта свои метафайлы, сложенные в скрытую директорию .svn. В одном из файлов под названием entries находится список всех файлов и директорий, расположенных в той же папке, что и .svn. Так же там находится информация о расположении репозитория, размере файлов, даты их изменения и логины пользователей, работающих над проектом. Таким образом, если проект разрабатывается с помощью SVN, то заглянув по адресу draftcopy.ru/.svn/entries можно увидеть файловую структуру корня проекта с авторами, последними изменениями, ссылкой на основную ветку репозитория и т.п.
Но можно пойти и далее. В той же папке .svn находится директория text-base, в которой лежат последние версии всех файлов, находящихся в репозитории. Картину дополняет так же и то, что файлы имеют не стандартное расширение (например .php), которое позволяет их сразу отправить на интерпретатор, а дополнительное расширение .svn-base, благодаря которому файл отдается запросившему его человеку в виде исходного кода.
draftcopy.ru/.svn/text-base/index.php.svn-base
Исследователи отмечают, что описанная картина является идеальной и хоть она и была таковой в большинстве случаев, все же большой процент исходных кодов не удалось получить по тем или иным причинам.
Осознав, что обнаруженная уязвимость присуща большинству проектов за последние девять лет, исследователи решили полностью просканировать рунет и получили интересную статистику.
В результате было просканировано 2253388 доменов, из них уязвимыми оказались 3320. Прежде чем публиковать открыто информацию об уязвимости, специалисты предупредили всех пострадавших. В первую очередь письма были разосланы гигантам (yandex.ru, rambler.ru, mail.ru, opera.com, rbk.ru, 003.ru, bolero.ru, habrahabr.ru, итого 19 адресов), а затем,письма получили остальные 3000+ сайтов.
Защита от уязвимости
Уязвимость можно обойти несколькими путями. Путь в лоб — запретить обращаться к метадиректориям SVN по 80-ому порту, т.е. средствами вебсервера.
Решение для nginx
location ~ /.svn/ {
deny all;
}
Глобальных локейшенов в nginx`е нет, поэтому прийдется подписывать для каждой server области. Чтобы правило имело силу, необходимо загружать его до других локейшенов с регулярным выражением. Универсальный способ — первым локейшеном.
Решение для Apache
Order allow,deny Deny from all Satisfy All
Тут немного проще, надо дописать это в httpd.conf и на всех проектах под управлением apache чтение из директории .svn будет недоступно.
Решение средствами SVN
Защита от уязвимости средствами вебсервера — лечение болезни. Любой доктор скажет, что профилактика проще, легче и менее затратней, чем лечение. Поэтому лучшим решение будет отсутствие этих самых метадиректорий в корне проекта. Добиться этого можно средствами svn export из основной ветки.
источник