From 926b8e96af7b67c541959ad51701ca1342007c6b Mon Sep 17 00:00:00 2001 From: Egutierrez Date: Sun, 7 Jun 2026 17:33:03 +0200 Subject: [PATCH] chore(0006): bump unibus to 0.8.0, close issue 0006 (cluster hardening + wiring) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit All seven phases (0006a–0006g) merged: blockers N3 (replicated nonce) and N2 ($JS.API.> KV leak) closed, decentralized KV store wired (--store kv), homogeneous cluster posture enforced (N1), RefreshSession in all clients (N4), the lows (secret out of argv, migrate guard, R1/CA docs), and the 3-node deploy material. Full suite + every audit-0008 attack regression green; govulncheck 0 reachable. See report 0009. Co-Authored-By: Claude Opus 4.8 (1M context) --- app.md | 26 ++++++++++++++++++- .../0006-cluster-hardening-and-wiring.md | 4 ++- 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/app.md b/app.md index 45649d25..f3b83ee4 100644 --- a/app.md +++ b/app.md @@ -2,7 +2,7 @@ name: unibus lang: go domain: infra -version: 0.7.0 +version: 0.8.0 description: "Bus de mensajería unificado sobre NATS+JetStream con cifrado E2E por room (megolm/olm reducido): service de membresía/claves, librería cliente y peers demo." tags: [service, messaging, nats, e2e] uses_functions: @@ -154,6 +154,30 @@ agent..{in,out} inbox/outbox de agente LLM (agent.scout.in) ## Capability growth log +- v0.8.0 (2026-06-07) — completar y endurecer el cluster (issue 0006, fases + 0006a–0006g) que cierra los bloqueantes de la auditoría dedicada del cluster + (report 0008) y cablea el control plane descentralizado que 0003 dejó a medias. + (0006a) Se cablea el nonce replicado en el binario: un nodo con `--cluster-name` + usa el bucket JetStream KV compartido obligatoriamente (fail-fast si no se crea), + cerrando el replay cross-node (N3); el "ciclo bootstrap" se resuelve con una + identidad interna efímera que el authenticator reconoce (full perms) y una + conexión in-process privilegiada. (0006b) Se cierra la fuga del control plane + por `$JS.API.>` (N2): la ACL pasa a un allow-set cerrado por-room (JS API solo de + los streams `UNIBUS_` del peer), dejando `KV_UNIBUS_*`/`OBJ_*` fuera del + set y, por tanto, denegados. (0006c) Se cablea el store KV descentralizado + (`--store kv|sqlite`, default sqlite = baseline idéntico) con un `storeHolder` + fail-closed que rompe el ciclo bootstrap del authenticator. (0006d) Posture + homogénea: un nodo rechaza unirse al cluster sin `enforce`, y `/healthz` publica + la posture (N1). (0006e) Todos los clientes llaman `RefreshSession` tras cambios + de membresía (N4), de modo que la ACL es usable bajo enforce sin desactivarla. + (0006f) Bajos: secreto de cluster fuera de argv (`--cluster-pass-file`/env + + inyección en routes), `migrate-to-kv` rechaza target remoto sin `--ca`, y docs + de CA separada para routes + R1 SPOF vs R3 HA. (0006g) Material de deploy del + cluster de 3 nodos (magnus+homer+datardos) en `deploy/cluster/` (certs, unit, + script de despliegue dry-run, runbook) — sin tocar ningún VPS. Toda la + regresión de auditorías previas + los ataques 0008 siguen verdes; govulncheck 0 + alcanzables. Branch-by-abstraction: con `--store sqlite` el single-node sigue + idéntico y desplegable en todo momento. - v0.7.0 (2026-06-07) — hardening de seguridad 2 (issue 0005, fases 0005a–0005e) que cierra los hallazgos nuevos de la re-auditoría red-team (report 0006) y lleva el veredicto de exposición pública a "sí-con-condiciones". (0005a) Bump de diff --git a/dev/issues/0006-cluster-hardening-and-wiring.md b/dev/issues/0006-cluster-hardening-and-wiring.md index 75cd3d0d..3fd797ec 100644 --- a/dev/issues/0006-cluster-hardening-and-wiring.md +++ b/dev/issues/0006-cluster-hardening-and-wiring.md @@ -1,8 +1,10 @@ --- issue: 0006 title: Completar y endurecer el cluster — wiring del control plane KV + N1-N6 de la auditoría 0008 -status: spec +status: done created: 2026-06-07 +closed: 2026-06-07 +closed_by: fases 0006a–0006g (ver report 0009); unibus v0.8.0 domain: security scope: unibus (cmd/membershipd, pkg/membership, pkg/embeddednats, pkg/busauth, pkg/client) depends_on: 0003 (completa su wiring), 0005 (hereda el bus single-node ya seguro)