Уязвимост в четири широко използвани AI агента за кодиране позволява на всеки, който контролира репозитория с кода на даден плъгин, да замени инсталирания от агента плъгин със злонамерен такъв, дори когато агентът е заключил този плъгин към конкретна прегледана версия, съобщиха от компанията за сигурност Air Security в четвъртък.

От компанията заявиха, че Anthropic е отстранила уязвимостта в Claude Code 2.1.179, а OpenAI в Codex 0.146.0, докато за GitHub Copilot няма коригиращ файл, а Google няма да отстрани уязвимостта в Gemini CLI, тъй като спира поддръжката му.

Агентите инсталират добавки, наречени плъгини, от онлайн каталози. За да гарантира сигурност, каталогът заключва всеки плъгин към една-единствена прегледана версия чрез нейния хеш на коммит — дълъг низ, който идентифицира точно копие на кода. От Air установиха, че агентите изтеглят това копие, но никога не проверяват дали кодът, с който разполагат накрая, действително съответства на него.

Клонът (branch) е именована линия от код в репозиториум. На хостинг за код, който позволява създаването на клон с име, направено да изглежда като хеш на коммит, собственикът на репозитория на плъгина може да насочи това име към различен код. Тогава агентът инсталира различния код, докато все още отчита, че използва заключената версия.

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

Трикът не работи навсякъде. GitHub не позволява имена на клонове или тагове, които изглеждат като хешове на коммити, според документацията на GitHub, така че плъгин, инсталиран от GitHub репозиториум, не е изложен на този трик с клоновете. От Air казват, че трикът работи при хостове, които позволяват такива имена, като Bitbucket или собствен git сървър на компания, които тези агенти също поддържат.

От The Hacker News провериха каталозите, с които агентите се доставят, на 18 септември и установиха, че всеки плъгин в публичния каталог на Anthropic, както и в каталозите по подразбиране за Claude Code и Copilot, сочи към GitHub репозиториум.

Gemini CLI е атакуван по различен начин. Вместо клон с форма на хеш, Air казва, че неговият инсталатор може да бъде измамен от репозиториум, чийто основен клон се казва FETCH_HEAD, а правилото на GitHub срещу имена с форма на хеш не блокира ясно това име. Така че не е потвърдено, че инсталирането на плъгин за Gemini CLI от GitHub избягва уязвимостта, а Gemini CLI е агентът, който според Air няма да бъде коригиран.

Това, което би направило атаката без нужда от действие от страна на жертвата, е автоматичното обновяване във фонов режим, което позволява на агента сам да обновява инсталираните плъгини, така че плъгин, на когото някой вече се доверява, може да бъде заменен без подканване. Air казва, че това работи по подразбиране в Claude Code и Codex.

Но автоматичното обновяване е включено по подразбиране само за вградените каталози на самите агенти, които се помещават в GitHub, и е изключено или незадължително за външни такива, според документацията на Anthropic и GitHub. Така че читател, който инсталира плъгини само от default каталозите на агентите, базирани на GitHub, не е изложен на версията на атаката с името на клона, според данните от Air и GitHub.

Air съобщава, че е разработила работеща тестова атака срещу четирите агента през май и е уведомила доставчиците през юни. Към 18 септември не е назначен CVE идентификатор и нито един от четирите доставчика не е публикувал бюлетин за сигурност относно уязвимостта, според проверки на The Hacker News, като няма данни тя да е използвана в реална атака.

The Hacker News възпроизведе основното поведение на Git в локален тест, а собствената публична корекция за сигурност на OpenAI описва същия грешка: Git „може да интерпретира заявено SHA на коммит като име на клон“, написа компанията, което може да накара източника на плъгина „да материализира различен коммит от този, който е заключил“. Тази промяна беше включена в Codex 0.146.0.

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

AgentStatusWhat to do
Anthropic Claude CodeКоригирана уязвимост, според Air, в 2.1.179Обновете до 2.1.179 или по-нова версия
OpenAI CodexКоригирана уязвимост в 0.146.0Обновете до 0.146.0 или по-нова версия
GitHub CopilotНяма корекция за сигурност, според AirНяма налична корекция за сигурност
Google Gemini CLIНяма да бъде коригиран, според AirПреминете към Antigravity, съветват Air и Google

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

Бележките към версията на Anthropic за 2.1.179 не споменават корекцията за сигурност, а информацията, че уязвимостта е отстранена, е на Air. За Copilot от Air казват, че са уведомили Microsoft през юни и че не е предоставена корекция. Copilot може да инсталира плъгини от хостове, различни от GitHub, където според Air се крие рискът.

Google спря да обслужва потребителския Gemini CLI през юни и насочва потребителите към Antigravity — по-новия си агент, до когото според Air тази атака не може да достигне. Google също така заяви, че корпоративният достъп до Gemini CLI ще продължи с актуализации. Дали корекция за тази уязвимост е сред тях, не е ясно.

Същите изследователи са тествали добавки за агенти и преди. През юни The Hacker News отрази теста на Air, при който фалшив skill премина през скенерите за сигурност и достигна до около 26 000 агента чрез промяна на външна връзка след приключване на прегледа. Plugin4Shell пренася тази идея от подменена връзка към подменен плъгин, намиращ се зад заключена версия.