diff --git a/episodes/TRAZA_la-tarea-del-escner-terminada_S20260927.R1_XX.ops.2.hot_inf.in.cc.es.000.MGQ_J.PMCFK_E.SGNFD.md b/episodes/TRAZA_la-tarea-del-escner-terminada_S20260927.R1_XX.ops.2.hot_inf.in.cc.es.000.MGQ_J.PMCFK_E.SGNFD.md new file mode 100644 index 00000000..b3e957ce --- /dev/null +++ b/episodes/TRAZA_la-tarea-del-escner-terminada_S20260927.R1_XX.ops.2.hot_inf.in.cc.es.000.MGQ_J.PMCFK_E.SGNFD.md @@ -0,0 +1,50 @@ +--- +episode_id: "09860d09-9257-4cca-89e9-265af1e255d8" +puente_flat: "TRAZA_la-tarea-del-escner-terminada_S20260927.R1_XX.ops.2.hot_inf.in.cc.es.000.MGQ_J.PMCFK_E.SGNFD" +session_code: "S20260927.SIDF32B27DEFD6D" +acto_dialogico: "informar" +actor_flujo: "multi_actor" +criticidad_aegis: "low" +skill_dominante: "NONE" +fase_proyecto: "operations" +tipo_semantico: "troubleshooting" +summary_one_line: "EPISODIO 1 — ember-mcp: La tarea del escáner, terminada" +source_type: "claude_code" +trust_boundary: "internal" +created_at: "2026-10-03T14:56:12.149832+00:00" +relectura_tagged: false +forgejo_commit_sha: "pending" +--- + +Corrección guardada y subida: `af4aeefe` está en los tres remotos. El JSON y el Markdown del estado vivo vuelven a coincidir y el guardián da 0 desajustes. + +## La tarea del escáner, terminada + +**Qué hace ahora `scripts/secret_scan_precommit.py`** (commit `3e03cbd8`): + +- **Ve `Bearer `** en todas las formas que el ataque encontró: comillas de cualquier tipo, `Bearer:`, `bearer:` de YAML, `+`, `%20`, `%2520`, colores de terminal, `HTTP_Bearer`, `id|valor`, desde 24 caracteres. Descarta las plantillas de documentación (`YOUR_…`, ceros, secuencias `1234567890…`, cabeceras JWT de ejemplo). +- **Ve `NOMBRE_TOKEN=<40 hex>`.** Esa forma tenía dos tokens vivos de Forgejo que nadie veía. +- **Lee ficheros que no son UTF-8.** Los que escribe PowerShell 5.1 se saltaban enteros. +- **Mira todas las coincidencias de cada línea**, no solo la primera. +- **Deja de ser cuadrático.** Una línea de 24.000 caracteres pasa de 4,6 s a instantáneo. + +**Cómo se comprobó:** + +| Comprobación | Resultado | +|---|---| +| Pruebas | 99 en verde, más 6 límites declarados que fallan a propósito | +| Errores sembrados | 27 de 27 cazados | +| Barrido de 10.234 ficheros (seguidos, no seguidos y memorias) | 19 líneas nuevas, **0 perdidas, 0 falsos positivos**, 0 memorias retenidas de más | +| Consumidores vivos (publicador, sincronización, espejo, instalador) | Todos en verde | + +## Lo que destapó: credenciales vivas dentro de git + +| Credencial | Estado | Desde | Pendiente tuyo | +|---|---|---|---| +| Token de `lumbre` (memoria `ember-mcp`) | **Vivo**, en 3 ficheros seguidos por git | 2026-04-24 / 2026-08-14 | `SEC-LUMBRE-BEARER`, dijiste «todavía no» (2026-10-07) | +| **Dos tokens de Forgejo** | **Vivos**: mismas huellas que el servidor MEMORIA | 2026-08-14 | `SEC-FORGEJO-TOKENS-GIT` (2026-10-10) | +| Paperless, Qdrant antigua y una sin identificar | No coinciden con nada vivo | varios | Confirmar que están muertas | + +El estado vivo afirmaba que el token de Forgejo «nunca viajó a los remotos». Era falso, y ya lleva su AVISO. Todo se midió comparando huellas, sin imprimir nunca un valor. + +> 🎯 **En una frase:** el escáner ya caza la forma exacta con que se coló la contraseña de `lumbre`, y al estrenarlo encontró otras dos credenciales vivas en git, las de Forgejo.