feat(episode): TRAZA_la-tarea-del-escner-terminada_S20260927.R1_XX.ops.2.hot_inf.in.cc.es.000.MGQ_J.PMCFK_E.SGNFD

Skill: NONE | Type: troubleshooting
Summary: EPISODIO 1 — ember-mcp: La tarea del escáner, terminada
This commit is contained in:
Ember 2026-10-03 14:56:13 +00:00
parent 2d0fa1ccf3
commit c661d5d41a

View file

@ -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 <valor>`** 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.