GitHub добавил в Dependabot механизм так называемого «охлаждения» — cooldown. Теперь бот не бросается устанавливать свежий пакет сразу после его публикации, а выжидает минимум три дня. Задумка простая: за это время большинство отравленных версий успевают всплыть и получить бан от мейнтейнеров или площадки распространения.
Настраивается всё через привычный конфигурационный файл dependabot.yml, где появился параметр cooldown. Разработчики могут подогнать длительность паузы под свой проект — кому-то хватит трёх дней по умолчанию, кто-то захочет растянуть окно ожидания подольше, особенно если проект тянет зависимости из не самых проверенных источников.
Важная деталь: пауза касается только обычных обновлений версий — тех, что поддерживают проект в актуальном состоянии. Security-патчи она не трогает вообще. Если Dependabot видит уязвимость, он всё равно моментально шлёт алерт и открывает pull request с исправленной версией без всякой задержки. Логика понятна — тянуть с закрытием дырки в безопасности ради гипотетической защиты от другой атаки было бы странно.
Почему именно три дня, а не неделя или сутки? В GitHub это называют «зоной Голдилокс» — не слишком коротко, не слишком долго. В компании прямо написали: «Три дня как значение по умолчанию балансируют между двумя целями: этого времени достаточно, чтобы выйти за окно, в котором происходит большинство подобных атак, и при этом зависимости не тормозятся дольше необходимого».
Проблема, которую пытаются решить, известна давно. Злоумышленники подменяют популярный пакет на троянизированную версию, публикуют её в реестре, и десятки, а то и сотни проектов вниз по цепочке успевают её подтянуть автоматическими обновлениями. Потом вредоносную версию убирают из реестра — но дело уже сделано, заражённый код разошёлся куда шире, чем если бы обновления шли не мгновенно.
При этом в GitHub честно признают ограниченность метода. Цитата из их же материалов: «Cooldown создан под конкретный паттерн — вредоносная версия публикуется, распространяется и быстро обнаруживается. Он почти бесполезен против атак с более длинной игрой, включая закладки в релизах, оставленные в спящем режиме, саботаж мейнтейнера и компрометацию систем сборки». То есть если атакующий терпелив и не спешит активировать вредоносный код, трёхдневная пауза его не остановит.
Именно поэтому GitHub называет cooldown лишь одним слоем защиты, а не решением проблемы целиком. Дополнительно рекомендуют фиксировать зависимости через lock-файлы, отключать выполнение install-скриптов в CI, ограничивать права токенов в пайплайнах сборки и всё-таки просматривать обновления перед мержем, а не доверять автоматике полностью.
Похожие механизмы за последний год появились и в других экосистемах — практика явно назрела. Cooldown-паузы уже внедрили в Visual Studio Code от Microsoft, в Ruby, в Bun, а также в менеджерах пакетов npm, pnpm и Yarn. Индустрия постепенно приходит к общему пониманию: мгновенное подхватывание новых версий — не всегда добро, особенно для инфраструктурного кода, от которого зависят тысячи проектов.
Параллельно движется и Python Package Index — команда PyPI готовит собственную меру защиты. Планируется блокировать мейнтейнерам возможность добавлять новые файлы в уже опубликованный релиз пакета через 14 дней после публикации. Цель формулируется так: «Эта мера призвана помешать атакующим, скомпрометировавшим токены публикации или workflow-процессы, отравлять старые, доверенные релизы». Механизм отличается от cooldown в GitHub, но бьёт по смежной проблеме — попыткам незаметно подменить содержимое релиза, который уже прошёл проверку временем.
GitHub, к слову, с 2018 года принадлежит Microsoft, и Dependabot — это встроенный в платформу инструмент автоматического управления зависимостями, который изначально появился как отдельный сервис задолго до покупки Microsoft самой платформы GitHub.
Настраивается всё через привычный конфигурационный файл dependabot.yml, где появился параметр cooldown. Разработчики могут подогнать длительность паузы под свой проект — кому-то хватит трёх дней по умолчанию, кто-то захочет растянуть окно ожидания подольше, особенно если проект тянет зависимости из не самых проверенных источников.
Важная деталь: пауза касается только обычных обновлений версий — тех, что поддерживают проект в актуальном состоянии. Security-патчи она не трогает вообще. Если Dependabot видит уязвимость, он всё равно моментально шлёт алерт и открывает pull request с исправленной версией без всякой задержки. Логика понятна — тянуть с закрытием дырки в безопасности ради гипотетической защиты от другой атаки было бы странно.
Почему именно три дня, а не неделя или сутки? В GitHub это называют «зоной Голдилокс» — не слишком коротко, не слишком долго. В компании прямо написали: «Три дня как значение по умолчанию балансируют между двумя целями: этого времени достаточно, чтобы выйти за окно, в котором происходит большинство подобных атак, и при этом зависимости не тормозятся дольше необходимого».
Проблема, которую пытаются решить, известна давно. Злоумышленники подменяют популярный пакет на троянизированную версию, публикуют её в реестре, и десятки, а то и сотни проектов вниз по цепочке успевают её подтянуть автоматическими обновлениями. Потом вредоносную версию убирают из реестра — но дело уже сделано, заражённый код разошёлся куда шире, чем если бы обновления шли не мгновенно.
При этом в GitHub честно признают ограниченность метода. Цитата из их же материалов: «Cooldown создан под конкретный паттерн — вредоносная версия публикуется, распространяется и быстро обнаруживается. Он почти бесполезен против атак с более длинной игрой, включая закладки в релизах, оставленные в спящем режиме, саботаж мейнтейнера и компрометацию систем сборки». То есть если атакующий терпелив и не спешит активировать вредоносный код, трёхдневная пауза его не остановит.
Именно поэтому GitHub называет cooldown лишь одним слоем защиты, а не решением проблемы целиком. Дополнительно рекомендуют фиксировать зависимости через lock-файлы, отключать выполнение install-скриптов в CI, ограничивать права токенов в пайплайнах сборки и всё-таки просматривать обновления перед мержем, а не доверять автоматике полностью.
Похожие механизмы за последний год появились и в других экосистемах — практика явно назрела. Cooldown-паузы уже внедрили в Visual Studio Code от Microsoft, в Ruby, в Bun, а также в менеджерах пакетов npm, pnpm и Yarn. Индустрия постепенно приходит к общему пониманию: мгновенное подхватывание новых версий — не всегда добро, особенно для инфраструктурного кода, от которого зависят тысячи проектов.
Параллельно движется и Python Package Index — команда PyPI готовит собственную меру защиты. Планируется блокировать мейнтейнерам возможность добавлять новые файлы в уже опубликованный релиз пакета через 14 дней после публикации. Цель формулируется так: «Эта мера призвана помешать атакующим, скомпрометировавшим токены публикации или workflow-процессы, отравлять старые, доверенные релизы». Механизм отличается от cooldown в GitHub, но бьёт по смежной проблеме — попыткам незаметно подменить содержимое релиза, который уже прошёл проверку временем.
GitHub, к слову, с 2018 года принадлежит Microsoft, и Dependabot — это встроенный в платформу инструмент автоматического управления зависимостями, который изначально появился как отдельный сервис задолго до покупки Microsoft самой платформы GitHub.