Validación y tratamiento de hallazgos
Un informe llega a revisión con una detección titulada «servidor web obsoleto». Cuando se pide demostrarla, aparecen varias posibilidades. El plugin pudo leer una cabecera, consultar un paquete local o reconocer una respuesta propia del producto. La cabecera puede estar sobrescrita, el paquete puede contener un backport y la respuesta puede proceder de un proxy. Repetir el título en el informe conserva toda esa incertidumbre, pero la oculta al lector.
El título del plugin es una afirmación general. El output es una observación concreta. Entre ambos existe una cadena de supuestos que la validación debe hacer visible.
Empezar por la afirmación exacta
Sección titulada «Empezar por la afirmación exacta»Reformula el resultado como una condición comprobable:
El componente
PRODUCTdeASSET_IDejecuta una versión afectada porCVE_ID, la función vulnerable está activa y es alcanzable desdeSCANNER_POSITIONconIDENTITY.
La frase separa:
- activo
- producto
- versión
- configuración o función
- vulnerabilidad
- ruta
- identidad
No todas las vulnerabilidades necesitan todos los elementos. Una configuración predeterminada sin CVE sustituye la referencia pública por la directiva y su comportamiento.
Conservar el resultado original
Sección titulada «Conservar el resultado original»Antes de modificar nada, guarda:
- ejecución, política, plugin y severidad
- output completo
- endpoint y marca temporal
- versión del escáner y estado del feed
- identidad y posición
- petición o prueba que el plugin declara realizar
Si el escáner no explica su método, registra esa limitación. El nombre del plugin no autoriza a inferir si usó un banner, credenciales o una prueba dinámica.
Validar por capas
Sección titulada «Validar por capas»1. Identidad del activo
Sección titulada «1. Identidad del activo»Relaciona IP, nombre de host, certificado, identificador del proveedor de nube, agente y propietario. Confirma que el resultado no pertenece a un balanceador, una traducción de direcciones de red (NAT), una red de distribución de contenido (CDN) o una dirección reasignada.
2. Identidad del producto
Sección titulada «2. Identidad del producto»Contrasta al menos dos señales cuando sea posible:
- inventario de paquetes
- fichero o metadatos del binario
- API o interfaz de administración
- comportamiento de protocolo
- banner
- proceso y argumentos de ejecución
Los banners son útiles y fáciles de modificar. El gestor de paquetes conoce el paquete instalado, pero puede no describir el binario que está cargado en memoria. La validación explica qué señal prevalece.
3. Versión y parche
Sección titulada «3. Versión y parche»Compara con el esquema del proveedor. Distingue la versión del proyecto original, la revisión de la distribución, el firmware, la build y el hotfix. Revisa los avisos de seguridad y el historial de cambios del proveedor.
Los backports corrigen código manteniendo una versión upstream aparentemente vulnerable. Una comparación de cadenas puede generar un falso positivo. El caso inverso también existe: una versión parece corregida, pero un módulo vulnerable permanece desplegado.
4. Configuración y componente
Sección titulada «4. Configuración y componente»Confirma que el módulo o la ruta vulnerable están instalados, habilitados y utilizan la configuración necesaria. Un paquete presente puede estar inactivo. Una biblioteca puede no cargarse. Una función puede requerir un rol o un feature flag.
5. Alcanzabilidad
Sección titulada «5. Alcanzabilidad»Reproduce la ruta desde la posición pertinente. Separa:
- resolución
- red y puerto
- TLS o protocolo
- autenticación
- autorización
- endpoint o acción
Un control compensatorio puede reducir exposición. No corrige necesariamente la vulnerabilidad. Registra el control, su alcance y la forma de comprobarlo.
6. Efecto mínimo
Sección titulada «6. Efecto mínimo»Elige una prueba que distinga la condición con el menor cambio de estado. Puede ser una consulta de versión autenticada, una respuesta diferencial, un fichero canario o una operación reversible.
La prueba de concepto metodológica decide suficiencia y efectos. La validación no necesita convertir cada CVE en una shell.
Resultados positivos, negativos y ambiguos
Sección titulada «Resultados positivos, negativos y ambiguos»Una conclusión usa estados más precisos que vulnerable/no vulnerable:
- confirmed: evidencia suficiente confirma condición y alcance declarados
- likely: señales fuertes, pero falta un prerrequisito no observable
- not-affected: la condición se refuta con evidencia aplicable
- mitigated: la condición existe y un control comprobado bloquea la ruta analizada
- blocked: una limitación impide decidir
- not-tested: la prueba no se ejecutó
mitigated no equivale a not-affected. Si el control cambia, la vulnerabilidad reaparece. blocked conserva la tarea necesaria para resolverlo.
Controles negativos
Sección titulada «Controles negativos»Una señal positiva gana valor cuando un control negativo no la produce. Ejemplos:
- endpoint afectado frente a endpoint corregido
- usuario autorizado frente a usuario sin el rol
- versión vulnerable frente a versión parcheada
- input de prueba frente a input inerte
- ruta permitida frente a ruta filtrada
Si ambas respuestas son idénticas, quizá se está midiendo un proxy, una plantilla de error o un WAF. La diferencia necesita explicarse antes de concluir.
Falsos positivos
Sección titulada «Falsos positivos»Fuentes frecuentes:
- identificación incorrecta del producto o la versión
- backport no reconocido
- respuesta de proxy atribuida al backend
- plugin que usa una condición suficiente en un producto y no en esta variante
- servicio instalado pero función vulnerable desactivada
- resultado duplicado para varias interfaces del mismo activo
- contenido de seguridad desactualizado
Descartar requiere evidencia. Una excepción administrativa sin prueba no es un falso positivo.
Falsos negativos
Sección titulada «Falsos negativos»La ausencia de resultado puede proceder de:
- activo omitido por descubrimiento
- puerto fuera del rango
- credenciales fallidas o privilegios insuficientes
- plugin deshabilitado
- feed incompleto
- timeout, pérdida o rate limiting
- servicio detrás de un nombre de host, SNI o una ruta no descubierta
- producto sin firma
- vulnerabilidad lógica que el escáner no modela
Un informe de evaluación debe describir esas limitaciones. «No se identificaron vulnerabilidades» solo es defendible dentro de la cobertura observada.
Normalización y agrupación
Sección titulada «Normalización y agrupación»Agrupa por causa y remediación cuando la evidencia lo permita. Una actualización ausente en cien hosts puede ser un hallazgo con cien activos. Cinco configuraciones diferentes que comparten un CVE pueden requerir hallazgos separados.
No dedupliques solo por:
- CVE
- título del plugin
- IP
- puntuación
Conserva una tabla de instancias enlazada al hallazgo:
| Campo normalizado | Contenido |
|---|---|
asset_id |
identificador estable |
endpoint |
interfaz observada |
evidence |
output o artefacto |
condition |
versión, directiva o permiso |
status |
confirmed, likely, not-affected, mitigated o blocked |
source |
escáner, plugin, feed y marca temporal |
Priorizar y redactar
Sección titulada «Priorizar y redactar»Después de validar, añade severidad y contexto. La redacción final explica:
- causa y condición
- activos y exposición
- evidencia reproducible
- consecuencia técnica
- relevancia para el entorno
- remediación de causa
- mitigaciones temporales
- criterio de retest
La exportación del escáner puede acompañar al informe. No es el entregable principal. La rama de documentación e informes conserva la estructura narrativa del hallazgo y activará su referencia especializada cuando alcance profundidad publicable.
Define el criterio antes de la corrección:
El retest se considerará satisfactorio cuando
PRODUCTinforme una build que contengaFIX_REFERENCE, la ruta de prueba deje de producirVULNERABLE_SIGNALy la vista autenticada mantenga cobertura de inventario.
Ejecuta el control positivo y negativo, revisa regresiones y conserva la nueva política y feed. Si el plugin desaparece porque perdió acceso, el hallazgo sigue abierto.