За секунду до
Сегодня, к счастью, без экшна: никаких жертв не было, всё заметили и починили вовремя, но случай всё равно занятный.
Ты почти наверняка слышал про Cloudflare. Оказывается, в их cdnjs была только совсем недавно исправленная RCE-уязвимость, которая могла привести к настоящей эпидемии supply chain-атак — проектом пользуется каждый восьмой сайт.
В чём суть? Если в cdnjs нет какой-то нужной библиотеки, её можно предложить на Гитхабе. В самом репозитории cdnjs есть скрипт-автообновлятор, тянущий новые версии библиотек по npm-путям, предоставленным их авторами.
Независимый исследователь присмотрелся к коду и понял, что автообновление запускается регулярно, плюс из-под юзера с write-правами. Кроме того, распаковщик архива с обновлениями написан на Go, в котором функция archive/tar сама по себе ничего не санитизирует.
Изучив всю эту картину, исследователь задумался о том, что будет, если в npm-версии предложенной библиотеки окажется эксплойт обхода каталога.
Залил тестовую библиотеку, попробовал, отошёл поужинать, вернулся и увидел, что всё сработало. Потянулся смотреть итоговый файл, чтобы отправить репорт в команду безопасности, а в файле, помимо прочего, ещё GITHUB_REPO_API_KEY репозитория cdnjs лежит. Получился изрядный оверкилл: исследователь случайно положил в тестовую библиотеку ссылку на /proc/self/environ.
Поскольку у cdnjs вся инфраструктура завязана на Гитхабе, в худшем из возможных миров где-то здесь могла начаться масштабная supply chain-атака, способная дотянуться до каждого восьмого сайта. Но мы всё-таки живём в лучшем, поэтому и эксплойт был исследовательским, и команда cdnjs со скоростью света отреагировала на то, что в их репозитории в открытом виде появился гитхабовский API-ключ. Ключ инвалидировали ещё до того, как исследователь успел отправить репорт.
Из разряда потенциального "за секунду до".