Збережи ключ один раз
macOS: security add-generic-password -a "$USER" -s NAME -w · Windows: Set-Secret -Name NAME · Linux: secret-tool store --label=NAME service NAME. Кожна команда спитає значення.
AI-агенти для коду · Ризик · CWE-798 · OWASP LLM02
Ключ, вставлений у конфіг MCP, .env, який вантажить скіл, тека на кшталт ~/.aws, яку агенту можна відкривати: кожен на відстані одного читання від агента і від усього, що ним керує.
.mcp.json (Claude Code) −ключ у файлі+ключ зі сховища{ "mcpServers": { "github": {− "env": { "GITHUB_TOKEN": "ghp_••••••••••••" }+ "env": { "GITHUB_TOKEN": "${GITHUB_TOKEN}" } } } }
Агент читає файли, щоб працювати. Ключ у файлі, який він може прочитати, може потрапити в промпт, лог, коміт чи запит на сервер, а інструкція, схована в README чи на сторінці, може попросити саме цього. Ключ у сховищі читає лише програма, яку ти з ним запускаєш.
| Місце | Як це виглядає |
|---|---|
| Конфіг MCP-сервера | Токен в env, в аргументах сервера, в його URL чи заголовку. |
| .env, який вантажить скіл чи скрипт | source .env або grep / cut одного рядка з чужого .env. |
| Теки з ключами | Правила читання, що відкривають агенту ~/.ssh, ~/.aws, ~/.gnupg, ~/.kube, .npmrc чи .netrc. |
| Самотній файл із ключами | Файл із ключами в теці агента, який уже ніхто не читає. |
macOS: security add-generic-password -a "$USER" -s NAME -w · Windows: Set-Secret -Name NAME · Linux: secret-tool store --label=NAME service NAME. Кожна команда спитає значення.
У профілі shell чи скрипті: export NAME="$(security find-generic-password -a "$USER" -s NAME -w)", а в конфігу на місці ключа постав посилання: ${NAME} у Claude Code, ${env:NAME} у VS Code і Cursor. Для Claude Desktop запускай сервер через маленький скрипт, що читає ключ зі сховища.
Видали правила, що відкривають теки з ключами, або звузь їх до однієї потрібної теки; тоді агент питатиме перед читанням ключів.
На Маку NeuroShield може сам перенести ключ із .env скіла в Keychain і переписати рядок, з копією і Undo.
Він читає налаштування кожного агента, конфіги MCP, скіли й .env, які вони вантажать, і називає ключ, файл і рядок. Значення не покидає файл.
Це тримає ключ поза git, а не поза досяжністю агента. Агент читає файли на диску, ігноровані чи ні.
Ні. Він читає локально і показує лише назви ключів.
Перевірка безкоштовна: скільки в тебе агентів і що вони можуть. Деталі й виправлення - у Shields.