BUG: API key agent stockée en clair dans agent-state.json #21

Closed
opened 2026-08-10 21:02:20 +02:00 by nonobis · 1 comment
Owner

🎯 Contexte

L'API key de l'agent est persistée en clair dans agent-state.json (0600). Si le fichier est lu (root, backup, compromission du volume), la clé est exposée.

📚 Référence spec (MASTER_SPECIFICATION.md v2.0)

4.3 Sécurité : API Keys HMACSHA256 P0 ; secrets jamais en clair
Règle .opencode-local/heimdall-agent-pitfalls.md : « AgentState : API key jamais en clair sur disque (IDataProtector) »

🔍 État actuel (vérifié dans le code)

AgentState.Persist() écrit l'API key brute dans agent-state.json (permissions 0600). Le commentaire de code assume et recommande TPM/keystore en production.

🧩 À faire

  • Chiffrer l'API key au repos (IDataProtector ou clé machine)
  • Gérer la migration du fichier existant
  • Option : keystore/TPM documenté pour la prod

🧪 Critères d'acceptation

  • agent-state.json ne contient plus la clé en clair
  • L'agent fonctionne après redémarrage (déchiffrement OK)

📁 Fichiers concernés

src/Heimdall.Agent/Services/AgentState.cs, src/Heimdall.Agent/Program.cs

## 🎯 Contexte L'API key de l'agent est persistée **en clair** dans `agent-state.json` (0600). Si le fichier est lu (root, backup, compromission du volume), la clé est exposée. ## 📚 Référence spec (MASTER_SPECIFICATION.md v2.0) **4.3 Sécurité** : API Keys HMACSHA256 P0 ; secrets jamais en clair Règle `.opencode-local/heimdall-agent-pitfalls.md` : « AgentState : API key jamais en clair sur disque (IDataProtector) » ## 🔍 État actuel (vérifié dans le code) `AgentState.Persist()` écrit l'API key brute dans agent-state.json (permissions 0600). Le commentaire de code assume et recommande TPM/keystore en production. ## 🧩 À faire - [ ] Chiffrer l'API key au repos (IDataProtector ou clé machine) - [ ] Gérer la migration du fichier existant - [ ] Option : keystore/TPM documenté pour la prod ## 🧪 Critères d'acceptation - [ ] agent-state.json ne contient plus la clé en clair - [ ] L'agent fonctionne après redémarrage (déchiffrement OK) ## 📁 Fichiers concernés src/Heimdall.Agent/Services/AgentState.cs, src/Heimdall.Agent/Program.cs
Author
Owner

Fix implémenté : PR #116 — chiffrement de l'API key au repos via IDataProtector (key ring {StateDirectory}/dp-keys, 0700), migration auto des fichiers legacy en clair, fail-fast si protector absent. Tests Agent 197/197 ✅. Échecs Infrastructure/Integration constatés en suite complète = préexistants sur main (fixture Testcontainers), vérifié sur baseline.

Fix implémenté : **PR #116** — chiffrement de l'API key au repos via IDataProtector (key ring `{StateDirectory}/dp-keys`, 0700), migration auto des fichiers legacy en clair, fail-fast si protector absent. Tests Agent 197/197 ✅. Échecs Infrastructure/Integration constatés en suite complète = préexistants sur main (fixture Testcontainers), vérifié sur baseline.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
nonobis/Heimdall#21
No description provided.