ИИ сломал код Snowflake — другой ИИ его взломал
GitHub Copilot Autofix внёс уязвимость в репозиторий Snowflake, а автономный агент Wiz её нашёл и эксплуатировал — получив доступ к внутреннему Jira.
ИИ «починил» — и сломал
Автономный AI-агент Wiz Research под названием Red Agent обнаружил критическую уязвимость в публичном GitHub-репозитории Snowflake. Брешь была внесена коммитом GitHub Copilot Autofix и позволяла выполнять произвольные команды через заголовок GitHub-issue. Wiz эксплуатировал её и добрался до внутреннего Jira компании всего за пять дней.
Как это произошло
Уязвимый коммит
Инъекционный паттерн появился 18 июня 2026 года в коммите 4a1b8ce (PR #1218: «SNOW-2069227: Update jira workflows»), соавтором которого значится Copilot Autofix.
GitHub Copilot Autofix убрал существующий безопасный шаблон обработки входных данных и заменил его прямым раскрытием строки в shell-скрипте. Конкретно — вместо передачи заголовка issue через переменную окружения (env:) код перестал использовать безопасную схему с jq и стал напрямую подставлять ${{ github.event.issue.title }} в блок run:.
# Уязвимый паттерн, внесённый Copilot Autofix
run: |
TITLE=$(echo '${{ github.event.issue.title }}' | sed 's/"/"/g')
«ИИ-коммит с “автоисправлением” сам создал вектор для инъекции.» — Wiz Research
Обход защитного условия
Workflow содержал if:-условие, которое выглядело как защита, но на issues-событиях github.event.pull_request всегда равен null — условие фактически не работало.
Эксплуатация Red Agent
Red Agent — автономный ИИ-атакующий Wiz для offensive security — нашёл уязвимость в GitHub Actions во время планового сканирования публичных репозиториев 23 июня.
В ходе инцидента Red Agent использовал уязвимость script injection в snowflakedb/snowflake-connector-net: любой неаутентифицированный пользователь мог выполнить произвольные команды в GitHub Actions runner, открыв issue со специально сформированным заголовком.
Исследователи получили out-of-band callback от GitHub Actions runner и завладели Jira API-токеном workflow. Токен принадлежал qa@snowflake.net и давал доступ на чтение к проектам по инженерии, security compliance и bug bounty на snowflakecomputing.atlassian.net.
sequenceDiagram
participant CA as Copilot Autofix
participant GH as GitHub (Snowflake repo)
participant RA as Wiz Red Agent
participant JI as Snowflake Jira
CA->>GH: 18 июня: PR #1218 — уязвимый коммит
Note over GH: jira_issue.yml: ${{ github.event.issue.title }} → run: block
RA->>GH: 23 июня: открывает issue со специальным заголовком
GH->>RA: out-of-band callback с Jira API-токеном
RA->>JI: Чтение инженерных и security-проектов
RA->>GH: Responsible disclosure через HackerOne
GH->>GH: Патч в тот же день — PR #1402
Хронология инцидента
| Дата | Событие |
|---|---|
| 18 июня 2026 | Уязвимость появляется с коммитом PR #1218 (соавтор — Copilot Autofix) |
| 23 июня 2026 | Wiz Red Agent находит, эксплуатирует и сообщает о проблеме через HackerOne |
| 23 июня 2026 | Snowflake выпускает патч в тот же день (PR #1402) |
| 24 июня 2026 | Ротация скомпрометированного Jira API-токена |
| 25 июля 2026 | Дедлайн публичного раскрытия по политике Snowflake (30 дней) |
| 18 августа 2026 | Публичная публикация отчёта Wiz |
18 июня уязвимость стала активной — PR #1218 был смерджен. 23 июня Wiz идентифицировал, эксплуатировал и сообщил об уязвимости через HackerOne. В тот же день Snowflake выпустил патч, восстановив безопасный паттерн env: + jq --arg.
Спорный момент: кто виноват?
Явный коммит Copilot (6d0e2fa) менял jira_close.yml, тогда как уязвимый рефакторинг jira_issue.yml числится за пользователем sfc-gh-hpathak. Оба изменения вошли в squash merge коммит 4a1b8ce от 18 июня, в соавторах которого и фигурирует Copilot Autofix. История коммитов подтверждает участие Copilot в PR #1218, но не авторство уязвимых строк.
Snowflake заявила, что «расследование не выявило признаков несанкционированного доступа».
Как защититься
- Не вставляйте
${{ github.event.issue.title }}и другие данные из events напрямую в блокrun:— только черезenv:переменные - Используйте инструмент zizmor для статического анализа workflows на template injection
- Относитесь к AI-сгенерированным коммитам как к внешним pull request: обязательный code review
- Аудитируйте CI/CD pipelines так же строго, как и основной код приложения
Любой workflow, триггерящийся на issues, issue_comment, pull_request_target или discussion и подставляющий ${{ github.event.* }} в блок run:, эксплуатируется тем же способом.
GitHub документировал этот класс уязвимостей ещё в июле 2025 года, предупреждая о раскрытии данных из issues в блоках run: и рекомендуя промежуточные переменные окружения.
Значение для отрасли
Инцидент подчёркивает растущую способность ИИ находить и эксплуатировать уязвимости без участия человека. Случай наглядно показывает: один ИИ-агент нашёл и эксплуатировал уязвимость в коде, которую пропустил другой ИИ-агент.
Эксперты предупреждают: AI-assisted разработка расширяет поверхность атаки, делая человеческий надзор и проактивное AI-сканирование уязвимостей обязательными — мы вступаем в эпоху «AI vs AI».