В сети доставки контента Cloudflare выявлена
и исправлена уязвимость, которая допускала полную компрометацию и самой
системы, и миллионов сайтов, ее использующих.
Обход каталога
Более 12% всех сайтов в
мире оказались под угрозой из-за критической уязвимости в сети доставки
контента (CDN)
компании Cloudflare. Сеть CDNJS содержит более 4 тыс. библиотек Java Script и CSS, хостящихся на GitHub; эти библиотеки обслуживают миллионы веб-сайтов.
Выявленная уязвимость
относится к типу Path Traversal (выход за пределы назначенного каталога).
Благодаря ей создается также возможность запуска удаленного кода.
Исследователь по
безопасности с ником RyotaK занимался
изучением так называемых атак на цепочку поставок — т. е. атак с использованием
сторонних ресурсов, пользующихся доверием потенциальной жертвы. Исследователю
удалось обнаружить способ полной компрометации сети CDNJS.
Репозиторий CDNJS в GitHub позволяет разработчикам запрашивать добавление
произвольных библиотек. Если такие библиотеки добавляются, то их новые версии
будут автоматически подтягиваться из смежного npm-репозитория, владельцем которого является тот же
разработчик.
Эксплойт в npm
RyotaK обнаружил возможность прятать в npm-версии библиотеки экплойты к уязвимости Path Traversal. Учитывая, что
пакеты npm
публикуются в виде архивов .tar.gz, спрятать в них такие эксплойты несложно.
Опубликовав тестовую
библиотеку hey-sven на CDNJS через GitHub, RyotaK начал выпускать «новые версии» через npm. Отслеживающие обновление
боты CDNJS
подгрузили их в основной репозиторий, несмотря на наличие в них эксплойта — в
виде скрипта Bash со странно выглядящими путями адресации. Фактически он применил метод,
описанный еще в 2018 г., когда ошибка обхода каталога позволяет записывать
произвольные файлы из архива по произвольно указанным адресам, и в том числе
перезаписывать уже существующие там файлы новыми (потенциально вредоносными)
версиями.
Естественно, в планы RyotaK не входила случайная
перезапись уже существующих скриптов, так что он применил уязвимость Symlink Race, позволяющую прочитывать
содержимое файла, который может быть перезаписан. Для этого используются так называемые
«символические» ссылки.
Поскольку Git поддерживает
символические ссылки по умолчанию, появляется возможность прочтения
произвольных файлов на сервере обновлений библиотек CDNJS, просто посредством добавления символической
ссылки в репозиторий Git.
Информацию об уязвимости
RyotaK передал в Cloudflare 6 апреля 2021 г. Никаких сведений о попытках злоумышленников
эксплуатировать ее нет.
Секретные ключи
К удивлению
исследователя, с помощью его тестового эксплойта удалось получить доступ к
секретной информации, в частности ключи Github_Repo_Api_Keyи Workers_Kv_Api_Token оказались включены в скрипты, которые в ответ на
запрос выдавал CDNJS.
Ключ Github_Repo_Api_Key — это API, который предоставляет разрешения на запись
данных, так что потенциальный злоумышленник получает возможность вносить
изменения в любую библиотеку CDNJS или даже вносить изменения в сайт cdnjs.com.
Workers_Kv_Api_Token позволяет изменять библиотеки, присутствующие в кэше Cloudflare Workers. По словам RyotaK, эти ключи позволяют делать в сети доставки
контента CDNJS
все, что угодно.
Специалисты CDNJS весьма оперативно
взялись вносить изменения. Первые промежуточные исправления, устранявшие
проблему с символическими ссылками, вышли уже через несколько часов.
Позднее пришлось выкатить
целую серию других исправлений, нацеленных на предотвращение атаки, описанной RyotaK. В первую очередь,
повышена защищенность ботов, подгружащих новые версии, и ограничена часть их
функциональности, которая может представлять угрозу.
«Компрометация крупной
сети доставки контента ставит под критическую угрозу миллионы сайтов, — говорит
Дмитрий Кирюхин, эксперт по
информационной безопасности компании SEC Consult Services. — Например, в 2019 г. тысячи онлайн-магазинов
стали жертвами успешной атаки на облачную CDN-платформу Volusion, через которую злоумышленникам удалось
распространить скрипт, крадущий информацию о платежных картах. В июне 2021 г.
выход из строя CDN-сети Fastly сделал недоступными на продолжительное время такие сайты как Twitch, Pinterest, Reddit, сетевые издания BBC, New York Times, Financial Times, The Guardian и GitHub. CDNJS обслуживает миллионы сайтов самого разного толка,
и в случае успешной атаки угроза имела бы катастрофические масштабы. Оперативность
реакции Cloudflare достойна похвалы, однако других вариантов действий у них и не было».