Зеленият пайплайн не означава управляван такъв, а агентното програмиране (agentic coding) увеличава разликата по-бързо, отколколкото прегледите на код могат да я затворят.

От Шейн Уардън, главен архитект в ActiveState

През юни 2026 г. изследователи от Novee Security разкриха клас слабости в CI/CD процесите, които нарекоха Cordyceps. Те сканираха приблизително 30 000 хранилища с голямо въздействие в екосистемите на npm, PyPI, crates.io и Go, като маркираха 654 и потвърдиха повече от 300 като напълно експлоатируеми.

Засегнатият инструментариум за компилиране включваше проекти, публикувани от Microsoft, Google, Apache, Cloudflare и Python Software Foundation, а изискването за достъп на атакуващия е просто безплатен акаунт в GitHub. Без членство в организация, без повишени привилегии.

Всеки един от тези пайплайни беше „зелен“. Скенерите работеха, проверките преминаваха успешно и таблата отчитаха изправни резултати през цялото време, докато уязвимостта съществуваше. Скенерите просто никога не са били създадени, за да откриват тази опасност.

Уязвимостта е в композицията, а не във файла

Работните процеси (workflows) на GitHub Actions обикновено се задействат от събитието pull_request, което се изпълнява в ненадеждния контекст на разклонението (fork), без тайни на хранилището (repository secrets) и с токен само за четене. Проблемите започват с pull_request_target и workflow_run, които се изпълняват в контекста на базовото хранилище с достъп до тайните и с GITHUB_TOKEN с права за четене и запис.

Атакуващият може да накара и двете да действат върху контролирано от него съдържание от заявката за изтегляне (pull request), която ги е задействала. От GitHub Security Lab наричат това „pwn request“.

Три примитива причиняват щетите. Вмъкването на команди (command injection) интерполира контролирани от атакуващия данни – име на клон, заглавие или коментар – директно в стъпка за изпълнение (run step), така че те попадат неекранни вътре в шел команда и се изпълняват. Вмъкването на код (code injection) чрез actions/github-script оценява въведените от атакуващия данни като JavaScript по време на изпълнение.

И накрая, ескалацията на привилегии между работни процеси (cross-workflow privilege escalation) позволява на работен процес с ниски привилегии да запише ненадеждни данни в артефакт или изходен резултат, които след това втори работен процес с високи привилегии чете и обработва с токена на поддържащия проекта. Нито един от двата работни процеса не е експлоатируем сам по себе си.

Уязвимостта съществува поради начина, по който те се свързват, което е и точната причина скенерите да остават зелени: SAST или DAST инструментът търси съвпадение на шаблони в рамките на един файл, а всеки файл тук е валиден, правилно форматиран YAML, който прави точно това, което му е казано.

„Скенерът вижда работен процес. Атакуващият вижда верига от четири стъпки до постоянен идентификационен данък за достъп“, обяснява Уардън. Няма нито един конкретен ред, който да бъде маркиран като грешен, защото нито един отделен ред сам по себе си не е сгрешен.

Това е най-лошата версия на провал в измерването, тъй като червената светлина кара някого да потърси проблем, а зелената светлина изпраща всички вкъщи.

Вашите скенери са зелени. Вашият пайплайн може да не е.

Cordyceps премина всяка проверка, защото нито един файл на работен процес не беше грешен сам по себе си – експлоатируема беше тяхната композиция.

Вижте как да затворите тази празнина, като управлявате това, което влиза в компилацията още при източника, а не само това, което преминава сканирането.

Една заявка за изтегляне, постоянен достъп за запис до доставено съдържание за сигурност

В хранилището Azure Sentinel на Microsoft Novee показа, че коментар по заявка за изтегляне може да изпълни анонимен код на атакуващ в CI на Microsoft и да открадне безсрочен ключ за GitHub App – факт, потвърден от Центъра за реагиране на сигурността на Microsoft (MSRC).

Sentinel е SIEM системата на Microsoft, а нейният Content Hub доставя правила за откриване и автоматизирани сценарии (playbooks) директно в работните пространства на клиентите. Откраднат ключ там предлага постоянен достъп за запис до съдържанието за сигурност, на което разчитат хиляди организации за откриване на атаки, тихо отслабено и доставено по веригата като доверена актуализация.

Примерното хранилище за разработка на AI агенти на Google (AI Agent Development Kit) е референция, която хиляди разработчици копират, когато изграждат агенти в Google Cloud. Една заявка за изтегляне може да изпълни код в CI на Google и да ескалира правата до ролята roles/owner в свързания проект в Google Cloud – постоянен достъп на ниво собственик, потвърден от Google.

Apache Doris имаше сходен път за кражба на идентификационни данни, потвърден и коригиран от екипа по сигурността на Apache. Три организации, един общ проблем с композицията, нито един ред код, който скенерът да може да посочи.

Никой не е вземал съзнателно решение да се довери на тази заявка за изтегляне

Фразата, която трябва да накара всеки инженерен лидер да се замисли, е „граница на доверие, която никой не е одитирал“. Някой е конфигурирал работен процес така, че да третира външни данни, сякаш идват от поддържащ проекта. Никой човек не е взел това решение умишлено.

Този риск се натрупва стъпка по стъпка, с всеки на пръв поглед разумен коммит, и се увеличава с генерираните от изкуствен интелект работни процеси, където моментът на вземане на решение може изобщо да не бъде одитиран.

Внедрявал съм AI инструменти в реална инженерна работа и съм измервал какво променят, така че ще кажа ясно, че ползата е реална и не твърдя, че трябва да я забавяме. Но Novee изрично посочва, че агентното кодиране е мултипликатор: AI инструментите генерират CI/CD конфигурации бързо и възпроизвеждат същите несигурни модели, така че една грешка се разпространява в потенциално милиони хранилища, излъчена с увереност и без ясен произход.

Обемът от решения за работни процеси, които една организация сега поема, е надхвърлил капацитета на процеса за преглед, оразмерен за скоростта на човешка работа.

Стандартните ни системи за сигурност не са...