«Дыра» в Microsoft Azure годами раскрывала исходный код приложений, написанных на PHP, Python и Ruby
Эксперты компании Wiz обнаружили, что при определённых методах развёртывания веб-приложений в Azure App Service их исходный код становится общедоступным.
С 2017 года
В течение четырёх лет в Microsoft Azure App Service сохранялась ошибка, которая позволяла просматривать исходный код развёрнутых там приложений. Эксперты компании Wiz, обнаружившие этот «баг», полагают, что хакеры уже вполне могли эксплуатировать его.
Azure App Services (или Azure Web Apps) - это облачная платформа для хостинга веб-сайтов и приложений. Эксперты Wiz указывают, что уязвимость проявляется только в тех случаях, когда веб-приложения написаны на PHP, Python, Ruby или Node, и развёрнуты в облаке с использованием опции Local Git, которая позволяет синхронизировать локальный Git-репозиторий с контейнером Azure App Service.
Проблема заключается в том, что при использовании опции Local Git содержимое каталога .git, в котором хранится исходный код, также оказывается в облачном контейнере, и доступ к нему могут получить все желающие (/home/site/wwwroot).
Попытки исправить
В Microsoft для исправления этой проблемы добавили к каталогу .git файл web.config, который ограничивал этот доступ. Проблема в том, что только Microsoft IIS понимает файлы web.config. В итоге, если используется C# или ASP.NET, приложение развёртывается с помощью IIS, и доступ к .git оказывается надлежащим образом ограниченным.
Но если приложение написано на PHP, Ruby, Python или Node, то оно развёртывается с помощью других веб-серверов (Apache, Nginx, Flask и т.д.), которые не учитывают настройки файлов web.config. Что означает, что исходный код приложения остаётся общедоступным.
Мало того, оказалось, что в файлах web.config содержалась ошибка (незакрытый тэг), которая препятствовала его корректному считыванию со стороны IIS; впрочем, в итоге доступ к .git всё равно блокировался, так что свою задачу файл выполнял.
Правда, позднее выяснилось, что пользователи, применявшие другие средства выгрузки локальных ресурсов, также рисковали своими исходниками: если файл создавался или модифицировался в контейнере Azure App Service с использованием FTP, Web Deploy или SSH до развёртывания Git, сервис работал в режиме «in-place deployment» («развёртывание на месте»), в котором развёртывание Git производится только в открытых, общедоступных каталогах.
В результате исходный код оказывался общедоступным для всех приложений, написанных на PHP, Node, Ruby и Python, развёрнутых после сентября 2017 г. с использованием Local Git в сервисе Azure App Service с номинальными настройками.
Также уязвимы приложения, написанные на перечисленных языках, которые были развёрнуты с сентября 2017 года с использованием любых других Git-ресурсов после того, как какой-либо файл был создан или модифицирован в контейнере приложения напрямую.
Только приложения, развёрнутые с помощью IIS, лишены этой уязвимости.
Что делать?
Между 5 и 17 декабря 2021 г. Microsoft рассылала пользователям своего сервиса сообщения о том, как проверить наличие проблемы и попытаться нейтрализовать её. В сущности, всё сводится к отключению режима in-place deployment и переносу каталога .git в более безопасное место.
«Несанкционированное раскрытие исходного кода проприетарных веб-приложений может привести к большим неприятностям для их разработчиков, - говорит Анастасия Мельникова, директор по информационной безопасности компании SEQ. - Помимо того, что это грозит утечкой интеллектуальной собственности само по себе, исходный код довольно часто содержит всевозможные артефакты разработки, такие как предустановленные пароли, или ошибки, которыми злоумышленники могут воспользоваться при атаках. Масштаб проблемы тем более велик, что хакеры разного толка постоянно ведут сканирование сетевых ресурсов на предмет общедоступных Git-репозиториев. Скорее всего, доступ к исходникам всех уязвимых веб-приложений, о которых пишут эксперты Wiz, имели гораздо большее количество людей, чем предполагали разработчики».
Специалисты Wiz поставили следующий эксперимент: они развернули уязвимое приложение на Azure App Service и подключили его к неиспользуемому домену, чтобы проверить, попытается ли кто-нибудь произвести эксплуатацию уязвимости. Долго ждать не пришлось, через четыре дня к каталогу .git посыпались многочисленные запросы от неизвестных источников. Никаких серьёзных проблем с эксплуатации уязвимости злоумышленники не испытывали.