Skip to content

Releases: ManuelArango1229/devsecops-engine-

v1.3

Choose a tag to compare

@ManuelArango1229 ManuelArango1229 released this 05 Aug 00:28

🔐 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.py internamente antes de construir el prompt
  • Añade bloque ssvc_enrichment al prompt con acción SSVC, score EPSS y estado KEV por hallazgo
  • Nuevo campo ssvc_validation en ai_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.used indica 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_divergence en gate_decision.json con 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.used y 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)
# 🔐 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.py internamente antes de construir el prompt
  • Añade bloque ssvc_enrichment al prompt con acción SSVC, score EPSS y estado KEV por hallazgo
  • Nuevo campo ssvc_validation en ai_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.used indica 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_divergence en gate_decision.json con 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.used y 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 ...
Read more

v1.2

Choose a tag to compare

@ManuelArango1229 ManuelArango1229 released this 21 May 20:46

🔐 DevSecOps Engine v1.2

Pipeline reutilizable con gate SSVC + EPSS + CISA KEV como tercer mecanismo de decisión

Trabajo de Grado — Universidad del Valle — Ingeniería de Sistemas 2026 Jhojan Stiven Castaño Jejen & Juan Manuel Arango Rodas


¿Qué cambia en esta versión?

El modelo TLOT/ALOT de ISO/IEC 27034 como gate de decisión es reemplazado por el estándar SSVC v2.1 (CISA/SEI-CERT) enriquecido con datos empíricos de explotabilidad — EPSS (FIRST.org) y CISA KEV. Esto elimina las constantes arbitrarias 0.50/0.65/0.80/0.95 y las penalizaciones −0.40/−0.25/−0.10/−0.15, resuelve la saturación de scores (ALOT=0.35 en todos los casos) y habilita métricas formales de precisión, recall y F1 por primera vez.

ISO/IEC 27034 se conserva como marco de trazabilidad normativa — cada hallazgo sigue llevando su asc_id y los ASCs ejecutados quedan registrados por corrida.


✨ Nuevo módulo: ssvc_gate.py

Implementa el árbol de decisión SSVC v2.1 consultando dos fuentes públicas en cada ejecución:

Fuente Qué aporta
CISA KEV (cisa.gov) CVEs con explotación activa confirmada en producción — ~1.600 entradas, actualización diaria
EPSS API (api.first.org) Probabilidad de explotación en 30 días (0.0–1.0) por CVE ID, consulta en batch

SimpleHealthAPI es el caso de divergencia más claro: gate IA y SSVC coinciden en CONDITIONAL porque EPSS bajo y ausencia en CISA KEV confirman empíricamente bajo perfil de explotación. El gate tradicional (FAIL) es el único que no accede a ese contexto empírico.


📁 Archivos modificados

scripts/
├── ssvc_gate.py          ← NUEVO — árbol SSVC + EPSS API + CISA KEV + métricas F1
├── gate.py               ← actualizado — SSVC como gate 3, ISO 27034 a trazabilidad
└── report_generator.py   ← actualizado — sección SSVC con distribución y F1

⚠️ Limitaciones conocidas

  • F1=0.0 en ecosistema npm/Alpine: las heurísticas CWE sobreestiman explotación para CVEs JavaScript con EPSS bajo. El gate IA sí puede razonar sobre este contexto.
  • Hallazgos Semgrep/ZAP sin CVE ID quedan excluidos del cálculo formal de F1 por ausencia de ground truth verificable.
  • SSVC clasifica por hallazgo individual — no detecta cadenas de ataque multi-herramienta. Esa capacidad sigue siendo exclusiva del gate IA.
  • El gate IA recibe actualmente los hallazgos crudos sin el contexto de clasificaciones SSVC/EPSS/KEV. Se aborda en v1.3.

🚀 Próxima versión — v2.0

  • Gate IA híbrido: enriquecer el prompt del LLM con clasificaciones SSVC preliminares y datos EPSS/KEV antes de la evaluación contextual — metodología Al Haddad et al. (2025), arXiv 2510.18508
  • Campo ssvc_validation en el output del LLM con juicio sobre cada clasificación SSVC (confirmed | overestimated | underestimated)
  • Nueva sección en el reporte: validación cruzada LLM ↔ SSVC con razonamiento por hallazgo

v1.1

Choose a tag to compare

@ManuelArango1229 ManuelArango1229 released this 28 Mar 03:40

🔐 DevSecOps Engine v1.1

Pipeline reutilizable de seguridad continua con gate de despliegue asistido por LLM

Trabajo de Grado — Universidad del Valle — Ingeniería de Sistemas 2026 Jhojan Stiven Castaño Jejen & Juan Manuel Arango Rodas


¿Qué es esta versión?

Pipeline funcional de 7 jobs que ejecuta análisis de seguridad completo sobre cualquier aplicación containerizada y genera una decisión de despliegue PASS / CONDITIONAL / FAIL respaldada por un modelo de lenguaje de gran escala (LLM).


Herramientas integradas

Herramienta Tipo Descripción
Semgrep SAST Análisis estático del código fuente con auto-detección de lenguaje
Trivy SCA CVEs en dependencias e imagen Docker
OWASP ZAP DAST Escaneo dinámico baseline con --network host
Nuclei v3.3.8 Pentesting Templates activos sobre rutas descubiertas por el reconocimiento

Vulnerabilidades críticas confirmadas en FitFusion Backend

  • authMiddleware.ts usa jwt.decode() en lugar de jwt.verify() — bypass completo de autenticación
  • Passwords almacenadas y comparadas en texto plano sin bcrypt
  • Credenciales reales (MongoDB URI, Google OAuth, JWT secret) expuestas en k8s/backend-secret.yaml
  • Rutas /api/routines sin authMiddleware
  • console.log(this.secret) expone el JWT secret en logs

Limitaciones conocidas en esta versión

  • ISO/IEC 27034 referenciada en prompts y reportes pero sin modelo de confianza TLOT/ALOT implementado en código — se aborda en v1.1.0
  • Semgrep requiere el input source_repo explícito para escanear el código del consumidor; sin él analiza el directorio del engine
  • ZAP y Nuclei requieren que la app arranque correctamente via APP_SECRETS; si la app necesita servicios externos (MongoDB, Redis, etc.) estos deben ser accesibles desde el runner

Próxima versión — v1.2

  • Implementación del modelo TLOT/ALOT de ISO/IEC 27034-1 §7.3.4–7.3.6 en gate.py
  • Nuevo módulo iso27034.py con cálculo de confianza y sección de auditoría normativa en el reporte
  • iso27034_framework.json — Application Normative Framework (ANF) con ASCs definidos por criticidad

v1.0

Choose a tag to compare

@ManuelArango1229 ManuelArango1229 released this 26 Mar 05:05

🚀 DevSecOps Pipeline con IA – v1.0

Primera versión estable de un pipeline DevSecOps que integra SAST, SCA, DAST y pentesting con un motor de evaluación asistida por IA, permitiendo tomar decisiones de despliegue basadas en riesgo real y no solo en umbrales estáticos.

✨ Highlights
🧠 Evaluación contextual de vulnerabilidades (CVSS + explotabilidad real)
🔗 Identificación de cadenas de ataque
🚦 Security Gate inteligente (PASS / CONDITIONAL / FAIL)
📄 Generación automática de SECURITY_REPORT.md
🔄 Pipeline reusable vía GitHub Actions
⚙️ Stack

Semgrep · Trivy · OWASP ZAP · Nuclei · Groq (LLaMA 3.3)

Juan Manuel Arango Rodas