diff --git a/common/mcp-nas-security-audit.md b/common/mcp-nas-security-audit.md index bac21af..eb666d6 100644 --- a/common/mcp-nas-security-audit.md +++ b/common/mcp-nas-security-audit.md @@ -3,7 +3,7 @@ **Tags** : infra, securite, mcp-nas, rce, docker-socket, secrets, rotation **Périmètre** : conteneur `linux-mcp-nas` (`mcp-nas.nd.i234.me`, port hôte 3042→8000, réseau Docker `n8n`). **Complète** : `common/audit-securite-reseau-nas-20260703.md` (couche réseau/WAN). Ici = **couche applicative**. -**Statut** (MàJ 2026-07-09 manche 4) : **P0 fermés** + durcissement manche 3 + **ROTATION des credentials fuités faite** (Portainer, Gitea bolbol, n8n, Baserow, 3 logins web Hermes, NyoraNotes, DSM/sudo, tokens Gitea). **Reste** : SMTP OVH (externe), Bifrost VKs (différé), nettoyage docs/skills agents, run non-root. Détail en bas. +**Statut** (MàJ 2026-07-09 manche 4) : **P0 fermés** + durcissement manche 3 + **ROTATION des credentials fuités faite** (Portainer, Gitea bolbol, n8n, Baserow, 3 logins web Hermes, NyoraNotes, DSM/sudo, tokens Gitea). **Reste** : SMTP OVH (externe), nettoyage docs/skills agents restants, re-scoper 1 token Gitea, run non-root. Détail en bas. ## Verdict @@ -96,6 +96,7 @@ Le préfixe réutilisé couvrait **~11 familles** (pas 5) + fuite dans **context - **3 logins web Hermes** : var interne `HERMES_PASSWORD` = `${HERMES__PASSWORD}` via le **compose RACINE** `hermes-platform/docker-compose.yml`. **Piège** : les conteneurs n'ont **aucun label compose** → `compose up --force-recreate ` **cascade sur l'agent** (a mis agent-tt down). **Méthode fiable = `docker stop && docker rm ` puis `docker compose up -d --no-deps `** depuis le racine. - **DSM/sudo Best0f** : `sudo /usr/syno/sbin/synouser --setpw Best0f ` (**chemin complet** requis, sinon `command not found`). `ssh` étant **par clé**, aucun lockout. Mdp hardcodé dans ~23 fichiers (dsm_auth.py liste de spray, ssh_dsm.py, dsm_check_*.py, context-hub/.env, docs) → tous mis à jour. - **Tokens Gitea** : 13 tokens bolbol (plusieurs `all`/`write:admin`). `GITEA_TOKEN_NYORA` fuité (`10ccc28dc`) roté → token scopé neuf ; **7 tokens révoqués** (`DELETE /api/v1/users/bolbol/tokens/`). Scripts deploy migrés vers `GITEA_DEPLOY_TOKEN`. -- **Scrub** : 648 secrets masqués dans 100 fichiers de log (sessions/cron/claude_contexte) via `sudo python3`. +- **Bifrost VKs** (Nabil-Key + Yesmine-Key) : rotation dans `config.db` (`UPDATE governance_virtual_keys SET value=…` + `allow_all_keys=1`) + **restart bifrost**. **Piège port** : l'API bifrost est en **3085** (8080 interne), **3086 = proxy openresty** (renvoie 401 trompeur) → tester sur 3085. **Piège scan** : la VK vit aussi dans `redaction-pro/nginx.conf` (`.conf` raté par un scan `.env/.json/.yml`) et dans **9 workflows n8n en base** (`UPDATE workflow_entity SET nodes=replace(nodes::text,old,new)::jsonb` sur postgres n8n-DB `n8nuser`/`n8n`, puis restart n8n pour recharger le cache). Vérif : nouvelle VK → 200, ancienne → 401 `virtual_key_not_found`. Yesmine-Key = aucun consommateur infra (clé perso). +- **Scrub** : 673 secrets masqués dans 105 fichiers de log (sessions/cron/claude_contexte/data-logs/anciens .env) via `sudo python3`. -**Nouvelles valeurs** : PAS dans ce runbook — remises à Nabil (Bitwarden). **Reste** : SMTP OVH (externe), **Bifrost VKs** (différé : DB fragile + réimport workflow n8n), SSH_PASS_NYORA, re-scoper token `nyora-notes-claude-code`, nettoyer docs/skills, run non-root. +**Nouvelles valeurs** : PAS dans ce runbook — remises à Nabil (Bitwarden). **Reste** : SMTP OVH (externe), SSH_PASS_NYORA, re-scoper token `nyora-notes-claude-code`, nettoyer docs/skills restants, run non-root.