Start Debugging

Claude Code 2.1.187 не дает песочнице читать ваши ключи AWS

Новая настройка sandbox.credentials в Claude Code v2.1.187 запрещает чтение файлов с учетными данными и сбрасывает секретные переменные окружения перед запуском команд Bash в песочнице. Почему стандартная политика чтения была дырой и как ее закрыть.

У песочницы Bash в Claude Code всегда была асимметрия, которая дает о себе знать, как только вы читаете мелкий шрифт: запись она блокирует жестко, а чтение полностью открыто. Начиная с v2.1.187, выпущенной 2026-06-24, наконец появилось полноценное решение. Новая настройка sandbox.credentials запрещает чтение конкретных файлов с учетными данными и сбрасывает секретные переменные окружения до запуска любой команды в песочнице.

Почему стандартная политика чтения была дырой

Песочница ограничивает запись рабочим каталогом и временным каталогом сессии, а сетевой трафик направляет через прокси со списком разрешенных. Но ее стандартное поведение при чтении таково: “доступ на чтение ко всему компьютеру, кроме определенных запрещенных каталогов”. Сюда явно входят ~/.aws/credentials и ~/.ssh/. Вдобавок команды Bash в песочнице наследуют окружение родительского процесса, поэтому GITHUB_TOKEN или NPM_TOKEN, экспортированный в вашем shell, виден каждой команде, которую запускает Claude.

Это важно, потому что сетевая сторона не герметична. Встроенный прокси принимает решение о разрешении по имени хоста, которое присылает клиент, и не инспектирует TLS. Разрешите широкий домен вроде github.com, и у скомпрометированной команды или команды с инъекцией промпта появится правдоподобный путь для эксфильтрации. Доступ на чтение к вашим ключам плюс пригодный канал выхода - это именно та комбинация, которой вы не хотите у агента, работающего без присмотра.

Как работает sandbox.credentials

В новом блоке два массива, files и envVars. Перечисленные файлы запрещаются для чтения внутри песочницы, тем же механизмом, что применяет filesystem.denyRead, а перечисленные переменные окружения сбрасываются перед запуском каждой команды в песочнице.

{
  "sandbox": {
    "enabled": true,
    "credentials": {
      "files": [
        { "path": "~/.aws/credentials", "mode": "deny" },
        { "path": "~/.ssh", "mode": "deny" }
      ],
      "envVars": [
        { "name": "GITHUB_TOKEN", "mode": "deny" },
        { "name": "NPM_TOKEN", "mode": "deny" }
      ]
    }
  }
}

Каждая запись несет "mode": "deny", и сейчас это единственное поддерживаемое значение. Явное поле оставляет схему открытой для будущих режимов. Пути к файлам следуют тем же правилам префиксов, что и остальной sandbox.filesystem.*: ~/ - это ваш домашний каталог, / - абсолютный путь, а путь без префикса - относительно проекта.

Зачем отдельный блок, а не только denyRead

Запретить чтение учетных данных можно было и через filesystem.denyRead. Смысл нового блока в том, что он группирует запреты на файлы со сбросом переменных окружения и объединяет их по всем областям конфигурации. Записи из пользовательских, проектных и управляемых настроек объединяются, и поскольку deny - единственный режим, любая область может добавить ограничения, но ни одна не может их убрать.

Это делает его удобным рычагом для управляемых развертываний. Раздайте из вашего MDM запреты на ~/.aws и ~/.ssh плюс сброс токенов, и разработчики не смогут расширить их локально. Он естественно сочетается с жесткой политикой: enabled: true, failIfUnavailable: true и allowUnsandboxedCommands: false.

Две оговорки, о которых стоит знать

Встроенного списка запретов нет. Ограничиваются только те файлы и переменные, которые вы назовете, поэтому пустая конфигурация не защищает ничего. Настройка также затрагивает только команды Bash в песочнице. Чтобы убрать учетные данные Anthropic и облачных провайдеров из всех подпроцессов независимо от песочницы, задайте вместо этого переменную окружения CLAUDE_CODE_SUBPROCESS_ENV_SCRUB.

Если вы запускаете Claude Code в режиме auto-allow на репозитории, которому не полностью доверяете, это та настройка, которую стоит добавить сегодня. Все подробности есть в документации по песочнице.

Comments

Sign in with GitHub to comment. Reactions and replies thread back to the comments repo.

< Назад