Files
nas-runbooks/common/rotation-secrets-inventaire.md
T
bolbolandClaude Opus 4.8 ac2a1b641e secrets(rotation): B5 -- mot de passe legacy famille 2L2u519w* largement embarque (empreinte, pas de valeur)
Ajout B5 a common/rotation-secrets-inventaire.md, redige selon la doctrine A1 (empreinte
sha256:bbd43b3e, valeur JAMAIS en clair). Sweep unique grep -rlI sur /volume1/docker (08/08/2026)
= ~30 fichiers : ~10 remotes git (.git/config), 7 .env desactives/backups, et DEJA en clair dans le
repo nas-runbooks lui-meme (HEBERGEMENT-SITES-STATIQUES.md, n8n-skills-officiels.md,
tap-gitea-hermes-skills.md, telegram-flood-control-...gitea-deploy-token.md) + context-hub/MEMORY/log.
Liveness NON re-verifiee (172.17.0.1 injoignable hors NAS, test Tailscale non concluant) -> traiter
comme potentiellement vivant. Remediation (rotation + reecriture remotes + scrub historique) = session
dediee, hors perimetre du chantier message_id.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-08 13:14:27 +01:00

96 lines
5.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Rotation des secrets — inventaire et plan (établi 18/07/2026, à exécuter au retour)
## FENÊTRE D'EXÉCUTION
NAS en arrêt programmé **16:30 → 01:30** (coupures Sfax). Toute session du soir est impossible.
**Créneau utile : 01:3016:30**, matinée de préférence. Prévoir 4560 min.
---
## A. ROTATIONS OBLIGATOIRES (secrets exposés en clair le 18/07/2026)
### A1. Clé provider OpenCode — PRIORITÉ 1
Exposée dans un traceback de session. **C'est la clé qui porte le budget 10 $/mois.**
Portée réelle (vérifiée par empreinte SHA-256, valeurs jamais affichées) — la MÊME valeur sert à :
| Emplacement | Variable / champ |
|---|---|
| Bifrost config.db | provider `opencode`, clé `opencode-1` |
| `/volume1/docker/hermes-platform/.env` | `BIFROST_OPENCODE_KEY` |
| container `family-help` | `OPENCODE_API_KEY` (appel direct, hors Bifrost) |
Procédure : générer la nouvelle clé sur OpenCode → mettre à jour `.env` → mettre à jour la clé
provider dans Bifrost (UI ou config.json au boot, cf. piège de persistance) → recréer family-help
**révoquer l'ancienne** → tester un appel par Bifrost et un appel family-help.
### A2. Token Cloudflare Workers AI — PRIORITÉ 1
Dans `/volume1/docker/redaction-pro/nginx.conf`, bloc `location /api/cf/` (en-tête Authorization).
Backup existant : `nginx.conf.bak_vk_20260718`**contient l'ancien token, à supprimer après rotation.**
Procédure : nouveau token côté Cloudflare → éditer nginx.conf (via container alpine, cf. piège
permissions) → `docker restart redaction-pro` → tester → révoquer l'ancien → purger le .bak.
---
## B. ANOMALIES DÉCOUVERTES — à corriger pendant la même fenêtre
### B1. Secrets partagés entre sphères (violation de la règle d'étanchéité)
| Container | Variable | Porte en réalité la valeur de |
|---|---|---|
| hermes-agent-perso | `TRILIUM_TOKEN_PERSO` | `TRILIUM_TOKEN_TT` (sphère TT !) |
| hermes-agent-perso | `PAPERLESS_TOKEN_PERSO` | `PAPERLESS_TOKEN_NYORA` |
| gsparc-mezzouna-api | `BASEROW_TOKEN` | `BASEROW_TOKEN_NYORA` |
| gsparc-mezzouna-api | `VISION_API_KEY` | `HERMES_TT_OPENCODE_KEY` |
| family-help | `TELEGRAM_BOT_TOKEN` | `HERMES_PERSO_TELEGRAM_TOKEN` |
Conséquence : la sphère perso détient un accès TT. Générer des tokens distincts par sphère.
### B2. Redondance interne (non bloquant, à assainir)
Dans les 3 Hermes, `OPENAI_API_KEY`, `NVIDIA_API_KEY` et `CUSTOM_API_KEY` pointent tous sur la même
valeur `HERMES_<sphère>_NVIDIA_KEY`. Trois noms, un secret : une rotation manquée en laisse deux vivants.
### B3. Permissions
`/volume1/docker/hermes-platform/.env` est en **777**. Cible 640 root:users — vérifier d'abord
quels containers le lisent et sous quel uid (1026/100) avant de restreindre.
### B4. Token Gitea en clair dans un remote git
Dépôt `nabil-brain` : URL remote de la forme `https://bolbol:<token>@gitea.bolbol.tn`.
Roter le token et réécrire le remote (credential helper ou SSH).
### B5. Mot de passe legacy bolbol (famille `2L2u519w*`) largement embarqué en clair — git remotes, .env, docs (ajout 08/08/2026)
Instance **non répertoriée** de la **famille `2L2u519w*`** (rotation en attente, cf. incident sudo Best0f 07/2026).
Mot de passe legacy `bolbol`, suffixe service `gitea` (empreinte sha256 : `bbd43b3e`, valeur non affichée
conformément à A1). **Liveness NON re-vérifiée le 08/08/2026** (adresse interne `172.17.0.1` injoignable hors
NAS ; test via Tailscale non concluant) → traiter comme **potentiellement vivant** tant que non confirmé mort,
d'autant qu'il est embarqué dans de nombreux remotes actifs.
**Portée réelle** — sweep unique `grep -rlI` sur `/volume1/docker` (08/08/2026, ~30 fichiers) :
- **~10 remotes git** (mot de passe dans l'URL de `.git/config`) : `nyora-notes` (workspace hermes-nyora),
`hermes-perso`, `hermes-platform/.git.bak`, `family-help`, `bifrost-proxy`, `panda-dashboard`, `nyora-doc-api`,
`context-hub`, `_archive/rayhan-erp`, `nas-runbooks.STALE-*`.
- **7 fichiers `.env`** (désactivés / backups) : `hermes-tt/.env.disabled`, `hermes-nyora/.env.disabled`,
`hermes-perso/.env.disabled`, 2× `hermes-nyora/.env.bak-*`, 2× `_rotation-backup-20260709/*/.env`.
- **En clair DANS le repo `nas-runbooks` lui-même (déjà commité)** : `common/HEBERGEMENT-SITES-STATIQUES.md`,
`common/n8n-skills-officiels.md`, `common/tap-gitea-hermes-skills.md`,
`common/telegram-flood-control-overflow-split-et-gitea-deploy-token.md`. Aussi : context-hub (`CLAUDE.md`,
`AGENTS.md`, walkthroughs), `hermes-nyora/.../MEMORY.md`, un `tirith/log.jsonl`.
- Hors `/volume1/docker` (non couvert par le sweep) : `/tmp/nas-runbooks-work/.git/config` sur l'hôte NAS.
Le push nas-runbooks du 08/08 a été fait via le token `GITEA_TOKEN_TT` (bolbol) de
`/volume1/docker/hermes-platform/.env`, sans jamais ré-embarquer ce mot de passe.
**Action (session de rotation dédiée requise — hors périmètre du chantier message_id 08/08)** : roter le mot de
passe famille `2L2u519w*` ; réécrire tous les remotes sans credential embarqué (token via helper) ; purger les
`.env.bak`/`.env.disabled` et le clone STALE ; **scrubber l'historique** des runbooks/docs contenant la valeur
en clair (git-filter-repo / BFG).
---
## C. À NE PAS TOUCHER
Les 13 clés virtuelles Bifrost `vk-*` créées le 18/07 ne sont pas compromises (jamais affichées,
vérification par empreinte uniquement). Aucune rotation nécessaire.
---
## D. ORDRE D'EXÉCUTION RECOMMANDÉ
1. A1 OpenCode (budget en jeu) — 2. A2 Cloudflare — 3. Vérifier logs Bifrost : plus aucun 401
nouveau lié à la rotation — 4. B1 séparation des sphères — 5. B3 permissions — 6. B4 remote git.
Après chaque rotation : tester AVANT de révoquer l'ancienne clé, et ne jamais afficher une valeur
(vérification par longueur ou empreinte).