🔐 DevSecOps Engine v1.3
Gate IA híbrido: el LLM recibe clasificaciones SSVC + EPSS + CISA KEV como contexto antes de evaluar
Trabajo de Grado — Universidad del Valle — Ingeniería de Sistemas 2026 Jhojan Stiven Castaño Jejen & Juan Manuel Arango Rodas
¿Qué cambia respecto a v1.2?
En v1.2 el gate IA y el gate SSVC operaban de forma completamente independiente. En v1.3 se fusionan: antes de invocar al LLM, ai_engine.py ejecuta internamente ssvc_gate.py, enriquece el prompt con las clasificaciones SSVC, scores EPSS y estado KEV por hallazgo, y expone al modelo el razonamiento empírico antes de pedirle su evaluación contextual. El LLM puede entonces validar o corregir las clasificaciones SSVC con argumentación técnica sobre la aplicación específica.
Esto implementa la metodología de Al Haddad et al. (2025) — arXiv 2510.18508 — que demuestra que los LLMs reducen errores en la dimensión Exploitation cuando disponen de contexto empírico verificable.
✨ Cambios principales
ai_engine.py — Motor híbrido IA + SSVC
- Ejecuta
ssvc_gate.pyinternamente antes de construir el prompt - Añade bloque
ssvc_enrichmental prompt con acción SSVC, score EPSS y estado KEV por hallazgo - Nuevo campo
ssvc_validationenai_evaluation.json:
"ssvc_validation": [
{
"finding_id": "FIND-003",
"ssvc_action": "Act",
"llm_judgment": "overestimated",
"reason": "EPSS=0.0012 y ausencia en CISA KEV contradicen la clasificación Act por heurística CWE-78"
}
]
- Juicio por hallazgo:
confirmed | overestimated | underestimated - El campo
ssvc_enrichment.usedindica si el prompt fue enriquecido (true) o si se activó el evaluador de respaldo por límite de tokens (false, confianza 0.60)
gate.py — Consolidación de tres gates
- Acepta la decisión del gate IA cuando confianza ≥ 0.6
- Si el gate SSVC detecta acción Act no capturada por el gate IA, escala la decisión final a FAIL
- Nuevo campo
gate_divergenceengate_decision.jsoncon descripción textual de cada diferencia entre gates
report_generator.py — Reporte ejecutivo
- Nueva sección: Contexto SSVC en gate IA con tabla de validación cruzada LLM ↔ SSVC
- La sección de gate IA incluye ahora el campo
ssvc_enrichment.usedy el conteo de hallazgos por juicio
📁 Archivos modificados
scripts/
├── ssvc_gate.py ← sin cambios de lógica respecto a v1.2
├── ai_engine.py ← ACTUALIZADO — prompt enriquecido con SSVC/EPSS/KEV (motor híbrido)
├── gate.py ← ACTUALIZADO — consolidación con escalado por acción Act
└── report_generator.py ← ACTUALIZADO — sección validación cruzada LLM ↔ SSVC
📊 Resultados sobre los 7 casos de validación
| Caso | Lenguaje | Gate Trad. | Gate IA | SSVC | F1 | LLM activo |
|---|---|---|---|---|---|---|
| Juice Shop | Node.js | FAIL | FAIL | FAIL | 0.00 | No (fallback) |
| FitFusion | Node.js/TS | FAIL | FAIL | FAIL | 0.00 | No (fallback) |
| WebGoat | Java | FAIL | FAIL | FAIL | 1.00 | No (fallback) |
| DVWA | PHP | FAIL | FAIL | FAIL | 1.00 | ✅ Sí |
| PyGoat | Python | FAIL | FAIL | FAIL | 1.00 | No (fallback) |
| SecureTaskAPI | Node.js | FAIL | CONDITIONAL | FAIL | 0.00 | ✅ Sí |
| SimpleHealthAPI | Node.js | FAIL | CONDITIONAL | CONDITIONAL | 0.00 | ✅ Sí |
Hallazgo clave: en SecureTaskAPI y SimpleHealthAPI el gate IA y SSVC producen CONDITIONAL porque EPSS < 0.001 y ausencia en CISA KEV confirman empíricamente bajo perfil de explotación. El gate tradicional produce FAIL al no tener acceso a ese contexto. Esta divergencia es el resultado central del trabajo.
F1 = 1.00 para CVEs maduros (Apache, Spring, curl, dpkg) confirmados en CISA KEV con EPSS alto. F1 = 0.00 en ecosistema npm/Alpine por paradoja de clases desbalanceadas: todos los negativos son correctos pero no hay verdaderos positivos, lo que es un resultado esperado y no un fallo del clasificador.
⚠️ Limitaciones conocidas
- Límite de tokens en Groq: conjuntos con más de ~80 hallazgos únicos activan el evaluador de respaldo estático (confianza 0.60). La decisión es válida pero sin razonamiento contextual completo. Ocurrió en Juice Shop, FitFusion, WebGoat y PyGoat.
- F1 = 0.00 en ecosistema npm/Alpine: las heurísticas CWE sobreestiman explotabilidad para CVEs JavaScript con EPSS bajo. El gate IA puede razonar sobre este contexto; el F1 no lo captura.
- Hallazgos Semgrep/ZAP sin CVE ID quedan excluidos del cálculo formal de F1 por ausencia de ground truth verificable en EPSS/KEV.
- SSVC clasifica por hallazgo individual — no detecta cadenas de ataque multi-herramienta. Esa capacidad sigue siendo exclusiva del gate IA.
- El componente LLM no fue validado formalmente — no se midió tasa de alucinaciones ni se calculó Cohen's κ respecto a evaluadores expertos.
🚀 Trabajo futuro
- Compresión selectiva del prompt por score SSVC + EPSS para reducir tokens y habilitar el LLM en casos de alto volumen
- Validación formal del LLM: Cohen's κ entre decisiones del modelo y analistas certificados
- Expansión de la muestra a n ≥ 15 casos con tests de significancia (Wilcoxon, Mann-Whitney)
- Métricas ECP/ECA/EUP para cadenas de explotación multi-herramienta — Yoon et al. (2023)
📄 Documentación
- Tesis completa: disponible en el repositorio como PDF (Anexo C)
- Manual técnico: Google Drive
- Evaluación: Aprobado para sustentación pública — 5/5 en todos los criterios (Miguel Ángel Askar Rodríguez, julio 2026)
Gate IA híbrido: el LLM recibe clasificaciones SSVC + EPSS + CISA KEV como contexto antes de evaluar
Trabajo de Grado — Universidad del Valle — Ingeniería de Sistemas 2026
Jhojan Stiven Castaño Jejen & Juan Manuel Arango Rodas
¿Qué cambia respecto a v1.2?
En v1.2 el gate IA y el gate SSVC operaban de forma completamente independiente. En v1.3 se fusionan: antes de invocar al LLM, ai_engine.py ejecuta internamente ssvc_gate.py, enriquece el prompt con las clasificaciones SSVC, scores EPSS y estado KEV por hallazgo, y expone al modelo el razonamiento empírico antes de pedirle su evaluación contextual. El LLM puede entonces validar o corregir las clasificaciones SSVC con argumentación técnica sobre la aplicación específica.
Esto implementa la metodología de Al Haddad et al. (2025) — arXiv 2510.18508 — que demuestra que los LLMs reducen errores en la dimensión Exploitation cuando disponen de contexto empírico verificable.
✨ Cambios principales
ai_engine.py — Motor híbrido IA + SSVC
- Ejecuta
ssvc_gate.pyinternamente antes de construir el prompt - Añade bloque
ssvc_enrichmental prompt con acción SSVC, score EPSS y estado KEV por hallazgo - Nuevo campo
ssvc_validationenai_evaluation.json:
"ssvc_validation": [
{
"finding_id": "FIND-003",
"ssvc_action": "Act",
"llm_judgment": "overestimated",
"reason": "EPSS=0.0012 y ausencia en CISA KEV contradicen la clasificación Act por heurística CWE-78"
}
]- Juicio por hallazgo:
confirmed | overestimated | underestimated - El campo
ssvc_enrichment.usedindica si el prompt fue enriquecido (true) o si se activó el evaluador de respaldo por límite de tokens (false, confianza 0.60)
gate.py — Consolidación de tres gates
- Acepta la decisión del gate IA cuando confianza ≥ 0.6
- Si el gate SSVC detecta acción Act no capturada por el gate IA, escala la decisión final a FAIL
- Nuevo campo
gate_divergenceengate_decision.jsoncon descripción textual de cada diferencia entre gates
report_generator.py — Reporte ejecutivo
- Nueva sección: Contexto SSVC en gate IA con tabla de validación cruzada LLM ↔ SSVC
- La sección de gate IA incluye ahora el campo
ssvc_enrichment.usedy el conteo de hallazgos por juicio
📁 Archivos modificados
scripts/
├── ssvc_gate.py ← sin cambios de lógica respecto a v1.2
├── ai_engine.py ← ACTUALIZADO — prompt enriquecido con SSVC/EPSS/KEV (motor híbrido)
├── gate.py ← ACTUALIZADO — consolidación con escalado por acción Act
└── report_generator.py ← ACTUALIZADO — sección validación cruzada LLM ↔ SSVC
📊 Resultados sobre los 7 casos de validación
| Caso | Lenguaje | Gate Trad. | Gate IA | SSVC | F1 | LLM activo |
|---|---|---|---|---|---|---|
| Juice Shop | Node.js | FAIL | FAIL | FAIL | 0.00 | No (fallback) |
| FitFusion | Node.js/TS | FAIL | FAIL | FAIL | 0.00 | No (fallback) |
| WebGoat | Java | FAIL | FAIL | FAIL | 1.00 | No (fallback) |
| DVWA | PHP | FAIL | FAIL | FAIL | 1.00 | ✅ Sí |
| PyGoat | Python | FAIL | FAIL | FAIL | 1.00 | No (fallback) |
| SecureTaskAPI | Node.js | FAIL | CONDITIONAL | FAIL | 0.00 | ✅ Sí |
| SimpleHealthAPI | Node.js | FAIL | CONDITIONAL | CONDITIONAL | 0.00 | ✅ Sí |
Hallazgo clave: en SecureTaskAPI y SimpleHealthAPI el gate IA y SSVC producen CONDITIONAL porque EPSS < 0.001 y ausencia en CISA KEV confirman empíricamente bajo perfil de explotación. El gate tradicional produce FAIL al no tener acceso a ese contexto. Esta divergencia es el resultado central del trabajo.
F1 = 1.00 para CVEs maduros (Apache, Spring, curl, dpkg) confirmados en CISA KEV con EPSS alto. F1 = 0.00 en ecosistema npm/Alpine por paradoja de clases desbalanceadas: todos los negativos son correctos pero no hay verdaderos positivos, lo que es un resultado esperado y no un fallo del clasificador.
⚠️ Limitaciones conocidas
- Límite de tokens en Groq: conjuntos con más de ~80 hallazgos únicos activan el evaluador de respaldo estático (confianza 0.60). La decisión es válida pero sin razonamiento contextual completo. Ocurrió en Juice Shop, FitFusion, WebGoat y PyGoat.
- F1 = 0.00 en ecosistema npm/Alpine: las heurísticas CWE sobreestiman explotabilidad para CVEs JavaScript con EPSS bajo. El gate IA puede razonar sobre este contexto; el F1 no lo captura.
- Hallazgos Semgrep/ZAP sin CVE ID quedan excluidos del cálculo formal de F1 por ausencia de ground truth verificable en EPSS/KEV.
- SSVC clasifica por hallazgo individual — no detecta cadenas de ataque multi-herramienta. Esa capacidad sigue siendo exclusiva del gate IA.
- El componente LLM no fue validado formalmente — no se midió tasa de alucinaciones ni se calculó Cohen's κ respecto a evaluadores expertos.
🚀 Trabajo futuro
- Compresión selectiva del prompt por score SSVC + EPSS para reducir tokens y habilitar el LLM en casos de alto volumen
- Validación formal del LLM: Cohen's κ entre decisiones del modelo y analistas certificados
- Expansión de la muestra a n ≥ 15 casos con tests de significancia (Wilcoxon, Mann-Whitney)
- Métricas ECP/ECA/EUP para cadenas de explotación multi-herramienta — Yoon et al. (2023)
📄 Documentación
- Tesis completa: disponible en el repositorio como PDF (Anexo C)
- Manual técnico: [Google Drive](https://drive.google.com/file/d/1PBkfRz_UobJLrXDUd7XhGWrILXWF4YA0/view?usp=sharing)