Аннотация

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 sandboxFilesystem policy sandboxNetwork namespace и proxy policyДобавляет внешние mounts, сеть и ограничения runtime12
Read, Edit, Write и другие файловые toolsОтдельные permission rulesОтдельные permission rulesShell policy не определяет их доступДоступ ограничен файловой системой контейнера, включая выданные mounts128
WebFetch и WebSearchПолучают данные своим путёмНе ограничиваются shell filesystem policyShell 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

MetricValue
Sources found95
Sources read36
Sources cited29
Official/documentation27
Academic sources2
Citation coverage100% (53/53 содержательных абзацев; функция coverage из check_report.py, строки таблиц не учитываются)
Main-text words3420 (без frontmatter, Quality Metrics и определений сносок; WORD_RE из checker)
Checker words4011 (более широкий счёт: с Quality Metrics и текстом сносок, без URL)
Count unitsFound — 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/разрешённое злоупотребление

  1. 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 ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎

  2. 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 ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎

  3. Проект 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 ↩︎ ↩︎ ↩︎ ↩︎ ↩︎

  4. Проект 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 ↩︎ ↩︎ ↩︎ ↩︎ ↩︎

  5. 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 ↩︎ ↩︎

  6. Docker. «Docker Engine security». обновляемая документация; обращение 2026-11-08. https://docs.docker.com/engine/security/ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎

  7. 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 ↩︎ ↩︎ ↩︎

  8. 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 ↩︎ ↩︎ ↩︎ ↩︎

  9. OpenBSD / OpenSSH. «OpenBSD manual page server». OpenBSD-current, дата страницы 2026-11-02; обращение 2026-11-08. https://man.openbsd.org/ssh.1 ↩︎ ↩︎

  10. Разработчики Linux. «Seccomp BPF (SECure COMPuting with filters)». Linux v6.12; обращение 2026-11-08. https://docs.kernel.org/6.12/userspace-api/seccomp_filter.html ↩︎ ↩︎

  11. Разработчики Linux. «No New Privileges Flag». Linux v6.12; обращение 2026-11-08. https://docs.kernel.org/6.12/userspace-api/no_new_privs.html ↩︎

  12. 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 ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎

  13. 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 ↩︎ ↩︎ ↩︎

  14. 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 ↩︎ ↩︎ ↩︎

  15. 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 ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎

  16. Проект containers/bubblewrap. bubblewrap.c (идентификатор исходного файла, без документного заголовка). v0.13.1; обращение 2026-11-08. https://raw.githubusercontent.com/containers/bubblewrap/v0.13.1/bubblewrap.c ↩︎ ↩︎ ↩︎

  17. 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 ↩︎ ↩︎ ↩︎

  18. 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 ↩︎ ↩︎ ↩︎ ↩︎ ↩︎

  19. Разработчики 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 ↩︎ ↩︎ ↩︎ ↩︎ ↩︎

  20. Разработчики Linux. include/linux/fs.h (идентификатор исходного файла, без документного заголовка). Linux v6.12; обращение 2026-11-08. https://raw.githubusercontent.com/torvalds/linux/v6.12/include/linux/fs.h ↩︎ ↩︎ ↩︎ ↩︎

  21. Разработчики Linux. fs/namei.c (идентификатор исходного файла, без документного заголовка). Linux v6.12; обращение 2026-11-08. https://raw.githubusercontent.com/torvalds/linux/v6.12/fs/namei.c ↩︎ ↩︎ ↩︎ ↩︎

  22. Docker. «Bind mounts». обновляемая документация; обращение 2026-11-08. https://docs.docker.com/engine/storage/bind-mounts/ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎

  23. Docker. «Rootless mode». обновляемая документация; обращение 2026-11-08. https://docs.docker.com/engine/security/rootless/ ↩︎ ↩︎ ↩︎ ↩︎

  24. Docker. «Seccomp security profiles for Docker». обновляемая документация; обращение 2026-11-08. https://docs.docker.com/engine/security/seccomp/ ↩︎ ↩︎

  25. Docker. «Running containers». обновляемая документация; обращение 2026-11-08. https://docs.docker.com/engine/containers/run/ ↩︎ ↩︎

  26. Docker. «What is a container?». обновляемая документация; обращение 2026-11-08. https://docs.docker.com/get-started/docker-concepts/the-basics/what-is-a-container.md ↩︎ ↩︎

  27. Docker. «Resource constraints». обновляемая документация; обращение 2026-11-08. https://docs.docker.com/engine/containers/resource_constraints/ ↩︎ ↩︎

  28. Docker. «None network driver». обновляемая документация; обращение 2026-11-08. https://docs.docker.com/engine/network/drivers/none/ ↩︎ ↩︎

  29. 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 ↩︎ ↩︎ ↩︎ ↩︎