DEV Community

Cover image for cwe-trace: diagnóstico de detección de vulnerabilidades en LLMs (DFI y HDD)
Fenix
Fenix

Posted on

cwe-trace: diagnóstico de detección de vulnerabilidades en LLMs (DFI y HDD)

cwe-trace: diagnóstico de detección de vulnerabilidades en LLMs (DFI y HDD)

Framework de diagnóstico para saber si un LLM razona sobre vulnerabilidades o solo hace pattern-matching sobre datos contaminados. Basado en el paper Calibration Without Comprehension: Diagnosing the Limits of Fine-Tuning LLMs for Vulnerability Detection in Systems Software (2026).

El problema

Un LLM con buena puntuación en un benchmark de vulnerabilidades puede estar memorizando datos contaminados en vez de razonar sobre seguridad. Las evaluaciones clásicas no distinguen:

  • Memorización vs. generalización.
  • Pattern matching vs. razonamiento de seguridad.
  • Calibración vs. comprensión.

La solución

  1. Temporal Split: datasets pre-2025 (histórico) y post-2025 (libre de leakage).
  2. Context-Aware Pairs: pares vulnerable-parcheado preservando contexto multi-archivo.
  3. Métricas de diagnóstico: DFI y HDD, más allá de la exactitud binaria.
  4. Contamination Auditor: verificación de calidad de datos a nivel de función.

Métricas clave

DFI (Directional Failure Index): descompone puntuaciones casi aleatorias en sesgo direccional. Rango -100 a +100 puntos porcentuales. Positivo = sobre-predice vulnerable; negativo = sub-predice.

HDD (Hierarchical Distance and Direction): mide profundidad de razonamiento en la taxonomía CWE. Distancia = camino más corto en la jerarquía entre la predicción y lo real; dirección = si el error sube o baja en la jerarquía.

Taxonomía: 130+ nodos CWE con jerarquía CWE-1000. 20 tests incluidos.

Pruébalo

git clone https://github.com/amurlaniakea/cwe-trace.git
cd cwe-trace
python3 -m venv venv && source venv/bin/activate && pip install -e .
python3 -m cwe_trace evaluate --model <modelo> --split post-2025
python3 -m cwe_trace audit --dataset <dataset>
Enter fullscreen mode Exit fullscreen mode

Links

¿Tu modelo aprueba el benchmark o lo entiende? El split temporal lo dice.

Top comments (0)