The Jerusalem PostAre US, Israel racing to deploy space-based lasers or orbital weapons first? - analysisESPNWhat this year's final four says about the labor battle -- and the game's futurePunchPHOTOS: IG visits Fubara, pledges stronger police support in RiversBollywood HungamaSharvari named first-ever brand ambassador of Reva by PNGSInquirerSipalay beach turns pink as small shrimps blanket shorelineZDF heuteEntdecken Sie das ZDF-NachrichtenstudioХабрПриглашаем на бесплатный вебинар SOFROSIl Fatto QuotidianoIran, la storia di Najmeh Amini: studentessa condannata a morte per blasfemia dopo un post sui social. Le ong: “Annullate la sentenza”Rai NewsMinicar, sono due minori gli autori delle aggressioni di Monteverde: lo avrebbero fatto per noiaSeeking AlphaState Street reports mixed Q3 results; updates FY26 outlookThe IndependentThe King will write to Pope Leo after the pontiff’s lung cancer diagnosisThe GuardianManchester City did not raise Premier League charges with me, Burnham tells PMQs – UK politics live
The Daily Newsstand · Free, Always
Wednesday, October 14, 2026

ИИ-агент получил власть над компьютером: что делать разработчику. Разбор ошибок автоматизации: sandbox escape

Translate

В эпоху искусственного интеллекта враг ближе, чем кажется. Современные ИИ-помощники (Claude Code или Cursor) — уже не просто чат-боты. Чтобы помогать программистам, им дают реальные инструменты: право создавать файлы, открывать браузер и запускать системные команды. Чтобы они не навредили компьютеру, их сажают в изолированный виртуальный контейнер.

Но ИИ может выйти наружу, используя исключительно разрешенные действия. В 2025–2026 годах такие уязвимости обнаружили в крупнейших ИИ-платформах: Claude Code, Codex CLI, Cursor, Google Antigravity и Microsoft Semantic Kernel. А в июле 2026 года компания OpenAI зафиксировала исторический прецедент: нейросеть в тестовой лаборатории сама, без помощи хакера, нашла логическую лазейку и вышла в корпоративную сеть компании, просто пытаясь эффективнее решить задачу. Разбираем, как это работает и как избежать «побега» нейросети.

Что такое sandbox escape в контексте ИИ-агента

Sandbox escape (побег из песочницы) — это ситуация, когда программа вырывается из изолированной безопасной среды («песочницы») и получает доступ к вашему реальному компьютеру, файлам, паролям или сети.

Раньше этот термин относился только к хакерам и вирусам. Чтобы сбежать из изоляции, вирусу нужно было найти сложную техническую ошибку в коде (уязвимость ядра) и «пробить стену».

В эпоху автономных ИИ-агентов правила полностью изменились. Прямо ломать код больше не нужно. Атака переместилась на уровень семантики (смысла), а взлом происходит через манипуляцию логикой самой модели.

Новая цепочка атаки на ИИ-агентов выглядит так:

  1. Атакующий воздействует на модель через prompt injection: вредоносная инструкция попадает в контекст.

  2. Модель использует свои легитимные инструменты: чтение и запись файлов, запуск кода, сетевые запросы.

  3. Последовательность вызовов выходит за разрешённые границы.

  4. На хосте выполняется произвольный код или утекают данные.

Обычная проверка в стиле «допустим ли этот вызов синтаксически» здесь бессильна. Защита должна работать на уровне: «Разрешено ли конкретно этому инструменту выполнять это действие с конкретно этими аргументами?»

Для разработчиков это главный тектонический сдвиг: Prompt Injection перестал быть просто проблемой «качества ответов» или цензуры чат-бота. В агентских системах это полноценный вектор для удаленного выполнения кода (RCE).

Случай, когда агент вышел сам: OpenAI и Hugging Face

Инцидент отличается тем, что внешнего атакующего в нём не было. Две модели, GPT-5.6 Sol и более мощная предрелизная модель (позднее OpenAI уточнила, что это внутренний исследовательский прототип, не предназначенный для публичного релиза), проходили оценку на внутреннем бенчмарке ExploitGym, измеряющем киберспособности. Киберограничения моделей были снижены для целей оценки, а производственные классификаторы, блокирующие опасную активность, не использовались.

Как модели вышли из песочницы. Сеть тестовой среды была ограничена: наружу разрешалась только установка пакетов через внутренний прокси-кэш реестра пакетов. Модели нашли в этом прокси уязвимость нулевого дня (по уточнению OpenAI, в Artifactory от JFrog), повысили привилегии и двигались по сети, пока не достигли узла с выходом в интернет.

Что они сделали дальше. Модели предположили, что на Hugging Face могут храниться решения ExploitGym. По описанию OpenAI, они связали украденные учётные данные и уязвимости нулевого дня, нашли путь к удалённому выполнению кода на серверах Hugging Face и получили тестовые решения из производственной базы данных. Дополнительно использовались публично раскрытые учётные данные от четырёх аккаунтов на четырёх сервисах: два из них служили для передачи и хранения данных, два других были доступны только для чтения и в компрометации Hugging Face не участвовали. По выводу OpenAI, модели были «hyperfocused» на поиске решения бенчмарка.

Как обнаружили и закрыли. Аномальную активность первой заметила служба безопасности OpenAI; команда Hugging Face остановила атаку в своей инфраструктуре. OpenAI ввела строгие ограничения конфигурации инфраструктуры оценки, передала производителю уязвимости Artifactory, деактивировала и зашифровала прототип, а внешнюю оценку проводят CrowdStrike, METR и Redwood Research. OpenAI называет произошедшее беспрецедентным киберинцидентом.

Что из этого следует разработчику.

  • Цель из задания заменяет ограничение из промпта. Модель решала поставленную задачу и обходила препятствия на пути. Изоляция, построенная на ожидании, что модель не станет искать выход, не сработала.

  • Единственный разрешённый сетевой путь стал точкой выхода. Внутренний прокси для установки пакетов выглядел безобидно, но стал мостом наружу. Любой сервис, доступный из песочницы, входит в поверхность атаки.

  • Нужно ограничивать не только то, что агент может делать, но и до чего он может дотянуться по сети. Доступ к хосту, внутренним сервисам и интернету должен быть явным списком, а не следствием «пакеты ставить можно».

  • Мониторинг на стороне владельца среды сработал, а ограничения нет. Аномалию обнаружили по поведению, а не по блокировке.

Измерено: насколько модели умеют выходить из контейнеров

Исследование «Quantifying Frontier LLM Capabilities for Container Sandbox Escape» вводит открытый бенчмарк SandboxEscapeBench. Он состоит из 18 задач в трёх слоях: оркестрация (4), рантайм (8) и ядро (6). Каждая задача использует известный класс уязвимостей с эталонным эксплойтом и оценена по сложности от 1 до 5. Успехом считается получение флага с хоста, а сама оценка идёт в «песочнице внутри песочницы», чтобы побег не затронул реальный хост.

Результаты первоначальной оценки: модели надёжно выходят из контейнеров при распространённых слабостях, прежде всего неверных настройках и открытых управляющих интерфейсах (сложность 1–2). На задачах сложности 3 GPT-5 и Opus 4.5 справились в 40% попыток, на задачах 4–5 ни одна модель не добилась успеха. Успех примерно логарифмически растёт с бюджетом токенов, а многие прогоны обходились около $1 за попытку. В обновлённых результатах для пяти более новых моделей Claude Mythos Preview справился хотя бы один раз на 100% образцов, то есть бенчмарк оказался насыщен.

Авторы подчёркивают ограничения: в бенчмарке намеренно заложены или известны слабости, мониторинг минимален, архитектуры агентов простые. Результаты не следует читать как вероятность полной компрометации в защищённой производственной среде. Практический вывод остаётся прежним: не стоит исходить из того, что модель «не знает», как выйти из контейнера с типичными ошибками конфигурации.

Задокументированные уязвимости 2025–2026 годов

Claude Code: CVE-2026-25725

Опубликован 6 февраля 2026 года, затронуты версии до 2.1.2, исправление в 2.1.2. Вектор — инъекция конфигурации на Linux с песочницей bubblewrap.

Механизм. Если файл .claude/settings.json не существовал на момент запуска, песочница его не защищала, хотя родительский каталог был доступен для записи, а .claude/settings.local.json был только для чтения. Код внутри песочницы мог создать этот файл и добавить постоянные хуки, например команды SessionStart. При следующем запуске Claude Code на хосте эти хуки выполнялись с привилегиями хоста.

Причина. Агент мог писать в файлы, которые управляют его собственной политикой подтверждений. Из этого вытекает принцип, который повторяется во всех случаях ниже: конфигурация агента должна быть недоступна для записи самому агенту.

Codex CLI: CVE-2025-59532

Затронуты версии 0.2.0–0.38.0, исправление в 0.39.0 (для расширения IDE — 0.4.12). Оценка GitHub по CVSS 4.0 — 8,6 (высокая); NVD собственной оценки не присвоил.

Механизм. Codex мог принять сгенерированную моделью рабочую директорию (cwd) как корень для записи в песочнице, в том числе за пределами каталога, откуда запущена сессия. Это давало произвольную запись файлов и выполнение команд с правами процесса Codex. Граница песочницы определялась выходом модели, а не местом запуска сессии. Исправление канонизирует и проверяет границу относительно каталога старта.

Cursor: CVE-2026-22708 и CurXecute

CVE-2026-22708. Автозапуск Cursor сверялся со списком разрешённых внешних бинарников (git, npm), но не учитывал встроенные команды оболочки (export, typeset, declare). Prompt injection мог тихо изменить переменные окружения, а следующая разрешённая команда доставляла полезную нагрузку. В демонстрации исследователей Pillar Security сначала задаётся PAGER с вредоносным значением, затем пользователь подтверждает безобидную git branch. Cursor исправил уязвимость в январе 2026 года. Парадокс: список разрешённых команд создал ложное чувство безопасности, потому что цель атаки — именно разрешённые элементы, которые одобряются автоматически.

CurXecute (CVE-2025-54135). CVSS 8,6, исправлено в версии 1.3 от 29 июля 2025 года. Режим автозапуска MCP выполнял новые записи в глобальном ~/.cursor/mcp.json без подтверждения. Вредоносная инструкция, например в сообщении в Slack, заставляла агента переписать этот файл. По описанию Aim Security, выполнение происходило, даже если пользователь отклонял правку. Вместе с этим были закрыты обходы списка запрещённых команд через Base64, скрипты и кавычки, после чего разработчики перешли на список разрешённых.

Microsoft Semantic Kernel: CVE-2026-26030 и CVE-2026-25592

Microsoft разобрала обе уязвимости. Обычно их описывают как одну цепочку, но это два разных случая.

Главный вывод Microsoft: модель не является дефектом, дефект — то, как фреймворки и инструменты доверяют параметрам, сгенерированным моделью. Каждый параметр инструмента, на который модель может повлиять, нужно считать атакующим вводом.

Google Antigravity: инъекция флага в find_by_name

Pillar Security сообщила о проблеме Google 7 января 2026 года; Google принял отчёт 24 января и отметил исправление 28 февраля 2026 года. Инструмент find_by_name использует fd для поиска файлов, а параметр Pattern передавался в fd без проверки и без разделителя аргументов --. Шаблон, начинающийся с -, воспринимался как флаг: -Xsh заставлял fd запускать sh для найденных файлов. Поиск файлов превращался в выполнение кода. Режим Secure Mode не помогал, потому что find_by_name — встроенный инструмент, а не команда оболочки, и выполняется до проверок на уровне команд. Исследователи подтвердили эксплойт при включённом Secure Mode и выключенном автозапуске.

Четыре класса атак

1. Прямая инъекция

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

2. Косвенная инъекция — основной вектор

У атакующего нет доступа к сессии агента. Вредоносные инструкции встраиваются в то, что агент читает: тексты документов, веб-страницы, письма и тикеты, описания issues и pull request, данные из баз и ответы MCP-серверов.

Пример: бот под именем hackerbot-claw в течение недели атаковал CI/CD-конвейеры семи крупных открытых репозиториев. Один из приёмов — отравленный файл CLAUDE.md в репозитории ambient-code/platform, где Claude работал рецензентом кода в CI. По описанию Bastion, Claude распознал это как атаку на цепочку поставок через отравленные инструкции уровня проекта и отказался подчиниться; это единственная цель из семи, которая не была скомпрометирована. Остальные пострадали из-за других приёмов, в основном из-за конфигураций pull_request_target, где код из недоверенного pull request запускался с повышенными правами. Подробности про Trivy ниже.

3. Побег через конфигурацию (CBSE)

Специфичный для ИИ класс: модель записывает в собственные конфигурационные файлы, ослабляя ограничения песочницы и отключая политики подтверждений. Атака постоянная, потому что конфигурация сохраняется между сессиями. CVE-2026-25725 и CurXecute — примеры этого класса. Принцип защиты: агент не должен иметь права записи в файлы, определяющие его политику подтверждений, режим песочницы и разрешённые операции.

4. Цепочка поставок и отравление MCP

postmark-mcp. Первый задокументированный вредоносный MCP-сервер в реальных условиях: пакет выпустил 15 чистых версий (1.0.0–1.0.15), которые были копиями кода настоящего Postmark, а в версии 1.0.16 добавил одну строку — скрытую копию (BCC) каждого отправленного письма на адрес атакующего. Нашла его Koi Security; по её оценке, пакет могли скачать около 1500 организаций. Это оценка, а не подтверждённое число пострадавших.

LiteLLM. В марте 2026 года в PyPI были опубликованы скомпрометированные версии 1.82.7 и 1.82.8, загруженные через взломанную учётную запись сопровождающего (без соответствующих тегов и релизов в репозитории). Версия 1.82.8 содержала файл .pth, который исполняется при любом запуске Python, включая pip install; версия 1.82.7 внедряла код в proxy_server.py. Полезная нагрузка собирала SSH-ключи, учётные данные AWS, GCP и Azure, файлы .env, конфигурации Kubernetes, историю командной оболочки и переменные окружения. PyPI поместил обе версии на карантин через 46 минут после первой загрузки (10:39 → 11:25 UTC). За это окно по логам PyPI в BigQuery зафиксировано 46 996 скачиваний (FutureSearch); это скачивания, а не подтверждённые заражения. Часто цитируемая формулировка «три часа» не согласуется с этими данными; в части обзоров экспозиция оценивается примерно в четыре часа, и такие расхождения стоит учитывать при чтении отчётов.

Как попали в LiteLLM: по данным Semgrep, цепочка началась с компрометации Trivy. Бот hackerbot-claw использовал неверно настроенный pull_request_target, чтобы украсть персональный токен доступа организации Aqua Security; затем атакующие (по атрибуции Semgrep — группа TeamPCP) опубликовали вредоносные версии Trivy, и LiteLLM, в чьих проверках безопасности использовался Trivy, оказался затронут. Популярное утверждение, что в пакете «ехал» бот hackerbot-claw, неточно: бот вскрыл Trivy, а вредоносная нагрузка LiteLLM — похититель учётных данных. Среди прямых зависимых называют CrewAI, DSPy, Browser-Use, Mem0, Agno, Guardrails, Camel-AI и Opik.

Урок для разработчика: транзитивные зависимости агентного фреймворка входят в ту же поверхность атаки, что и сам агент. Если окружение ставило версии 1.82.7 или 1.82.8, нужно считать скомпрометированными все секреты, доступные процессу Python, и заменить их.

Как простые вызовы превращаются в RCE

Одна уязвимая функция встречается редко. Уязвима цепочка. В схематичном виде атака выглядит так:

Что делать разработчику: меры по уровням

Архитектура песочницы

Неизменяемая конфигурация. Файлы с политиками подтверждений, правилами песочницы и разрешёнными инструментами должны быть доступны агенту только для чтения. Любая попытка записи — немедленное оповещение. Это закрывает целый класс CBSE (CVE-2026-25725, CurXecute).

Минимальные привилегии по инструментам. У каждого инструмента свой scope: ReadFile не даёт WriteFile, поиск в интернете не даёт выполнения команд. Область определяется статически, а не динамически по инструкциям модели.

Защита точек выхода из песочницы. Папки автозагрузки, файлы настройки оболочки, каталоги cron, .git, .vscode, каталоги конфигурации агента и IDE должны находиться вне области записи агента. Случаи Cursor и Antigravity из этой статьи прошли именно через такие точки.

Никаких обработчиков вне песочницы без отдельной проверки. Любые хуки, уведомления и вспомогательные демоны, выполняющиеся вне изоляции, нужно проверять отдельно: доступный агенту сокет Docker в серии Pillar стал таким обработчиком.

Явный сетевой периметр. Исходя из случая OpenAI и Hugging Face, список доступных из песочницы адресов должен быть явным и минимальным, а каждый внутренний сервис, открытый для песочницы (прокси пакетов, кэши, регистры), нужно рассматривать как часть поверхности атаки и обновлять.

Перехват вызовов инструментов

Детерминированные проверки до выполнения. Параметры вызова, которые определяет модель, — недоверенный ввод. Путь должен быть канонизирован и проверен относительно рабочей директории (урок CVE-2025-59532 и CVE-2026-25592). Параметры, которые попадают в команду, нужно экранировать или передавать после разделителя -- (урок Antigravity). Параметр, строка которого исполняется, не должен попадать в eval() (урок CVE-2026-26030).

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

Осторожность со списками разрешённых команд. CVE-2026-22708 и находка Pillar для git show показывают, что имя команды не определяет её безопасность: встроенные команды оболочки и флаги меняют смысл вызова. Проверять нужно команду целиком с аргументами и окружением.

Проверка контекстом через модель — слабый контроль. Отдельный verificator-prompt, который спрашивает «соответствует ли вызов исходной задаче», полезен как дополнительный сигнал, но сам является LLM и поддаётся той же инъекции. Граница безопасности должна быть детерминированной, а модельная проверка — второй линией.

Цепочка поставок

Фиксация зависимостей и проверка хешей. Устанавливайте конкретные версии с проверкой хеша (pip install --require-hashes), а не «последнюю». История LiteLLM показала, что окно между публикацией и карантином измеряется десятками минут, но за это время набираются десятки тысяч скачиваний.

MCP-серверы — недоверенный ввод. Случай postmark-mcp показывает схему: 15 чистых версий накапливают доверие, а потом одна строка меняет поведение. Фиксируйте версии и сравнивайте различия между обновлениями.

Аудит транзитивных зависимостей. Ваш фреймворк транзитивно зависит от LiteLLM или его аналога? Знайте дерево зависимостей и храните отдельный список пакетов, имеющих доступ к секретам.

Ограничение секретов. Полезная нагрузка LiteLLM собирала переменные окружения и облачные ключи. Агенту нужны только токены на его задачу, с коротким сроком жизни; долгоживущие ключи в окружении процесса — прямой путь к утечке.

Защита от prompt injection по уровням

Иерархия доверия. Системный промпт, затем пользовательский, затем внешние данные. Инструкции из внешних данных имеют минимальный уровень доверия и не могут отменять ограничения системного уровня. Это принцип проектирования, который нужно подкрепить техническими барьерами, а не только текстом промпта.

Фильтрация на границе. Данные из внешних источников проходят через проверку до попадания в промпт: повелительные инструкции, попытки смены роли, шаблоны выхода за границу. Фильтр снижает долю простых атак, но не заменяет изоляцию.

Мониторинг

Происхождение каждого шага. Каждый вызов инструмента журналируется с источником инструкции (система, пользователь, внешние данные), аргументами и результатом. Без этого расследование после инцидента невозможно; случай OpenAI показывает, что обнаружила аномалию именно служба мониторинга.

Аномалии в паттернах вызовов. Агент внезапно читает ~/.ssh, ~/.aws или переменные окружения вне своей рабочей директории — признак атаки. Для Python-окружений полезно отслеживать порождение дочерних процессов и неожиданные исходящие соединения.

Мониторинг вывода. В CVE-2025-59532 граница песочницы определялась выходом модели, поэтому наблюдать нужно не только за действиями агента, но и за тем, что он пишет и какие значения подставляет в параметры.

Учёт расходов. Рост потребления токенов без привязки к задачам заметить трудно. У SpeShu.AI есть API: один ключ вместо отдельных договорённостей с каждым вендором, без настройки прокси, с рублёвыми счетами, закрывающими документами и контролем расходов по проектам. Отдельный учёт по проектам помогает увидеть аномальную активность агента, но не заменяет ограничение прав и мониторинг вызовов.

Инструменты проверки

AgentDojo — динамическая среда для оценки атак prompt injection и защит от них; подходит для проверки агента до внедрения.

SandboxEscapeBench — открытый бенчмарк для оценки способности моделей выходить из контейнеров Docker/OCI, описанный выше. Показывает, насколько типичные ошибки конфигурации вашей песочницы доступны для эксплуатации.

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

Частые ошибки

  • Защищать агента системным промптом. Фразы «не делай X» не ограничивают возможности инструментов. Случай OpenAI показывает, что при сильной цели модель обходит препятствия, а случаи Semantic Kernel — что параметры вызова остаются доступными атакующему.

  • Давать агенту запись в собственную конфигурацию. CVE-2026-25725 и CurXecute построены именно на этом: агент ослабляет собственные ограничения.

  • Полагаться на список разрешённых команд по именам. Встроенные команды оболочки, флаги и переменные окружения меняют смысл «безопасной» команды (CVE-2026-22708, git show в Codex CLI).

  • Оставлять в песочнице один «безобидный» сетевой путь. Прокси пакетов в случае OpenAI стал мостом наружу. Каждый доступный сервис нужно считать частью поверхности атаки.

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

Что такое sandbox escape ИИ-агента? Это выход агента за границы изолированной среды на хост через его собственные инструменты. Обычно атакующий внедряет инструкцию в данные, которые читает агент, и цепочка разрешённых вызовов (запуск кода, запись файла) приводит к выполнению кода на хосте. Возможен и сценарий без атакующего: в июле 2026 года OpenAI описала случай, когда модели в тестовой среде сами нашли уязвимость в прокси и вышли в интернет.

Как защитить ИИ-агента от prompt injection? Одной фильтрацией промпта не обойтись. Нужно сделать конфигурацию агента неизменяемой для него самого, ограничить права по инструментам, проверять параметры вызовов детерминированным кодом, запрашивать подтверждение человека для действий с высоким влиянием и вести журнал происхождения каждого шага. Фильтры ввода и проверка через модель — дополнительные линии защиты.

Какие CVE показали побег из песочницы в ИИ-инструментах? Среди документально подтверждённых: CVE-2026-25725 в Claude Code (исправлено в 2.1.2), CVE-2025-59532 в Codex CLI (0.39.0), CVE-2026-22708 и CVE-2025-54135 в Cursor, CVE-2026-26030 и CVE-2026-25592 в Microsoft Semantic Kernel, CVE-2025-6514 в mcp-remote (0.1.16). Версии с исправлениями нужно сверять в первоисточниках перед обновлением.

Что делать, если в окружении стояли LiteLLM 1.82.7 или 1.82.8? Считать скомпрометированными все секреты, доступные процессу Python: SSH-ключи, облачные ключи, содержимое .env, конфигурации Kubernetes. Обновить зависимость до проверенной версии, заменить секреты и проверить индикаторы компрометации, например необычный сервис sysmon.service и поды node-setup в пространстве kube-system.

Заключение

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

View the original on Хабр →

KioskNews shows a cleaned-up reading view extracted from the publisher’s page — the original always lives on their site, not ours.