Аннотация
Sandbox ограничивает не «интеллект агента», а полномочия конкретных процессов: какие файлы они видят, что могут изменить и с кем способны связаться. Поэтому встроенный sandbox для shell и контейнер вокруг всего coding agent решают разные задачи. В Claude Code первый не охватывает встроенные файловые и веб-инструменты, локальные MCP-серверы и hooks; внешняя граница вокруг процесса охватывает локальное исполнение этих компонентов, но не полномочия удалённых сервисов. Даже внутри неё остаются разрешённые записи, доступные credentials и каналы отправки данных.12
Это обзор документации и исходного кода, данные на 2026-11-08. Предполагается один Linux-хост, на котором агент читает репозиторий, меняет код и запускает инструменты. Рассмотрены bubblewrap v0.13.1, отдельные механизмы Linux v6.12, Codex 0.167.0 и снимки обновляемой документации Claude Code и Docker на дату обзора. Эти снимки не гарантируют поведение установленной сборки. Runtime-проверки, escape-тесты и бенчмарки не проводились; предлагаемый ниже профиль не испытан. Основной вывод: выбирать нужно не название sandbox, а проверяемую границу для каждого инструмента и каждого оставленного ему credential.34516
Введение
Вопрос безопасности coding agent начинается раньше первой подозрительной команды. Агент получает текст из репозитория, результатов поиска и ответов инструментов; такой текст может содержать инструкции атакующего. Работа об indirect prompt injection показывает сам механизм переноса инструкций через полученные данные. Это не исследование Linux-изоляции: полезно разделять изменение решения модели и возможность операционной системы исполнить это решение.7
Цель обзора — установить, чей процесс получает право читать, писать и подключаться после разрешения tool call. Permission policy отвечает, разрешён ли вызов; OS sandbox ограничивает уже выполняющийся код. В этом и состоит отличие анализа границ от выбора harness, организации headless-сессии или описания MCP-транспорта: один разрешённый инструмент может действовать с гораздо большими полномочиями, чем другой инструмент того же агента.28
Под credentials далее понимаются не только байты токена или приватного ключа, но и доступ к посреднику, способному выполнить операцию от чужого имени. SSH agent — наглядный пример: OpenSSH предупреждает, что атакующий с доступом к agent может аутентифицироваться загруженными identities, не извлекая материал ключа. Следовательно, скрыть файл ключа и отобрать возможность использовать ключ — разные требования.9
1. Bubblewrap собирает границу, но не выбирает политику
Определение сопровождающих проекта важнее бытового слова «песочница»:
“bubblewrap is a tool for constructing sandbox environments. bubblewrap is not a complete, ready-made sandbox with a specific security policy.”3
В v0.13.1 bubblewrap всегда создаёт новый mount namespace, а вызывающая программа определяет, какие части файловой системы окажутся внутри. --ro-bind показывает путь с запретом записи, обычный --bind предоставляет bind mount без такого ограничения. Это не копия дерева: разрешённая запись в смонтированный рабочий каталог остаётся записью в предоставленные файлы. Read-only защищает целостность этих файлов, но не скрывает их содержимое.34
Namespaces разделяют разные представления ресурсов. В bubblewrap доступны отдельные user, PID, IPC, network и UTS namespaces; наличие mount namespace не означает автоматического включения остальных. --unshare-net создаёт отдельное сетевое пространство, а последующий --share-net может отменить ранее выбранную сетевую изоляцию. Поэтому проверять следует итоговые аргументы запуска, а не наличие слова bwrap в дереве процессов.34
Seccomp — ещё один слой, а не синоним этого дерева. Опция --seccomp FD загружает подготовленную cBPF-программу. Документация Linux v6.12 прямо говорит: “System call filtering isn’t a sandbox.” Классический фильтр проверяет номера и непосредственные аргументы системных вызовов, но не разыменовывает указатели: самостоятельно прочитать строку pathname или hostname из памяти процесса он не может. Для политики файлов и информационных потоков нужны другие механизмы; внешние brokers — отдельная архитектура.410
no_new_privs также не означает «полномочий больше нет». Его обещание связано с execve: новый исполняемый файл не должен дать привилегии, недоступные до запуска, например через setuid-биты. Документация отдельно исключает из этого обещания изменения без execve, включая получение SCM_RIGHTS. Полезная комбинация namespaces, seccomp и no_new_privs поэтому не отменяет аудит переданных файлов, сокетов и каналов IPC.11
Версионный пример защищает от устаревших обобщений: Linux helper в Codex 0.167.0 описывает bubblewrap как основной filesystem sandbox, seccomp и PR_SET_NO_NEW_PRIVS как дополнительные этапы. В managed proxy mode используются --unshare-net и мост TCP→UDS→TCP. Сводка «Codex на Linux — это Landlock» для этой версии неверна: legacy Landlock в README сохранён, но отклоняется для filesystem-restricted policies из-за изоляции app-server Unix sockets. Это сведения tagged README, не результат запуска бинаря.5
2. Матрица полномочий: инструмент важнее интерфейса
У Claude Code встроенная граница окружает Bash, PowerShell и Monitor commands и их потомков, а не весь процесс клиента. Документация прямо указывает, что denyRead этого sandbox не ограничивает встроенный Read, а allowedDomains не ограничивает WebFetch. Следующая матрица описывает именно этот снимок Claude Code; это не универсальная таблица для всех coding agents.1
| Исполнитель | Чтение | Запись | Соединения при одном shell sandbox | Что меняет контейнер вокруг всего клиента |
|---|---|---|---|---|
| Shell и его потомки | Filesystem policy sandbox | Filesystem policy sandbox | Network namespace и proxy policy | Добавляет внешние mounts, сеть и ограничения runtime12 |
| Read, Edit, Write и другие файловые tools | Отдельные permission rules | Отдельные permission rules | Shell policy не определяет их доступ | Доступ ограничен файловой системой контейнера, включая выданные mounts128 |
| WebFetch и WebSearch | Получают данные своим путём | Не ограничиваются shell filesystem policy | Shell allowedDomains на них не распространяется | Подчиняются внешней сети клиента, но разрешённый веб-запрос остаётся каналом12 |
| Локальный stdio MCP | Права процесса сервера | Права процесса сервера | Не входит в Bash sandbox | Сервер, запущенный внутри, ограничен внешней границей112 |
| Удалённый HTTP MCP | Права удалённого сервиса | Права удалённого сервиса | Ограничения соединения клиента не задают права сервера | Контейнеризует клиентскую сторону, не удалённое исполнение1213 |
| Command hooks | Права пользователя клиента | Права пользователя клиента | Не входят в Bash sandbox | Локальный handler внутри контейнера получает его ограничения214 |
Это различие имеет практический смысл даже без атаки. Запрет чтения секрета из shell не доказывает, что тот же секрет не загрузит файловый tool. И наоборот, Read(path) deny не является общим запретом для произвольного Python-процесса, открывающего файл косвенно. Документация permissions указывает best-effort охват некоторых способов чтения и отдельно рекомендует sandbox для OS-level enforcement. Нужны обе политики, согласованные с реальными исполнителями.18
Hooks — не обязательно shell: reference перечисляет также HTTP, MCP tool, prompt и agent handlers. Для command hooks явно заявлены полные пользовательские права и окружение Claude Code; HTTP hooks имеют собственные URL/env controls. Поэтому строку «hooks ограничены» надо раскрывать: локальный handler можно поместить во внешнюю границу, но обработчик на удалённом HTTP endpoint выполняется в другом месте.1415
MCP аналогично не переносит sandbox автоматически. Claude Code описывает stdio server как локальный процесс, а ограничение по roots/list должен реализовать сам сервер. В Codex 0.167.0 есть экспериментальный кооперативный контракт codex/sandbox-state: сервер получает метаданные полномочий и может вызвать sandbox launcher. Launcher доступен только local stdio servers; даже HTTP на loopback не устанавливает общий filesystem. Это не доказательство автоматической изоляции любого MCP tool.1213
3. Credentials остаются внутри разрешённого доступа
В рассмотренной документации Claude Code запись по умолчанию ограничена рабочим, добавленными и временным каталогами, с отдельными защищёнными путями; чтение гораздо шире и включает credential files. Environment наследуется от клиента. Блок sandbox.credentials позволяет запрещать указанные файлы и переменные, но встроенного универсального deny list нет. Нельзя делать вывод о конфиденциальности из одного факта, что команда не способна изменить домашний каталог.1
Модель credential-доступа стоит разложить на три вопроса: может ли процесс получить значение; может ли вызвать операцию через agent/socket; может ли изменить файл, который позднее загрузит более привилегированный процесс. Последний путь особенно неприятен: shell startup files, каталоги исполняемых файлов и настройки hooks могут стать отложенным исполнением. Claude Code защищает ряд собственных конфигурационных путей именно потому, что их изменение позволило бы добавить разрешения или процессы вне shell sandbox.1
Удаление SSH_AUTH_SOCK из окружения убирает указатель на endpoint, но не является самостоятельной политикой доступа к самому сокету. В warning OpenSSH речь идёт об agent forwarding; применение того же принципа к локально предоставленному сокету — архитектурный вывод: если endpoint доступен и принимает запросы, права использования identities остаются независимо от видимости файла ключа. Подтверждения пользователя, ограничения agent и серверная авторизация могут дополнительно сдерживать операции; успешная аутентификация не гарантирована.9
Открытые дескрипторы — ещё один способ передать полномочия без нового поиска pathname. В исходнике bubblewrap v0.13.1 закрытие лишних FDs в PID 1 сопровождается пояснением, что другие FDs передаются дочернему процессу. Следовательно, скрытый путь нельзя считать отзывом уже открытой ссылки. Это условный риск наследования при соответствующем запуске, а не утверждение, что любой wrapper оставляет секретные FDs: закрытие до запуска и close-on-exec меняют результат.16
UNIX sockets способны передавать такие ссылки через SCM_RIGHTS: unix(7) уточняет, что передаётся reference на open file description, а не просто число дескриптора. README отдельного Anthropic Sandbox Runtime также прямо исключает inherited FDs и SCM_RIGHTS из гарантий блокировки создания сокетов. Здесь рассмотрен commit 27fce0dbd58925061c57eb8b38707b9a98349dad; соответствие этого standalone runtime конкретной bundled-версии Claude Code не установлено.1718
Почему read-only socket не становится read-only API
Сетевой namespace и pathname UNIX socket принадлежат разным проверкам. В Linux v6.12 unix_find_other ищет pathname socket через файловую систему, а abstract socket — с учётом network namespace. Если pathname endpoint предоставлен внутри mount namespace, сам по себе новый network namespace не отменяет его достижимость. По-прежнему могут запретить соединение DAC, LSM, seccomp или политика сервера.1917
Read-only bind mount такого endpoint не превращает RPC в режим чтения. Статическая цепочка в Linux v6.12 следующая: unix_find_bsd вызывает path_permission(..., MAY_WRITE); helper передаёт проверку в inode_permission; проверка read-only superblock в sb_permission относится к regular files, directories и symlinks, не к socket inode. Эти функции не требуют получения права записи в mount для соединения. Вывод условный: при остальных разрешающих проверках через ro-смонтированный socket можно отправлять изменяющие запросы, если их поддерживает сервер.192021
У Claude Code есть и дополнительная Linux-специфика: список путей allowUnixSockets на Linux и WSL2 игнорируется. В документации описан seccomp filter, блокирующий socket(AF_UNIX, ...); при его отсутствии Unix-socket calls не блокируются. allowAllUnixSockets: true снимает это ограничение и также разрешает AF_VSOCK на Linux. Поэтому «в настройках нет разрешённых socket paths» — недостаточное свидетельство: существенны платформа и фактическое наличие фильтра.15
4. Fallback — часть модели полномочий
Нужно различать три разных перехода наружу. excludedCommands сразу запускает совпавшие команды без sandbox. allowUnsandboxedCommands управляет retry с dangerouslyDisableSandbox, обычно после ошибки внутри. failIfUnavailable определяет поведение при невозможности запустить сам sandbox. Закрытие retry не закрывает exclusions и не заменяет проверку startup failure.115
В snapshot Claude Code allowUnsandboxedCommands: false заставляет игнорировать параметр unsandboxed retry, но при работающем sandbox исключения всё ещё существенны. failIfUnavailable: true, вместе с включённым sandbox, заставляет завершиться при неподдерживаемой платформе или провале dependency check; без этого ключа описан запуск команд без sandbox. Если проверка пройдена, а инициализация затем не удалась, документирован отказ sandboxed commands, а не обещание остановить весь клиент.115
Важен не только текст значения, но и его происхождение. В актуальном описании отключение retry через managed settings или --settings делает sandbox admin-required, и ослабляющие repository settings, включая exclusions, игнорируются. Пользовательское false также удерживается против проектного true, но само не делает sandbox admin-required; документация отдельно отмечает изменение приоритета в v2.1.285. Переносить сегодняшнюю таблицу приоритетов на старую сборку нельзя.1
Разрешение команды и разрешение выхода из sandbox тоже могут пересекаться неожиданно: matching allow rule способен одобрить unsandboxed retry без prompt. Следовательно, проверять следует итоговые исключения, permission mode и источник настроек, а не только sandbox.enabled. Рабочая совместимость, достигнутая автоматическим выходом наружу, — другой режим безопасности, не успешное исполнение исходной политики.1
5. Egress allowlist не равен DLP
На Linux Claude Code описывает отдельный network namespace без прямого выхода и внешний proxy, куда команды направляются через proxy environment variables. Инструмент, игнорирующий эти переменные, согласно документации не подключится даже к разрешённому хосту. Это отказ совместимости, а не доказанный обход изоляции. В standalone runtime заголовок “Linux proxy bypass” сопровождается именно текстом “unable to connect to the internet”; читать один заголовок как описание успешного bypass было бы ошибкой.118
Но разрешённый маршрут сам может служить утечке. Built-in proxy по умолчанию не завершает TLS и не исследует содержимое шифрованного трафика; экспериментальное TLS termination для credential substitution само по себе не добавляет content filtering. Разрешение общего хостинга репозиториев или другого многоарендного домена не ограничивает получателя внутри этого сервиса. Документация также предупреждает о domain fronting. Поэтому allowlist — контроль destinations с оговорками, не обещание DLP.1
Даже корректно разрешённый запрос может быть вредным по смыслу. Условный поиск строки из локального файла через https://example.org/ передаёт данные, хотя инструмент называется «поиск» или «чтение». Работа об indirect injection отдельно рассматривает read/search/retrieve operations как исходящий канал. Это объясняет, почему политика «запретить отправляющие tools» недостаточна, если оставшиеся tools уже отправляют аргументы наружу.7
Имя разрешённого домена не отвечает и на вопрос о конечном адресе. Снимок Claude Code описывает resolved-address check для ряда локальных адресов, но допускает разрешённые intranet hostnames в private ranges; при upstream corporate proxy разрешение имени выполняет следующий узел, и локальная проверка пропускается. Отдельный pinned runtime документирует свои правила direct dial и deniedResolvedAddresses. Эти описания нельзя склеить в обещание одной универсальной политики для любой установки.118
Наконец, у whole-process sandbox есть канал, который часто оставляют сознательно: model API. Claude Code указывает, что prompts и прочитанные файлы передаются провайдеру с sandbox или без него. Ограничив сеть shell, можно защититься от произвольного исходящего запроса команды, но не объявить локальными данные, уже включённые клиентом в модельный контекст. Их допуск нужно решать до чтения инструментами.2
6. Что добавляет контейнер и чего он не обещает
Сильная сторона внешнего контейнера — ширина охвата: локальные file tools, command hooks и stdio MCP, запущенные внутри, находятся за общей OS-границей вместе с клиентом. Это закрывает разрыв, который принципиально оставляет per-shell wrapper. Кроме того, образ и mounts позволяют явно определить доступное окружение. Однако документация Claude Code сразу оговаривает: writable project остаётся изменяемым, разрешённый egress может унести доступные данные.2
Bind mounts — не исключение из этой оговорки, а её механизм. Docker указывает, что по умолчанию они writable и контейнер может создавать, изменять и удалять host files через них. ro ограничивает запись, но чтение оставляет. Для деревьев с submounts важен и рекурсивный режим: документация связывает recursive read-only с версией ядра и выбранными mount options. Запись ro в описании верхнего каталога не заменяет проверки фактического дерева mounts.22
Rootless уменьшает привилегии инфраструктуры: daemon и контейнеры работают без host root внутри user namespace. Это отличается от userns-remap, где daemon остаётся root. Но rootless не отзывает добровольно предоставленный доступ к рабочему дереву или токену. Его правильная роль — снижение последствий уязвимости daemon/runtime, а не превращение доступных данных в недоступные.2322
Доступ к Docker daemon socket особенно плохо сочетается с обещанием изоляции. Docker предупреждает, что управляющий daemon субъект может создать контейнер с произвольно предоставленной host filesystem. Для rootful daemon это возвращает мощные полномочия хоста; для rootless предел иной, но остаётся власть над ресурсами соответствующего daemon. Ограничение нужно ставить перед API, а не полагаться на ro у socket mount.623192021
Контейнер также не означает неизменяемый hardening profile. Docker позволяет переопределить seccomp, в том числе отключить default profile через unconfined; --privileged предоставляет capabilities, устройства и существенно ослабляет AppArmor/SELinux-ограничения. Исправлять несовместимость вложенного sandbox такими флагами — значит менять внешнюю границу. У Claude Code отдельно документирован ослабляющий enableWeakerNestedSandbox, а не эквивалент полноценного режима.24251
Обычные Linux containers на одном хосте разделяют kernel, в отличие от VM с собственным kernel. Docker прямо связывает неполную изоляцию с комбинациями capabilities, mounts и kernel vulnerabilities. Поэтому для существенно недоверенного исполнения вопрос VM остаётся содержательным: это другая граница, а не просто ещё один вариант упаковки. Здесь нет измерений, позволяющих ранжировать конкретные runtimes по вероятности escape.266
Доступность требует отдельной политики. Cgroups дают учёт и ограничение ресурсов, но не являются правилами доступа к данным. При этом Docker по умолчанию не задаёт container resource constraints: наличие механизма не означает настроенных лимитов. CPU и память следует проверять отдельно от файлов и сети; hard и soft memory limits имеют разный смысл. Лимит RAM, в свою очередь, не является бюджетом удалённого API.627
Есть и «парадокс offline-агента». Docker none оставляет только loopback; клиент внутри такого namespace не достигнет внешнего model API обычным сетевым путём. Решение — разделить сетевой control plane и offline tool executor, использовать локальную модель либо оставить строго определённый посредник. Это предлагаемые архитектурные варианты, не проверенные здесь конфигурации; каждый добавленный broker нужно учитывать как новую authority, а не как отсутствие сети.282
7. Предлагаемый минимальный профиль: требования, не рецепт
Ниже — неиспытанный проект профиля для одного Linux-host coding workflow. Это требования к последующей настройке и приёмке, не готовая команда безопасности. Отправная точка: внешний контейнер вокруг клиента и локальных helpers, без privileged, с минимальными capabilities и включённым подходящим seccomp profile; rootless предпочтителен там, где совместим с задачей. Per-shell sandbox внутри добавляет более узкие ограничения, но не должен становиться предлогом расширить внешние привилегии.2232425
Файлы. Предлагается выдавать отдельную рабочую копию проекта и необходимые disposable caches, а не весь home. Toolchain — по возможности read-only; необходимые writable paths перечисляются явно. Credentials, конфигурация запуска и установка sandbox должны быть вне разрешённой записи. Это предотвращает не только немедленную модификацию хоста: pinned README srt предупреждает, что writable установка в <project>/node_modules/ может быть переписана и выполнена уже без sandbox при следующем запуске.2218
Credentials и IPC. Предлагается начинать с минимального environment и без SSH-agent, Docker и других административных сокетов; требуемые credentials выдавать отдельно по задаче. Bubblewrap предоставляет --clearenv, но сам выбор необходимых переменных остаётся политикой launcher. Передачу FDs, stdio и IPC следует инвентаризировать, а посреднику давать узкие операции, не общий административный API. Read-only mount endpoint не считается достаточным ограничением его протокола.41617192021
Сеть. Предлагается разделить право клиента обращаться к model API и право сборочных процессов получать зависимости. Для воспроизводимого локального шага желательно заранее подготовить входы и закрыть egress executor; для online-шагов — определить destinations и разрешённые операции посредника. В карточке профиля надо явно записать, что передаётся провайдеру, какие данные допустимо читать и какие разрешённые endpoints могут принимать пользовательский payload. Domain allowlist эту классификацию не выполняет.2821
Инструменты и настройки. Предлагается отдельно разрешать file/web tools, stdio MCP и каждый тип hook, не наследовать доверие от названия sandbox. Для Claude Code потребуются проверка exclusions, отключение unsandboxed retries и startup fail-closed с учётом версии и происхождения settings. Для удалённого MCP следует отдельно определить server-side полномочия; для кооперативного Codex MCP — проверить использование launcher, а не наличие metadata в ответе.1814121315
Приёмка и результат. Предлагается проверять на одноразовых fixtures отказы чтения, записи, соединений и startup при недоступном sandbox, затем сопоставлять effective mounts, фильтры и settings с профилем. Эти проверки здесь не выполнялись. CPU/RAM и лимиты времени требуют собственной проверки. Изменения рабочего дерева всё равно должны проходить review и тесты: разрешение писать код даёт возможность написать вредный код, не нарушая ни одного namespace или syscall rule.22271029
Дискуссионные вопросы и противоречия
«Sandbox включён — агент ограничен» против «часть tools снаружи». Первая позиция верна для выполняемой shell-команды: ограничения действительно принудительно применяет OS. Вторая столь же верна для built-in tools, hooks и MCP, которых эта граница не охватывает. Расхождение устраняется уточнением субъекта, а не выбором победителя. Whole-process container или внешний runtime меняет субъект изоляции, но не переносит границу на remote server.1212
«Rootless безопаснее» против «контейнер всё ещё меняет хост». Rootless снижает привилегии daemon/runtime; writable mount по-прежнему предоставляет право изменять выданные файлы. Источники говорят о разных уровнях authority и не противоречат друг другу. Аналогично, отдельный network stack не гарантирует отсутствия предоставленных pathname sockets, а ro у обычных файлов не гарантирует read-only RPC.2322192021
«Уменьшить набор tools» против «разрешённого набора достаточно для атаки». AgentDojo рассматривает предварительный tool filter как защиту, но отмечает предел: нужные для полезной задачи инструменты могут одновременно позволять выполнить цель атакующего. Это моделируемые среды с искусственными данными, не escape benchmark и не оценка актуальных coding agents. Полезен причинный вывод, не перенос attack success rates: OS confinement сокращает доступные действия, но не определяет доброкачественность каждого разрешённого действия.29
Недостаточность данных
Не установлены effective settings и dependencies конкретного хоста, реальные inherited FDs, список доступных sockets и поведение установленной сборки при отказах. Для этого нужны наблюдение запуска и негативные тесты, а не дальнейшее цитирование reference. Не установлено и соответствие standalone srt commit bundled runtime конкретного Claude Code; объединять гарантии этих артефактов было бы недоказанным шагом.151618
Не оценены стоимость изоляции, совместимость реального toolchain, устойчивость к kernel escape и полномочия конкретных удалённых MCP-сервисов. Прочитаны релевантные разделы документации, исходников и двух академических работ, но систематический академический обзор не проводился. Старые исследования injection дают объяснение классов угроз, а не вероятность компрометации выбранного deployment в 2026 году.612729
Заключение
Bubblewrap предоставляет строительные блоки границы, а защиту определяет политика launcher. Shell sandbox полезен против произвольного доступа запущенной команды, но у агента остаются другие исполнители. Контейнер вокруг всего клиента расширяет охват на локальные tools и helpers; при этом writable mounts, credentials, IPC, разрешённая сеть и remote MCP остаются выданными полномочиями, а общий kernel — общей поверхностью риска.312626
Практическая единица выбора — строка «исполнитель → читать → писать → соединяться → действовать от чьего имени», дополненная правилами отказа. Надёжный профиль должен объяснять каждое оставленное право и не лечить отказ тихим unsandboxed fallback. Даже корректно исполненный профиль не сертифицирует патч: ограничение ущерба и проверка смысла результата — разные задачи.11529
Quality Metrics
| Metric | Value |
|---|---|
| Sources found | 95 |
| Sources read | 36 |
| Sources cited | 29 |
| Official/documentation | 27 |
| Academic sources | 2 |
| Citation coverage | 100% (53/53 содержательных абзацев; функция coverage из check_report.py, строки таблиц не учитываются) |
| Main-text words | 3420 (без frontmatter, Quality Metrics и определений сносок; WORD_RE из checker) |
| Checker words | 4011 (более широкий счёт: с Quality Metrics и текстом сносок, без URL) |
| Count units | Found — distinct документы/кандидаты после дедупликации; read/cited — distinct работы, не поисковые запросы и не альтернативные копии |
| Reading scope | Релевантные полнотекстовые разделы; не систематический академический обзор; cited abstract-only — 0 |
| Evidence limits | Документация и статический анализ; runtime, escape-тесты, бенчмарки — не выполнялись |
| Counter-arguments | Сопоставлены границы shell/whole-process, rootless/mounts, network/IPC и tool filtering/разрешённое злоупотребление |
Anthropic. «Configure the sandboxed Bash tool». Rolling vendor documentation snapshot 2026-11-08; no page publication/update date or single CLI version asserted; обращение 2026-11-08. https://code.claude.com/docs/en/sandboxing ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎
Anthropic. «Choose a sandbox environment». Rolling vendor documentation snapshot 2026-11-08; no page publication/update date or single CLI version asserted; обращение 2026-11-08. https://code.claude.com/docs/en/sandbox-environments ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎
Проект containers/bubblewrap. «GitHub - containers/bubblewrap at v0.13.1 · GitHub». v0.13.1; обращение 2026-11-08. https://github.com/containers/bubblewrap/tree/v0.13.1 ↩︎ ↩︎ ↩︎ ↩︎ ↩︎
Проект containers/bubblewrap. «bubblewrap/bwrap.xml at v0.13.1 · containers/bubblewrap · GitHub». v0.13.1; обращение 2026-11-08. https://github.com/containers/bubblewrap/blob/v0.13.1/bwrap.xml ↩︎ ↩︎ ↩︎ ↩︎ ↩︎
OpenAI. «codex-linux-sandbox». Codex 0.167.0, tag rust-v0.167.0; release metadata published_at 2026-11-06T01:40:00Z saved separately; обращение 2026-11-08. https://raw.githubusercontent.com/openai/codex/rust-v0.167.0/codex-rs/linux-sandbox/README.md ↩︎ ↩︎
Docker. «Docker Engine security». обновляемая документация; обращение 2026-11-08. https://docs.docker.com/engine/security/ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎
Kai Greshake et al.. «Not what you’ve signed up for: Compromising Real-World LLM-Integrated Applications with Indirect Prompt Injection». arXiv:2302.12173v2, 2023-05-05; обращение 2026-11-08. https://arxiv.org/html/2302.12173v2 ↩︎ ↩︎ ↩︎
Anthropic. «Configure permissions». Rolling vendor documentation snapshot 2026-11-08; no page publication/update date or single CLI version asserted; обращение 2026-11-08. https://code.claude.com/docs/en/permissions ↩︎ ↩︎ ↩︎ ↩︎
OpenBSD / OpenSSH. «OpenBSD manual page server». OpenBSD-current, дата страницы 2026-11-02; обращение 2026-11-08. https://man.openbsd.org/ssh.1 ↩︎ ↩︎
Разработчики Linux. «Seccomp BPF (SECure COMPuting with filters)». Linux v6.12; обращение 2026-11-08. https://docs.kernel.org/6.12/userspace-api/seccomp_filter.html ↩︎ ↩︎
Разработчики Linux. «No New Privileges Flag». Linux v6.12; обращение 2026-11-08. https://docs.kernel.org/6.12/userspace-api/no_new_privs.html ↩︎
Anthropic. «Connect Claude Code to tools via MCP». Rolling vendor documentation snapshot 2026-11-08; no page publication/update date or single CLI version asserted; обращение 2026-11-08. https://code.claude.com/docs/en/mcp ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎
OpenAI. «Codex MCP runtime». Codex 0.167.0, tag rust-v0.167.0; обращение 2026-11-08. https://raw.githubusercontent.com/openai/codex/rust-v0.167.0/codex-rs/codex-mcp/README.md ↩︎ ↩︎ ↩︎
Anthropic. «Hooks reference». Rolling vendor documentation snapshot 2026-11-08; no page publication/update date or single CLI version asserted; обращение 2026-11-08. https://code.claude.com/docs/en/hooks ↩︎ ↩︎ ↩︎
Anthropic. «All settings». Rolling vendor documentation snapshot 2026-11-08; no page publication/update date or single CLI version asserted; обращение 2026-11-08. https://code.claude.com/docs/en/settings-reference ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎
Проект containers/bubblewrap.
bubblewrap.c(идентификатор исходного файла, без документного заголовка). v0.13.1; обращение 2026-11-08. https://raw.githubusercontent.com/containers/bubblewrap/v0.13.1/bubblewrap.c ↩︎ ↩︎ ↩︎Linux man-pages project. «unix(7) — Linux manual page». Linux man-pages 6.19; page date 2026-02-08; обращение 2026-11-08. https://man7.org/linux/man-pages/man7/unix.7.html ↩︎ ↩︎ ↩︎
Anthropic. «Anthropic Sandbox Runtime (srt)». @anthropic-ai/sandbox-runtime commit 27fce0dbd58925061c57eb8b38707b9a98349dad, commit date 2026-11-06T01:44:21Z; обращение 2026-11-08. https://raw.githubusercontent.com/anthropics/sandbox-runtime/27fce0dbd58925061c57eb8b38707b9a98349dad/README.md ↩︎ ↩︎ ↩︎ ↩︎ ↩︎
Разработчики Linux.
net/unix/af_unix.c(идентификатор исходного файла, без документного заголовка). Linux v6.12; обращение 2026-11-08. https://raw.githubusercontent.com/torvalds/linux/v6.12/net/unix/af_unix.c ↩︎ ↩︎ ↩︎ ↩︎ ↩︎Разработчики Linux.
include/linux/fs.h(идентификатор исходного файла, без документного заголовка). Linux v6.12; обращение 2026-11-08. https://raw.githubusercontent.com/torvalds/linux/v6.12/include/linux/fs.h ↩︎ ↩︎ ↩︎ ↩︎Разработчики Linux.
fs/namei.c(идентификатор исходного файла, без документного заголовка). Linux v6.12; обращение 2026-11-08. https://raw.githubusercontent.com/torvalds/linux/v6.12/fs/namei.c ↩︎ ↩︎ ↩︎ ↩︎Docker. «Bind mounts». обновляемая документация; обращение 2026-11-08. https://docs.docker.com/engine/storage/bind-mounts/ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎
Docker. «Rootless mode». обновляемая документация; обращение 2026-11-08. https://docs.docker.com/engine/security/rootless/ ↩︎ ↩︎ ↩︎ ↩︎
Docker. «Seccomp security profiles for Docker». обновляемая документация; обращение 2026-11-08. https://docs.docker.com/engine/security/seccomp/ ↩︎ ↩︎
Docker. «Running containers». обновляемая документация; обращение 2026-11-08. https://docs.docker.com/engine/containers/run/ ↩︎ ↩︎
Docker. «What is a container?». обновляемая документация; обращение 2026-11-08. https://docs.docker.com/get-started/docker-concepts/the-basics/what-is-a-container.md ↩︎ ↩︎
Docker. «Resource constraints». обновляемая документация; обращение 2026-11-08. https://docs.docker.com/engine/containers/resource_constraints/ ↩︎ ↩︎
Docker. «None network driver». обновляемая документация; обращение 2026-11-08. https://docs.docker.com/engine/network/drivers/none/ ↩︎ ↩︎
Edoardo Debenedetti et al.. «AgentDojo: A Dynamic Environment to Evaluate Prompt Injection Attacks and Defenses for LLM Agents». arXiv:2406.13352v3, 2024-11-24; обращение 2026-11-08. https://arxiv.org/html/2406.13352v3 ↩︎ ↩︎ ↩︎ ↩︎