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.