Руководители инженерных подразделений все чаще полагаются на автоматизированные инструменты для защиты пайплайнов непрерывной интеграции (CI), оптимистично полагая, что код-ревью с участием ИИ отловит критические ошибки до попадания кода в прод. Однако эта уверенность быстро рушится, когда автоисправления начинают разрушать выстроенные шаблоны безопасности. Уязвимость, обнаруженная в публичном репозитории Snowflake, наглядно показывает, как автоматический коммит может создать критическую брешь, беспрепятственно прошедшую стандартные процессы ревью.

Анатомия уязвимости в CI/CD-пайплайне

В рамках программы раскрытия уязвимостей Snowflake на HackerOne исследовательская группа Wiz Research задействовала своего автономного атакующего агента Red Agent. ИИ-агент выявил критическую уязвимость в сценарии GitHub Actions в публичном репозитории `snowflakedb/snowflake-connector-net`. Брешь позволяла неаутентифицированным пользователям выполнять произвольные команды оболочки на раннере GitHub Actions — для этого было достаточно лишь создать публичный тикет с особым заголовком.

Уязвимый код попал в основную ветку через пулл-реквест #1218 с заголовком «SNOW-2069227: Update jira workflows». В сквош-коммите в качестве соавтора был указан «Copilot Autofix powered by AI». Данное изменение удалило существовавший в репозитории безопасный шаблон санитизации, который корректно передавал недоверенные заголовки через переменную `env:` и формировал полезную нагрузку JSON с помощью `jq`, заменив его на прямую подстановку строк.

«Copilot выступил соавтором, проверил объединенный пулл-реквест и изменения в коде, после чего одобрил их без замечаний, не заметив критических уязвимостей».

Этот воркфлоу запускался при каждом событии `issues: opened`, подставляя контролируемый атакующим заголовок тикета напрямую в шелл-скрипт через конструкцию `TITLE=$(echo '${{ github.event.issue.title }}' | sed...)`. Поскольку экранирование через `sed` происходило уже после раскрытия шаблона GitHub, злоумышленнику было достаточно вставить одинарную кавычку, чтобы выйти за пределы строки и выполнить произвольные команды оболочки.

Автономная эксплуатация и кража токенов

Интервал между атакой и ревью показал колоссальный разрыв в скорости автономных атакующих агентов по сравнению с ручной проверкой. Red Agent моментально зафиксировал уязвимость в воркфлоу `jira_issue.yml`, проэксплуатировал ее и извлек внутренний токен, предоставлявший доступ к корпоративному порталу Jira компании Snowflake. После ответственного раскрытия информации со стороны Wiz компания Snowflake оперативно исправила сценарий, отозвала скомпрометированные учетные данные и на основе логов аудита подтвердила, что за пятидневный период доступ к системе получали только исследователи Wiz.

Для технических директоров и руководителей по информационной безопасности этот инцидент служит наглядным предупреждением: автоисправления, принимаемые без глубокой многоуровневой проверки, создают опасные слепые зоны в корпоративных CI/CD-процессах. Автоматизированный инструмент, призванный снижать риски, сломал работающий механизм защиты, а ИИ-ревьюер не нашел в этом проблемы. Инженерным командам, внедряющим ИИ-ассистентов, необходимо ужесточать политики пайплайнов и применять непрерывную автономную верификацию, отказавшись от слепого доверия к сгенерированным пулл-реквестам.

Безопасность ИИКибербезопасностьИИ-агентыИИ-инструментыАвтоматизация