Skip to content
KitploitKITPLOIT
ИнструментыЭксплойтыБлог
Log in
Отправить
ИнструментыЭксплойтыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

ЛентыКонтактыКонфиденциальность© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
agentic-workflow-injection — Воспроизводимые уязвимые и исправленные фикстуры GitHub Actions для инъекций в агентные рабочие процессы (CVE-2026-44246) с измеренным покрытием детекторов и рекомендациями по устранению. | Kitploit
Инструменты/GitHubGitHub/sushant-me/agentic-workflow-injection
Статический анализСканеры уязвимостейАнализ уязвимостейDevSecOpsСтатьи и ИсследованияОбучение и ОбразованиеБезопасность ИИ
GitHubsushant-me/agentic-workflow-injection

agentic-workflow-injection

Воспроизводимые уязвимые и исправленные фикстуры GitHub Actions для инъекций в агентные рабочие процессы (CVE-2026-44246) с измеренным покрытием детекторов и рекомендациями по устранению.

Репозиторий
1920 дней назадЕщё не проверено

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

Инъекция в агентный рабочий процесс: фикстуры и сравнение покрытия

Воспроизводимые уязвимые/исправленные фикстуры для класса ошибок, опубликованного как CVE-2026-44246 (nnU-Net, инъекция в агентный рабочий процесс, CVSS 7.2, CWE-1427), а также измеренный вывод трёх детекторов на них.

Он существует потому, что не с чем было тестировать детектор. Написание правила для этого класса означает написание фикстуры вручную и надежду на её точность; опубликованные ревизии были доступны только при знании, на какой коммит смотреть, что и оказалось самой интересной частью.

Класс

Рабочий процесс GitHub Actions передаёт недоверенный текст ИИ-агенту, у которого есть учётные данные репозитория.

Четыре условия, все необходимые:

  1. Недоверенный триггер. issues, issue_comment, pull_request_review — события, текст которых может создать любой, у кого есть учётная запись GitHub.
  2. Право записи у задания. issues: write, contents: write и так далее.
  3. Отказ от собственной проверки актора в действии. claude-code-action и codex-action отклоняют актора запуска без права записи, если только входной параметр (allowed_non_write_users, allow-users) явно не разрешит его. Без этого параметра недоверенный автор никогда не достигает агента, и рабочий процесс является безопасной конфигурацией, а не этой.
  4. Текст, достигающий агента. Либо интерполированный в рабочий процесс (${{ github.event.issue.body }} внутри prompt:), либо полученный во время выполнения (gh issue view) с токеном, который передаёт задание.

Это не инъекция шаблона. Ничего не вычисляется как shell; полезная нагрузка — это проза, а интерпретатор — модель. Именно поэтому обычный совет — заключайте переменные в кавычки, не используйте eval — не применим, и поэтому исправление ниже касается того, чего агент может достичь, а не экранирования ввода.

Часть, которую стоит знать: коммит исправления — это не исправление

nnU-Net усилил этот рабочий процесс в двух коммитах, и детектор, который рассматривает «до» и «после» как бинарные состояния, ошибается на среднем.

ревизиякоммитдата--allowedTools агентавердикт
уязвимая94300b49e7162026-04-13gh issue comment, gh issue editдостижимая запись
«исправление»4e4770b0b0e62026-04-24только gh issue comment; маркировка перенесена в скрипт-обёрткувсё ещё достижимая запись
поздняя11bd8746fc062026-04-27ни то, ни другое; более поздний шаг публикует из файла, который пишет агентнедостижимо

Коммит, который все назвали бы исправлением — его сообщение «hardened issue and PR agents» — удалил gh issue edit и направил метки через .github/scripts/safe-label.sh, но оставил Bash(gh issue comment:*) у агента. Агента всё ещё можно было склонить к комментированию, а шаблон разрешённого списка gh issue comment:* не ограничен триггерным issue, поэтому цель выбирала модель. Только третий коммит закрыл это: теперь агент пишет /tmp/issue-comment.md, а более поздний, не-агентный шаг публикует его с ISSUE: ${{ github.event.issue.number }}, взятым из события.

Отсюда следуют две вещи, и именно поэтому этот репозиторий — не просто два файла:

«Исправлено» — это утверждение о ревизии, а не о версии. v2.4.1 упоминается как исправленный релиз, но его .github/workflows/ содержит только codespell.yml — агентных рабочих процессов в этом теге вообще нет. Вы не можете проверить исправление по тегу; нужно закрепить коммит.

Блок permissions никогда не меняется. issues: write присутствует и корректен во всех трёх ревизиях, включая последнюю, потому что он нужен более позднему шагу. Детектор, который опирается только на permissions, не может отделить ревизию 1 от ревизии 3. Их разделяет то, что может вызвать агент.

Измеренное покрытие

Три детектора, запущенные на обеих фикстурах и всех трёх реальных ревизиях. Полный сырой вывод и версии инструментов в results.md.

ревизияagentbound 0.1.3sisakulint v0.3.7zizmor 1.30.1
1-vulnerableHIGH write-scope, HIGH untrusted-contentai-action-prompt-injection—
2-fix-commitHIGH write-scope, CRITICAL author-association— (только generic)—
3-laterLOW write-scope, CRITICAL author-associationai-action-excessive-tools, ai-action-execution-order—

Ни один детектор здесь не является просто «неправильным» — они отвечают на разные вопросы:

  • zizmor — это универсальный аудитор Actions. Он сообщает о гигиене закрепления действий и сохранения учётных данных одинаково на всех трёх ревизиях. Вне области для этого класса по замыслу, и включён потому, что «известный линтер был чист на уязвимом файле» легко принять за чистое заключение о здоровье.
  • sisakulint имеет специально созданные правила для ИИ и является единственным инструментом здесь, который называет собственный механизм CVE: ai-action-prompt-injection срабатывает на уязвимой ревизии, где тело issue интерполируется в prompt:, и перестаёт срабатывать, как только интерполяция исчезает. Верно. Его находки на поздней ревизии стоит прочитать, прежде чем действовать по ним — ai-action-excessive-tools отмечает Write, который этот рабочий процесс использует намеренно, чтобы записать файл, который публикует более поздний шаг; а ai-action-execution-order хочет, чтобы агент был последним, чего этот дизайн как раз избегает, поскольку привилегированные шаги идут после завершения хода модели.
  • agentbound — единственный инструмент, который отделяет ревизию 2 от ревизии 3, читая разрешённый список инструментов агента, а не permissions задания. Его находка ci-agent-missing-author-association сообщается как critical на поздней ревизии, и его собственный README описывает это как чрезмерно строгое, а не ложное: auto-triage предназначен быть достижимым для кого угодно.

У каждого инструмента здесь есть находка, которую он сообщает на ревизии, автор которой уже рассуждал об этом самом условии. Это нормальное состояние эвристики, и причина, по которой таблица покрытия полезнее столбца pass/fail.

Использование

git clone https://github.com/sushant-me/agentic-workflow-injection
cd agentic-workflow-injection

bash scripts/fetch-revisions.sh   # три реальные ревизии, закреплённые по SHA
bash scripts/benchmark.sh         # запускает каждый установленный детектор

benchmark.sh сообщает об отсутствующем детекторе как об отсутствующем, а не пропускает его молча, потому что таблица покрытия, которая тихо опускает инструмент, ничего о нём не доказывает.

Фикстуры — это сокращённая форма, написанная для этого репозитория и лицензированная под MIT, как и всё остальное. Они механизм-точные, а не копии: fixtures/vulnerable.yml содержит четыре условия и ничего больше, а fixtures/fixed.yml — тот же файл с шестью изменениями, которые имеют значение, каждое аннотировано. Если вы добавляете правило, эти два файла — минимальные входные данные, которые оно должно обработать правильно.

Две особенности интерфейса, обрабатываемые в скрипте, но о которых стоит знать:

  • sisakulint не анализирует файл вне git-репозитория. При передаче такого файла он печатает not found и завершается с кодом 3. Без присмотра это выглядит идентично чистому сканированию.
  • JSON path у agentbound — это basename, поэтому сканирование каталога по файлам с одинаковым именем неоднозначно.

Исправление

Обнаружение — это лёгкая половина. docs/mitigations.md охватывает другую половину: как ограничить полномочия агента, со слоями, ранжированными по одному вопросу — зависит ли этот контроль от того, что модель решит подчиниться?

Скачать инструмент