Абстрактная техническая иллюстрация на тёмно-синем поле: у левого края расположена высокая полупрозрачная граничная плоскость, выполненная в виде тонкого бледного контура с матовой заливкой. Одна белая линия входит слева, проходит через плоскость и продолжается вправо, где заканчивается небольшим тёмным блоком, находящимся вне неглубокого ряда из четырёх светящихся голубых модулей. Тонкий пунктирный белый след ответвляется от линии непосредственно перед плоскостью и останавливается у небольшого бледного прямоугольника, закреплённого на поверхности плоскости и обозначённого лишь формой. Текст, изображения людей и логотипы организаций отсутствуют. Логотип OrcaRouter размещён в правом нижнем углу.
AI Safety Incidents

GhostApproval: шесть ИИ-ассистентов для программирования запросили разрешение и указали не тот файл

Автор

Gideon Frost

Дата публикации

Новые модели · 20Все модели →
Бенчмарки: Artificial Analysis · обновляется ежедневно
Назад ко всем статьям

8 июля 2026 года компания по кибербезопасности Wiz опубликовала GhostApproval — результат исследования, в котором символическая ссылка, внедрённая в репозиторий, заставила шесть ИИ-ассистентов для программирования записывать за пределы их рабочего пространства — в ~/.ssh/authorized_keys, что обеспечивает постоянный SSH-доступ без пароля, или в ~/.zshrc, который выполняется при следующем запуске оболочки — при этом диалог подтверждения называл только безобидный файл, за который выдавала себя ссылка. Wiz проверила Amazon Q Developer, Claude Code от Anthropic, Augment, Cursor, Google Antigravity и Windsurf и сообщила, что эта схема проявилась во всех шести. О случаях эксплуатации в реальных условиях не сообщалось: это демонстрация концепции, и запись в архиве не фиксирует реального ущерба. Три производителя выпустили исправления, два подтвердили получение отчёта и затем перестали отвечать, а один оспорил, что такое поведение вообще является уязвимостью. В Orca AI Incident Archive хранится полная запись об этой находке наряду с другими записями, внесёнными под его тегом типа SANDBOX.

Сам примитив давно известен. Переход по символическим ссылкам, классифицированный как CWE-61, десятилетиями служит примитивом атаки — Wiz перечисляет более ранние случаи его использования в состояниях гонки, менеджерах пакетов и побегах из контейнеров — и каждый из них зависел от того, что инструмент записывал в контролируемый пользователем путь, предварительно его не разрешая. Что сделало эту находку достойной отдельного названия, так это второй слой: в нескольких продуктах собственные рассуждения ассистента определяли опасный пункт назначения, а промпт, показанный человеку, это скрывал. Wiz относит это к CWE-451 — неверное представление критической информации в пользовательском интерфейсе. Граница безопасности существовала. А информации, необходимой человеку, чтобы ею воспользоваться, не было.

Как работает этот трюк и на чём он в итоге останавливается

Вредоносный репозиторий Wiz намеренно скучен. В нём есть символическая ссылка с именем project_settings.json, которая указывает на файл авторизованных ключей SSH разработчика, а также README с указанием агенту обновить эту «конфигурацию» при настройке рабочей области. Когда разработчик просит ассистента следовать README, агент переходит по ссылке и записывает открытый ключ атакующего. Если на машине запущен SSH-сервис, доступный атакующему, с этого момента это вход без пароля. Второй вариант направляет ту же приманку на ~/.zshrc, поэтому полезная нагрузка выполнится при следующем открытии терминала, и доступ по SSH вообще не потребуется.

Описание Wiz технического сбоя короткое: песочница, там где она есть, не проверяет канонический путь, поэтому запись, направленная внутрь проекта, попадает туда, куда указывает ссылка. PoC компании воспроизвёл это на «6 из ведущих ИИ-ассистентов для программирования», по её собственным словам, и компания опубликовала скриншоты для каждого. Под удар попадает любой, кто открывает репозиторий, который он не создавал, в одном из этих инструментов — что в обычном рабочем процессе разработчика включает форки, сторонние зависимости и любое код-ревью ветки внешнего контрибьютора.

Диалог, в котором был указан неверный файл

Самые явные доказательства дал Claude Code. В тесте Wiz рассуждение агента, согласно цитате фирмы, гласило: «Я вижу, что project_settings.json на самом деле является конфигурационным файлом zsh». В запросе разрешения, который увидел пользователь, спрашивалось: «Внести это изменение в project_settings.json?» Агент знал, куда направляется запись; человек, дающий разрешение, — нет. Wiz называет полученное согласие «содержательно пустым», а проверку с участием человека — формальностью.

Три продукта усугубили проблему сильнее, чем просто неудачная надпись. Windsurf записал файл на диск прежде чем появились кнопки Accept и Reject, поэтому диалог был предложением отмены, а не шлюзом авторизации — к моменту, когда пользователь мог отказаться, по словам Wiz, ключ уже был на месте. Amazon Q Developer показал тот же порядок: после записи предлагалась только кнопка Undo. Augment вообще ничего не спрашивал: Wiz продемонстрировал чтение через символическую ссылку, которое выявило подставной файл учётных данных AWS из-за пределов проекта в расшифровке чата, и запись через символическую ссылку в ~/.ssh/authorized_keys без какого-либо диалога. С другой стороны, Cursor и Google Antigravity отображали неразрешённый путь и требовали щелчка, который авторизовывал разрешённый.

Первый тест Wiz был проведён 10 февраля 2026 года, а отчёты были отправлены в период с 12 февраля по 5 марта. В его хронологии раскрытия информации указаны подтверждения: Anthropic — 15 февраля, Augment — 24 февраля, Google — 26 февраля, Cursor — 2 марта, AWS — 6 марта и Cognition, владеющая Windsurf, — 23 июня. Публичное раскрытие последовало примерно через пять месяцев после первого отчёта.

HTML card headed 'Five months from first test to public disclosure', with a kicker reading 'GhostApproval · Wiz Research · disclosure sequence'. A vertical timeline lists the dated steps: 10 February 2026, initial discovery; 12 and 14 February, Augment read and write reports; 14 February, report to Anthropic; 15 February, Anthropic closes the ticket as Informative; 24 February, Augment acknowledges; 26 February, Google acknowledges; 2 March, Cursor acknowledges; 2 and 5 March, reports to Cognition and AWS; 22 May, Google deploys its fix; 27 May, AWS ships language server 1.69.0; 23 June, AWS publishes CVE-2026-12958 and Cognition acknowledges; 8 July 2026, public disclosure. An amber box records that Augment and Windsurf acknowledged receipt and supplied no further updates. A footer cites Wiz's disclosure timeline. The OrcaRouter logo is composited in the bottom-right corner.

Шесть поставщиков, три ответа

Wiz оценивает находки по собственной шкале серьёзности — от High в AWS до Critical в Augment, Cursor, Google Antigravity и Windsurf. Три поставщика восприняли отчёт как уязвимость и выпустили исправление. Архив присваивает записи высокую степень серьёзности и оценку A по достоверности, а первичные уведомления согласны с Wiz в отношении механизма.

• Amazon Web Services. Высокий уровень опасности, отслеживается как CVE-2026-12958 и исправлен в Language Servers for AWS 1.69.0. Собственный бюллетень AWS 2026-047-AWS, опубликованный 23 июня 2026 г., подтверждает «проблему отсутствия проверки символических ссылок» до версии 1.69.0 и перечисляет минимальные сборки плагинов, содержащие исправление: Amazon Q Developer for Visual Studio Code 2.20, for JetBrains 4.3, for Eclipse 2.7.4 и AWS Toolkit with Amazon Q for Visual Studio 1.94.0.0. В нём указано, что обходных путей нет, что языковой сервер обновляется автоматически, если этому не препятствует конфигурация сети, и выражается благодарность Wiz за скоординированное раскрытие информации. В записи CNA проблема оценена в 8,5 по CVSS 4.0 и 7,8 по CVSS 3.1.

• Cursor.Критическая уязвимость, отслеживается как CVE-2026-50549 и исправлена в Cursor 3.0. Запись была опубликована GitHub в качестве CNA 25 июня 2026 года с оценкой 9.3 по CVSS 4.0. В её описании атакующий представлен несколько иначе, чем в истории Wiz о репозитории: вредоносный агент создаёт символическую ссылку внутри рабочей области и заставляет канонизацию пути завершиться неудачей — либо потому, что целевой объект не существует, либо потому, что с пути было снято разрешение на чтение, — после чего запись без одобрения откатывается к исходному пути и может перезаписать вспомогательный компонент песочницы для выполнения вне песочницы.

• Google.Wiz присваивает Antigravity критический уровень и фиксирует исправление как версию 1.19.6, развернутую 22 мая 2026 года. В столбце уровня серьезности указано «В ожидании», и, по данным Wiz, Google рассматривала вопрос о выпуске CVE; в открытом доступе идентификатор CVE для Antigravity не указан.

• Augment.Критический по рейтингу Wiz, тестирование на версии 0.754.3, подтверждено 24 февраля 2026 года и не исправлено на момент публикации. В исследовательской заметке Cloud Security Alliance об этой находке приводится контр-аргумент Augment: агент действует с использованием учётных данных самого пользователя.

• Windsurf. Критический по оценке Wiz, проверено на сборке V1.9566, подтверждено Cognition 23 июня 2026 г. и не исправлено на момент публикации.

• Anthropic. Оспаривается. CVE отсутствует, а проверенная версия Claude Code, 2.1.42, указана в таблице Wiz со статусом «Отклонено».

HTML card headed 'One pattern, six products, six answers', with a kicker reading 'GhostApproval · vendor status at public disclosure, 8 July 2026'. A six-row table gives product, Wiz's severity rating, CVE identifier, fixed version and status: Amazon Q Developer, High, CVE-2026-12958, fixed in language server 1.69.0; Cursor, Critical, CVE-2026-50549, fixed in 3.0; Google Antigravity, Critical, no CVE published, fixed in 1.19.6 on 22 May 2026; Augment, Critical, no CVE, no fix, acknowledged 24 February 2026; Windsurf, Critical, no CVE, no fix, acknowledged 23 June 2026; Claude Code from Anthropic, Disputed, no CVE, rejected as outside the threat model. A note beneath reads that severity ratings for the products without a CVE are Wiz's own, not a CNA score, and that no exploitation in the wild was reported. A footer cites Wiz's vendor table, the AWS security bulletin and the two CVE records. The OrcaRouter logo is composited in the bottom-right corner.

Отказ Anthropic и исправление, которое появилось раньше отчёта

Ответ Anthropic компании Wiz был обдуманным отказом. «Это выходит за рамки нашей текущей модели угроз, — писала компания, согласно цитате Wiz. — Когда пользователь впервые запускает Claude Code в каталоге, он должен подтвердить, что доверяет этому каталогу, прежде чем начать сеанс. Описанный вами сценарий предполагает, что пользователь явно подтверждает запрос разрешения внутри каталога, содержащего вредоносную символическую ссылку, что выходит за рамки модели угроз Claude Code». Тикет был закрыт со статусом «Информативно».

У этих рассуждений есть связная структура: пользователь доверял каталогу, затем одобрил операцию, так что оба момента согласия были соблюдены. Возражение Wiz состоит в том, что информированное согласие требует точной информации — одобрение project_settings.json, тогда как запись попадает в ~/.ssh/authorized_keys, формально является решением, а по существу — пустым. Wiz не утверждает, что установил, какая позиция верна, и эта статья тоже. Практическое наблюдение состоит в том, что AWS, Google и Cursor заняли противоположную точку зрения и выпустили патч.

Wiz также сообщила, что за время спора Claude Code изменился: по словам компании, текущие версии разрешают симлинки и предупреждают перед записью в чувствительные файлы, и отметила, что Anthropic отказалась сказать, связано ли это с отчётом. 7 июля 2026 года Anthropic предоставила исправление, которое цитирует Wiz: «Предупреждение о симлинках в диалоге разрешений Edit/Write появилось в v2.1.32 (5 февраля 2026 года), за девять дней до того, как этот отчёт был отправлен нам. Оно было добавлено в рамках упреждающего усиления безопасности по итогам внутренней проверки. Отказ от комментариев был автоматическим ответом нашей системы триажа».

Сроки выпуска версий сходятся; публичная запись о том, что изменилось, — нет. Claude Code 2.1.32 был опубликован в реестре npm 5 февраля 2026 года в 17:03 UTC, то есть за девять дней до отчёта от 14 февраля, ровно как утверждает Anthropic. Но запись в публичном журнале изменений для этого релиза перечисляет двенадцать изменений, включая команды агентов, запись памяти и несколько исправлений интерфейса, и ни одно из них не упоминает символьные ссылки или диалоги разрешений. Первые строки журнала изменений, описывающие именно это поведение, появляются гораздо позже: версия 2.1.280, опубликованная в npm 22 сентября 2026 года, содержит запись «Исправлена проблема, при которой записи через путь с символьной ссылкой оценивались по их написанию внутри дерева: теперь в запросе указывается, куда попадает запись», а в версии 2.1.287 от 1 октября 2026 года указано, что запись из оболочки через закоммиченную в репозиторий символьную ссылку в конфиденциальный файл теперь указывает, куда она попадает, и ожидает подтверждения человека. Собственное наблюдение Wiz о том, что 2.1.173 и более поздние версии разрешают символьные ссылки, также появляется после отчёта, поскольку 2.1.173 вышел 11 июня 2026 года.

Что установлено, а что — нет

• Подтверждено. Механизм: поддельная символьная ссылка в репозитории, агент, который следует по ней, запись, которая оказывается за пределами рабочего пространства, и интерфейс подтверждения, который указывает неверный путь. Wiz воспроизвела это во всех шести продуктах и опубликовала скриншоты. Существуют две записи CVE, опубликованные их CNA, а бюллетень AWS независимо подтверждает уязвимость в версиях ниже 1.69.0 и её исправление. Anthropic не оспаривает, что такое поведение имело место; она оспаривает, что это уязвимость.

• Из одного источника. Оценки серьёзности для Augment, Windsurf и Google Antigravity — это суждения Wiz, а не оценки CNA, поскольку ни для одного из этих трёх продуктов не был опубликован CVE. Утверждение о том, что Windsurf и Amazon Q выполняют запись до появления диалогового окна, опирается на скриншоты и пояснения Wiz; ни один поставщик публично не подтвердил такой порядок.

• Спорно. Обязан ли инструмент защищать своего пользователя от обманчивого рабочего пространства, или доверие к каталогу плюс клик решают вопрос. Anthropic утверждает второе; Wiz говорит, что показанное им приглашение сделало клик бессмысленным. Архив не помечает запись как спорную: факты согласованы, и спорна только интерпретация.

• Не установлено.Исправили ли Augment и Windsurf этот дефект после публикации. Все материалы, изученные для этой статьи, включая заметку Cloud Security Alliance от 15 июля 2026 года, по-прежнему указывают, что оба продукта остаются неисправленными; не найдено ни одного публичного уведомления об исправлении ни от одного из поставщиков.

В самой дате есть небольшая загвоздка. Публикация Wiz и её график раскрытия информации оба указывают на 8 июля 2026 года, Infosecurity Magazine сообщает, что proof of concept был опубликован 7 июля, а свой собственный отчёт относит к 9 июля, а запись в архиве датирована 9 июля 2026 года с точностью до дня. Обнаружение, освещение и архив не расходятся относительно недели; они расходятся относительно дня — до двух дней.

Более ранняя работа по одной из шести заслуживает отдельного признания. Эван Шуман из CSO Online в материале от 9 июля 2026 года отметил, что Cato Networks сообщила о варианте уязвимости, затрагивающем только Cursor, ещё до более масштабного исследования Wiz. Материал SecurityWeek об этом исследовании, опубликованный 3 июля 2026 года, называет его DuneSlide, присваивает паре идентификаторы CVE-2026-50548 и CVE-2026-50549, оценивает обе в 9,8 и относит выпуск Cursor 3.0, в котором они были исправлены, к 2 апреля — цифры, которые не согласуются ни с хронологией Wiz, согласно которой публикация исправления для Cursor приходится на 5 июня, ни с записью CNA, опубликованной 25 июня с оценкой 9,3. Оценки 9,8 и 9,3 — это две оценки, выставленные одной и той же уязвимости двумя разными оценщиками; апрельская и июньская даты, возможно, описывают релиз и уведомление, а не свидетельствуют о расхождении относительно того, когда был выпущен патч.

Что изменилось после этого

Конкретно: пользователи Amazon Q Developer были переведены на языковой сервер 1.69.0 — в большинстве конфигураций автоматически; пользователи Google Antigravity — на версию 1.19.6 с 22 мая 2026 года; пользователи Cursor — на версию 3.0; а пользователи Claude Code — на версию, в которой разрешаются ссылки, причём дальнейшие изменения для точности промптов появились в версиях 2.1.280 и 2.1.287 в сентябре и октябре 2026 года. Пользователи Augment и Windsurf, судя по данным, доступным на момент публикации, получили лишь дату, за которой стоит следить, и ничего больше.

Рекомендации самой Wiz были узкими и сугубо техническими: разрешать символические ссылки до отображения запроса, явно предупреждать, если путь после разрешения ссылок выходит за пределы рабочей области, и никогда не записывать на диск до явной авторизации, чтобы диалог служил шлюзом, а не кнопкой отмены. Записка Cloud Security Alliance добавляет рамку управления: рассматривать помощников по программированию как привилегированное ПО с доступом к файловой системе, а не как плагины редактора, и напрямую спрашивать поставщиков, разрешаются ли пути до появления подтверждения. Кэти Нортон из IDC, которую цитирует CSO Online, отнесла остаточный риск к тем участкам, где уже работает цепочка поставок, — к внешним участникам, форкам репозиториев и сторонним зависимостям, «а не к коду, написанному внутри компании».

Открытым остаётся вопрос проектирования, а не ошибка. Шесть независимо созданных продуктов сошлись на одной и той же последовательности — показать запрошенный путь, довериться клику — а дальнейшие расхождения касались ответственности, а не механизма. Запись в архиве помечена как знаковая: это оценка архива, что запись описывает категорию, а не ошибку одного вендора, и с таким прочтением трудно спорить: одно и то же краткое доказательство концепции сработало шесть раз.

Abstract technical illustration on a dark navy field: a pale translucent check mark, drawn as a thin outline, floats above a small white rectangle that represents an approval surface. Beneath the rectangle a white line drops vertically, passes through a faint horizontal plane, and emerges on the other side pointing at a second dark rectangle that is drawn only as an outline, unlit. A soft amber glow marks the point where the line crosses the plane. No text, people or organisation logos appear. The OrcaRouter logo is composited in the bottom-right corner.
© 2026 OrcaRouter

Провайдерам

Управляете инференс-платформой? Разместите свои модели на OrcaRouter.

providers@orcarouter.ai

Присоединяйтесь к сообществу

Discordsupport@orcarouter.aiXLinkedInGitHubYouTube