common: P1 mcp-nas déployé (denylist ancrée + nas.internal) dans runbook v2

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Antigravity 2026-07-04 19:04:20 +01:00
parent 4e30ea1947
commit 9ccd8cfca1
2 changed files with 17 additions and 3 deletions

View File

@ -5,7 +5,8 @@
> ⚠️ **OBSOLÈTE EN PARTIE depuis le patch P0 du 2026-07-04** — voir [mcp-nas-run-command-v2.md](mcp-nas-run-command-v2.md).
> Les RÈGLES 1, 2 et 3 ci-dessous (poisoning, heredoc interdit, limite 350 chars/base64) **ne s'appliquent plus** :
> heredocs, quotes et commandes longues fonctionnent nativement, et `reset_session` récupère une session bloquée.
> La section « RÈGLE 4 — Services internes (172.17.0.1) » reste valide.
> La section « RÈGLE 4 — Services internes (172.17.0.1) » reste valide ;
> depuis le P1, `nas.internal` est un alias stable de 172.17.0.1 dans le container.
---

View File

@ -66,6 +66,19 @@ via `send-keys -l` (mode littéral). Conséquences :
curl -s http://127.0.0.1:3042/health
```
## À venir
## P1 — denylist ancrée + nas.internal (2026-07-04, commit `7fb13c5`, déployé et testé)
- **P1** : denylist ancrée (regex ancrées sur le début de commande) + résolution `nas.internal`.
- **Denylist ancrée** : les patterns ne sont plus cherchés n'importe où dans la chaîne brute.
La commande est découpée en segments (`;` `&` `|` retours ligne), les préfixes neutres
(`sudo`, `env`, `VAR=…`, chemin `/sbin/…`) sont retirés, et les patterns sont ancrés sur le
**début de chaque commande**. Les **corps de heredoc sont exclus** de l'analyse.
- Fini les faux positifs : `grep reboot /var/log`, `echo "ne pas faire reboot"`, un heredoc
de doc contenant « mkfs » → **acceptés**.
- Toujours refusés : `reboot`, `/sbin/reboot`, `echo ok && reboot`, `VAR=1 sudo shutdown`,
`rm -rf /volume*|/opt|/mnt|/`, `mkfs.*`, `dd of=/dev/*`, fork bomb, `> /dev/sd*`,
`docker rm -f`, `fdisk`, `parted`, `syno*`, `chmod -R 777 /`. (30/30 tests unitaires.)
- Changement assumé : `rm -rf /tmp/x` est désormais **autorisé** (avant, tout chemin absolu
était bloqué) ; les racines critiques restent protégées.
- **`nas.internal`** : `extra_hosts: nas.internal:host-gateway` dans le compose → depuis toute
session, `nas.internal` = l'hôte NAS (172.17.0.1). Utiliser `http://nas.internal:3232` (Gitea),
`:9000` (Portainer), `:8787` (NyoraNotes)… au lieu de mémoriser 172.17.0.1.