// статическая защита ИИ-агентов в CI

В вашем CI работает ИИ‑агент. Запустить его может чужая задача.

Вы встроили ИИ‑агента в GitHub Actions, чтобы разбирать задачи и ревьюить пул‑реквесты. Он работает на тексте, который может написать кто угодно, и при этом держит настоящие секреты. agentpipe находит эту цепочку раньше атакующего.

$pip install agentpipe-scan
Open source, MITСтатический анализ, только на чтениеНи одного эксплойта
agentpipe scan
$ agentpipe scan .
scanning .github/workflows … 3 files

 AWI-01 reachable · high
 untrusted trigger runs an agent with a secret sink
 .github/workflows/triage.yml:11

 AWI-02 reachable · high
 untrusted issue title interpolated into the prompt
 .github/workflows/triage.yml:18

 AWI-05 plausible · high
 agent runs with --dangerously-skip-permissions
 .github/workflows/triage.yml:24

4 findings · 4 high · 1 file
fix: agentpipe fix .  prove: agentpipe prove AWI-01
claude-code-actionCopilot workflowsagentic PR botsGitHub Actionsлюбой шаг с ИИ-агентом
// проблема

Одна открытая задача, и ваш пайплайн публикует за постороннего

Сценарий сборки срабатывает на задачу или пул‑реквест и подставляет заголовок задачи прямо в промпт агента. А это задание держит npm‑токен и права на публикацию. Теперь любой, кто открыл задачу, передаёт инструкции процессу, который может опубликовать ваш пакет или слить ваши ключи. Никто ничего не нажимал. Этот класс мы называем clinejection, и он встречается в реальных репозиториях.

чужая задача шаг с ИИ-агентом npm-токен публикация или утечка
// дашборд

Каждая открытая цепочка, по всем репозиториям, на одном дашборде

SaaS-приложение проверяет каждый пул‑реквест в реальном времени и записывает находки. Вы получаете детектор, вердикт, точный файл со строкой и динамику во времени.

agentpipe.agentoffense.com/dashboard
agentpipeAI-in-CI security dashboard
Live
auto-refresh 30s · 0.9.0
Open findings
4
High severity
4
Repositories
1
Scans run
1
Exposure by severity
4FINDINGS
4 high100%
0 medium0%
0 other0%
Scan activity (14 days)
Top detectors
AWI-05YOLO / skip-permissions on the agent in CI1
AWI-04Agent job can post as the bot (exfil channel)1
AWI-02Untrusted event field interpolated into the agent prompt1
AWI-01Untrusted trigger runs an agent with a secret sink1
Repositories
RepoFindingsStatus
cyberbobas/agentpipe44 HIGH
Живой дашборд боевого SaaS: открытые находки, разбивка по важности, топ детекторов и репозитории.
agentpipe.agentoffense.com/dashboard#findings
Findings & what to do
reachable = the full chain exists, fix it. adjacent = one piece present, review. auto-fix = agentpipe fix patches it for you.
HIGHREACHABLEAWI-01Untrusted trigger runs an agent with a dangerous sink
cyberbobas/agentpipe #3 · .github/workflows/vuln-demo.yml:9 · 09-01 19:14
HOW TO FIXMove the secret out of this job, or do not run the agent on an untrusted trigger.
Evidence
.github/workflows/vuln-demo.yml job `triage`: on=['issues'] agent=[anthropic-ai/claude-code-action@v1] sinks=['exfil:issues=write', 'perm:packages=write', 'secret:NPM_TOKEN', 'secrets.*']
Not proventhat the model obeys the issue/PR text, or that the token can publish
Prove itstaging: open an issue whose title is a harmless canary; watch logs and whether the sink fires
Twin incident: Clinejection (issue title → CI agent → npm token → publish)
HIGHREACHABLEAWI-02Untrusted GitHub event field is interpolated into the agent step
cyberbobas/agentpipe #3 · .github/workflows/vuln-demo.yml:9 · 09-01 19:14
HOW TO FIXDo not put the event field in the prompt; pass it via env and label it untrusted data.
Evidence
.github/workflows/vuln-demo.yml job `triage`: agent step anthropic-ai/claude-code-action@v1(with.prompt): github.event.issue.title
Not proventhe field lands in the model prompt after the action's own templating
Prove itinstrument the prompt or use a canary string in issue title vs body
Twin incident: Clinejection / GitLost (untrusted issue/PR text in the prompt)
В каждой находке есть вердикт, точный файл со строкой, одно изменение, которое это исправит, и реальный инцидент, с которым она связана.
// как работает

Три способа запустить один и тот же движок

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

1 // в терминале

CLI

Запустили команду, прочитали находки. На сервер ставить ничего не нужно. Хорошо для разовой проверки или чтобы попробовать.

pip install agentpipe-scan
agentpipe scan .
agentpipe local
2 // в вашем CI

GitHub Action

Добавляете один файл сборки. На каждый пул-реквест бот вешает один липкий комментарий и выгружает результаты во вкладку «Безопасность» (SARIF).

# .github/workflows/agentpipe.yml
uses: cyberbobas/agentpipe@v0
with:
 fail-on: high
 comment: true
для всей организации
3 // saas

SaaS-приложение

Ставите один раз на GitHub-организацию. Ни файлов сборки, ни сервера. Следит за каждым репозиторием, комментирует пул-реквесты и даёт дашборд.

  • Все репозитории, текущие и будущие
  • Комментарии в реальном времени
  • Общий дашборд и тренд
  • Орг-политика, которую репозиторий не ослабит
Установить приложение
// охват

Что SaaS-приложение умеет, а один CLI нет

CLI это фонарик, которым вы светите сами. SaaS-приложение это пожарная сигнализация, разведённая по всему зданию. Движок один, а охват совсем разный.

ЧтоCLIActionSaaS
Когда работаетпо командена каждый пул-реквест, в одном репона каждый пул-реквест, вся организация, автоматически
Настройкавручную каждый разфайл сборки в каждый репоодин клик на организацию
Охватодин репо, один прогонодин репокаждый репозиторий, текущие и будущие
Кто видит результаттолько вы, в терминалев пул-реквестев пул-реквесте и на общем дашборде
История и тренднетнетполная история и тренд во времени
Орг-политика, которую репо не ослабитнетпо репо, менять может любойда
Обслуживаниезапускаете самиподдерживаете файл сборкиноль, держим мы
Если коротко: CLI отвечает на вопрос «открыт ли этот репозиторий прямо сейчас, если я проверю». SaaS-приложение отвечает «открыто ли хоть что-то во всей организации, когда угодно», и следить за этим руками никому не нужно.
// как это устроено

Ставите один раз. Дальше оно работает само.

  1. Установка на организацию

    Выбираете репозитории или сразу все, включая будущие. Один клик, без конфиг-файлов.

  2. Открывается пул-реквест

    Кто-то открывает или обновляет пул-реквест в любом подключённом репозитории. GitHub уведомляет наш сервер по подписанному, проверенному вебхуку.

  3. Мы читаем файлы сборки

    Короткоживущий токен читает только файлы сборки ровно той версии, что в пул-реквесте. Мы не трогаем ваш исходный код и секреты.

  4. Движок работает

    Тот же статический движок прослеживает каждый путь от недоверенного триггера через агента к опасному действию, который добавляет этот пул-реквест.

  5. Один понятный комментарий

    В пул-реквесте появляется один комментарий: какие цепочки нашли и одно изменение, которое чинит каждую. Только по делу, без шума.

  6. Видно на дашборде

    Покрытие, что открыто по репозиториям, и тренд во времени. Доказательство, которое вы покажете аудитору.

// чем мы отличаемся

Не линтер. Не ограничитель.

Линтеры проверяют конфиг сборки. Сканеры кода проверяют код. Ограничители на входе модели (guardrails) проверяют промпт. Ни один из них статически не прослеживает в CI путь от недоверенного события через агента к вашему секрету. Это наша задача.

Не линтер и не сканер кода

zizmor и CodeQL ловят ошибки конфигурации и инъекции в коде. Мы прослеживаем саму связь: недоверенное событие доходит до шага с ИИ-агентом, а тот до секрета, записи или публикации.

Не ограничитель модели

Ограничители смотрят на промпт, который идёт в модель. Мы смотрим на действие, которое шаг модели совершает в CI. Чистый промпт проходит ограничитель, а потом агент читает токен и публикует. Это ловим мы.

Честно по построению

Каждая находка говорит, что доказано, что нет, и одно изменение, которое чинит. agentpipe prove подтверждает безобидной канарейкой, а не эксплойтом.

// цены

Бесплатно на время беты, с разумными лимитами

CLI и Action безлимитны и с открытым кодом, навсегда. SaaS-приложение бесплатно на время беты с разумными лимитами, чтобы оставаться быстрым для всех: сканы пул-реквестов, дашборд и покрытие всей организации включены. Нужна корпоративная политика или больше репозиториев? Напишите про ранний доступ.

Чего он не делает, намеренно. agentpipe показывает предпосылки, а не доказанный взлом. Он статически анализирует GitHub Actions и локальные конфиги агентов. Он не запускает ваш агент и не останавливает инъекцию промпта. Каждый отчёт заканчивается тем, чего скан не видит, и это ровно там, где начинается настоящий пентест.
// частые вопросы

Частые вопросы

Вы запускаете или храните мой код?
Нет. Это статический анализ. SaaS-приложение читает только файлы сборки в версии пул-реквеста и хранит находки (детектор, файл и строку), никогда ваш исходный код и никогда секреты.
Это правда бесплатно?
CLI и Action бесплатны и с открытым кодом навсегда (MIT). SaaS-приложение бесплатно на время беты с разумными лимитами.
Работает с Copilot, Claude и другими агентами?
Да. Он ловит сам приём: недоверенный триггер, шаг агента, опасное действие, независимо от того, какой у вас агент.
Он завалит мои пул-реквесты комментариями?
Нет. Один липкий комментарий, по умолчанию только достижимые находки высокой важности, и он молчит про уже накопленный долг (базовый режим). Из-за лишнего шума инструменты удаляют, поэтому по умолчанию он молчит.
Можно ли развернуть у себя?
Движок с открытым кодом (MIT), так что вы уже можете гонять его в своём CI без нашего сервера. Для крупного бизнеса планируем вариант с установкой на ваших серверах, которую поддерживаем мы. Если нужно, напишите нам.
// связаться

Напишите нам, ответим быстро

Ранний доступ к SaaS, вопросы по внедрению или корпоративная политика на весь парк репозиториев. Оставьте контакт, вернёмся в течение рабочего дня.




    // начать

    Найдите цепочку раньше атакующего

    Запустите сами бесплатным CLI, или поставьте SaaS-приложение один раз и дайте ему следить за каждым репозиторием, на каждом пул-реквесте, с дашбордом для всей команды.

    Безопасность связи с ИИ-агентом в вашем CI. Часть набора Agentoffense.