Skip to content

English · Español

Lab 00 — Pasada de hardening sobre security/THREATS.md

🇪🇸 Recorre security/THREATS.md línea por línea. Para cada hilo abierto: cerrarlo, aceptarlo con razón explícita, o reposicionarlo como off-ramp. Cero ambigüedad.

Objetivo

Recorrer cada hilo abierto en security/THREATS.md de principio a fin. Para cada uno: implementar la mitigación (Cerrar), escribir una justificación (Aceptar), o moverlo a la lista de off-ramp (Aplazar). Al finalizar, THREATS.md contiene cero elementos en estado OPEN.

Preparación

  • security/THREATS.md de fases anteriores.
  • READING_LIST.md (se creará en el lab 02 — este lab añade entradas antes de que el lab 02 escriba el resto).
  • El CI: pip-audit, bandit, mypy --strict, pytest. Ejecútalos todos en verde antes de comenzar.

Tareas

  1. Instantánea del estado actual.
uv run python scripts/count_threats.py

Imprime: - Total de amenazas listadas. - Número en estado OPEN. - Número en MITIGATED. - Número sin estado explícito (un bug — márcalo y añade un estado explícito).

  1. Triaje de cada amenaza abierta. Para cada hilo abierto, en orden, decide una de tres:
  2. Cerrar. Implementa la mitigación ahora. Añade un test que la verifique. Actualiza el estado a MITIGATED by <test_name> con un enlace.
  3. Aceptar con justificación. Escribe la justificación según theory/03-residual-risk-and-offramps.md. Debe incluir: (a) por qué la amenaza no aplica ahora, (b) mitigaciones en vigor, © disparador para reevaluación, (d) fecha de revisión.
  4. Aplazar a off-ramp. Mueve a READING_LIST.md bajo la sección "off-ramps". Marca en THREATS.md como [PUNTED: see READING_LIST.md #N].

  5. Reejecuta CI y las herramientas de seguridad:

uv run bandit -r src/
uv run pip-audit
uv run pytest tests/security/
uv run mypy --strict src/

Las cuatro deben pasar. Si bandit o pip-audit marcan nuevos problemas, decide: cerrar o aceptar (con justificación). Repite hasta que esté limpio.

  1. Verifica la instantánea:
uv run python scripts/count_threats.py

Esperado: - OPEN: 0 - MITIGATED o ACCEPTED: > 0 - Todas las amenazas tienen un estado explícito.

  1. Escribe un resumen de hardening de una página en security/HARDENING_PHASE_40.md:
  2. Cuántas amenazas comenzaron abiertas vs. terminaron abiertas.
  3. Cuántas fueron cerradas; tests clave de cierre.
  4. Cuántas fueron aceptadas; la amenaza aceptada de mayor riesgo (una frase).
  5. Cuántas fueron aplazadas; puntero a la sección off-ramp.

Entregables

  • security/THREATS.md actualizado con cero amenazas OPEN.
  • security/HARDENING_PHASE_40.md (una página).
  • Tests añadidos para cualquier amenaza recién cerrada en tests/security/.
  • Entradas off-ramp añadidas a READING_LIST.md.

Aceptación

  • python scripts/count_threats.py reporta 0 amenazas abiertas.
  • Cada amenaza tiene: un enlace MITIGATED by <test>, un ACCEPTED with rationale + review date, o una referencia PUNTED to READING_LIST.md #N.
  • bandit, pip-audit, mypy --strict, y pytest pasan todos.
  • El resumen de hardening es honesto sobre qué amenazas fueron aceptadas, no solo cuáles fueron cerradas.

Trampas

  • Cerrar una amenaza sin un test. Si no hay test, no cerraste nada — escribiste un comentario. Cada amenaza cerrada debe tener un test que fallaría si la amenaza se reintrodujese.
  • Aceptar sin un disparador. "Aceptada para siempre" no es aceptación, es evitación. Oblígate a escribir el disparador de reevaluación.
  • Aplazar con demasiada agresividad. Si aplazas más del ~30% de las amenazas abiertas, estás usando el off-ramp como vertedero. Reexamina: ¿alguna era un cierre rápido que omitiste?
  • Tratar advertencias de bandit y pip-audit como "no reales". Algunas son ruido (falsos positivos sobre patrones). Para cada advertencia, o añade un comentario # nosec con una justificación de una frase, o arréglala. La supresión silenciosa está prohibida.

Extensión

  • Añade un paso de CI que ejecute count_threats.py y falle si algún hilo está en estado OPEN. Previene la acumulación futura de hilos abiertos.
  • Añade un recordatorio de revisión a 6 meses — una tabla markdown en la cabecera de THREATS.md con la próxima fecha de revisión de cada entrada "aceptada", ordenable.

Siguiente: 01-write-the-postmortem.md