English · Español
03 — Riesgo residual y off-ramps¶
No todo se arregla. Hay riesgos que aceptas conscientemente y huecos que dejas abiertos a propósito. Esta fase los pone por escrito para que la decisión sea explícita, no por descuido.
La forma del riesgo residual¶
Tras 40 fases, el sistema tiene tres clases de "cabos sueltos":
- Cerrados. Una amenaza fue identificada, se implementó una mitigación, un test la verifica. Sin más acción.
- Aceptados con justificación. Una amenaza es real, pero mitigarla cuesta más de lo que vale a este alcance. La justificación está escrita.
- Aparcados. Una amenaza es real, la mitigación no es trivial, y este proyecto no es el sitio adecuado para resolverla. La amenaza se convierte en una entrada en la lista de off-ramp — un problema para el próximo proyecto.
El objetivo del lab 00 de la Fase 40 es poner cada elemento abierto de security/THREATS.md en exactamente uno de estos tres estados. Cero ambigüedad.
Cómo se ve "aceptado con justificación"¶
Malo:
Amenaza T-014: Compromiso de la cadena de suministro vía un paquete malicioso en PyPI. Estado: Aceptado.
Bueno:
Amenaza T-014: Compromiso de la cadena de suministro vía un paquete malicioso en PyPI. Estado: Aceptado con justificación. Justificación: (1) El proyecto corre mono-inquilino en la máquina local de Borja y en una única instancia efímera en la nube. Sin superficie de ataque multi-inquilino. (2)
pip-auditcorre en CI y en un cron semanal; el lockfile está fijado a hashes específicos. (3) El lockfile deuvimpone verificación de hashes. (4) Adoptar wheels firmados con Sigstore se consideró pero añade complejidad de toolchain que no acota ningún vector de ataque real a nuestra escala. Reevaluar si: el proyecto adquiere un endpoint público O lo adoptan múltiples aprendices con acceso de escritura. Revisado: 2026-05-23. Próxima revisión: 2026-11-23 (6 meses).
La justificación debe nombrar: - Por qué la amenaza no aplica ahora. - Las mitigaciones vigentes. - El gatillo que forzaría una reevaluación. - Una fecha de revisión.
El gatillo es la clave¶
"Aceptado" sin gatillo significa "ignorado para siempre". Eso no es una decisión; es indiferencia aplazada.
Buenos gatillos: - "Reevaluar si añadimos tráfico público". - "Reevaluar si incorporamos un segundo aprendiz con acceso de escritura". - "Reevaluar en la próxima fase que toque X". - "Reevaluar si el tamaño del modelo excede Y".
Si no puedes escribir un gatillo, el estado correcto no es aceptado — es aparcado o cerrado.
Cómo se ve "aparcado"¶
Algunas amenazas son reales pero requieren una forma de proyecto distinta para abordarlas correctamente:
- "Prompts adversariales diseñados para extraer el system prompt del agente".
- "Ataques de canal lateral por tiempo en la ruta de inferencia del modelo".
- "Envenenamiento de datos del corpus de entrenamiento por un contribuyente malicioso".
Son ataques reales sobre sistemas LLM reales. Están fuera de alcance para un tutor de verbos en inglés mono-aprendiz, mono-CPU.
Una amenaza aparcada va a dos documentos:
security/THREATS.md— marcada como[PUNTED: see READING_LIST.md #N].READING_LIST.md— listada como un off-ramp, con un recurso recomendado.
Así, la amenaza no se pierde; se reposiciona como un objetivo de aprendizaje para el próximo proyecto.
Off-ramps: conectar la Fase 40 con el próximo proyecto¶
Un off-ramp es una salida deliberada de lynx-cortex hacia un siguiente problema, distinto. Viven en READING_LIST.md bajo una sección final llamada "Off-ramps: qué hacer a continuación".
Formato de cada off-ramp:
Off-ramp 1: Escalar a un LLM real. Qué: Pasar del Mini-GPT de 103.680 parámetros a un LLM de 1B-7B parámetros, en GPU. Por qué ahora: La fontanería (corpus → tokenizer → entrenar → evaluar → servir) está construida. El cuello de botella se desplaza a la economía de GPU, el entrenamiento distribuido y la curación del dataset. Primer paso: Replicar el entrenamiento de Llama 2 7B en una sola A100 usando
nanotronogpt-neox. Asignar ~$200 de tiempo en nube. Recurso recomendado: El vídeo "Build GPT" de Karpathy + el repo nanoGPT para el caso pequeño; los scripts de entrenamiento detransformersde HuggingFace para el caso mayor. Tiempo estimado: 4-8 semanas a tiempo parcial.
Cinco off-ramps es el número correcto. Menos significa que no pensaste con suficiente amplitud; más significa que no estás eligiendo uno.
La prueba honesta¶
Para cada amenaza aceptada o aparcada: pregunta "¿le diría esto a un revisor de seguridad con la cara seria?"
- Si sí, la justificación es suficiente.
- Si no, la justificación es palabrería. Reescribe.
Esto no es una auditoría de seguridad. Es una comprobación de higiene sobre la propia honestidad de Borja. El documento de amenazas se supone que refleja la realidad en la Fase 40, no es una lista de deseos.
Cuándo revisitarías este archivo¶
El documento de amenazas y la lista de off-ramps no son estáticos. Se deberían releer:
- Al inicio del siguiente proyecto (¿algún off-ramp se vuelve "activamente perseguido"?).
- En la fecha de revisión de cada amenaza "aceptada con justificación".
- Si
lynx-cortexlo adopta alguna vez otro aprendiz (el gatillo multi-inquilino se dispara para varias amenazas).
Para esta fase: escríbelos, enlázalos, commitéalos y para. Borja-futuro releerá.
Lo que este archivo NO cubre¶
- Las amenazas específicas en
security/THREATS.md. El lab 00 recorre cada una. - Los off-ramps específicos para este proyecto. El lab 02 produce la lista de lectura.
- Cómo hacer una auditoría de seguridad a escala. Fuera de alcance; punteros en la lista de lectura.
Siguiente: ../lab/00-hardening-pass.md