Cada vez que sale un CVE importante, alguien pega el vector CVSS en el chat del equipo y todos hacen como que lo entienden. Spoiler: la mayoría solo mira el número (9.1 CRITICAL) e ignora el resto.
El problema es que el número solo te dice qué tan grave es. El vector te dice por qué — y eso cambia completamente cómo respondes.
Primero: ¿qué es el CVSS?
CVSS (Common Vulnerability Scoring System) es un sistema de puntuación para describir vulnerabilidades de seguridad. No solo te da un número: te da un vector, que es básicamente una descripción comprimida de cómo funciona el ataque.
Existen dos versiones que vas a ver seguido: v3.1 (la más común hoy) y v4.0 (la más nueva, más detallada). Voy a explicar las dos.
La analogía del ladrón
Para entender el vector CVSS, imagina que una vulnerabilidad es como una forma de entrar a robar a una casa. El vector CVSS responde estas preguntas sobre el "robo":
¿Es difícil entrar? ¿Puerta abierta o cerradura de alta seguridad? (Attack Complexity)
¿Necesita una llave? ¿O entra sin nada? (Privileges Required)
¿Alguien tiene que abrir la puerta desde adentro? (User Interaction)
¿Qué se puede robar? Documentos, muebles, o puede romper cosas también. (Impactos: C/I/A)
CVSS v3.1 — letra por letra
Tomemos este vector real del CVE-2024-9465 (Palo Alto Expedition):
| Código | Nombre | Valor en este CVE | Qué significa en palabras simples |
|---|---|---|---|
| AV:N | Attack Vector — Network | 🔴 Peligroso | El atacante no necesita estar cerca físicamente. Puede atacar desde cualquier lugar del mundo por internet. (N=Network, A=Adjacent, L=Local, P=Physical) |
| AC:L | Attack Complexity — Low | 🔴 Peligroso | El ataque es fácil de ejecutar. No requiere condiciones especiales, timing exacto ni conocimiento avanzado. Cualquiera con el exploit puede hacerlo. (L=Low, H=High) |
| PR:N | Privileges Required — None | 🔴 Peligroso | El atacante no necesita ninguna cuenta ni contraseña previa. Llega, ataca, listo. (N=None, L=Low, H=High) |
| UI:N | User Interaction — None | 🔴 Peligroso | Ningún usuario tiene que hacer clic en nada, abrir ningún archivo ni visitar ningún enlace. El ataque funciona solo. (N=None, R=Required) |
| S:U | Scope — Unchanged | ⚪ Neutral | El impacto se queda en el sistema atacado. No "salta" automáticamente a otros sistemas. (U=Unchanged, C=Changed) |
| C:H | Confidentiality — High | 🔴 Crítico | Toda la información confidencial queda expuesta: contraseñas, API keys, configuraciones. El atacante puede leer todo. (N=None, L=Low, H=High) |
| I:H | Integrity — High | 🔴 Crítico | El atacante puede modificar o crear datos. En este caso, puede escribir archivos arbitrarios en el sistema. (N=None, L=Low, H=High) |
| A:N | Availability — None | 🟢 Sin impacto | El atacante no puede tirar el sistema. El servicio sigue disponible mientras lo explotan en silencio. (N=None, L=Low, H=High) |
CVSS v4.0 — ¿qué cambia?
La versión 4.0 es más nueva y más detallada. Divide el impacto en dos partes: el sistema directamente atacado (Vulnerable System) y otros sistemas que podrían verse afectados (Subsequent System).
| Código | Nombre | Valor | Qué significa |
|---|---|---|---|
| AV:N | Attack Vector — Network | 🔴 | Igual que en v3.1: ataque desde internet, sin estar cerca. |
| AC:L | Attack Complexity — Low | 🔴 | Fácil de ejecutar, sin condiciones especiales. |
| AT:N | Attack Requirements — None | 🔴 | Nuevo en v4.0. El ataque no depende de ninguna condición externa que no controle el atacante (como que haya sesiones activas o configuraciones específicas). (N=None, P=Present) |
| PR:N | Privileges Required — None | 🔴 | Sin cuenta, sin autenticación. |
| UI:N | User Interaction — None | 🔴 | Nadie tiene que hacer nada para que el ataque funcione. |
| VC:H | Vulnerable System Confidentiality — High | 🔴 | El sistema atacado (Expedition): toda su información queda expuesta. Hashes, configs, API keys. |
| VI:L | Vulnerable System Integrity — Low | 🟡 | El sistema atacado: el atacante puede modificar algunos datos, pero no tiene control total de escritura. Impacto parcial en integridad. |
| VA:N | Vulnerable System Availability — None | 🟢 | El sistema atacado: sigue funcionando. No hay denegación de servicio. |
| SC:H | Subsequent System Confidentiality — High | 🔴 | Otros sistemas (los firewalls PAN-OS): como las API keys quedan expuestas, los firewalls también quedan comprometidos en confidencialidad. El daño se propaga. |
| SI:N | Subsequent System Integrity — None | 🟢 | Otros sistemas: el atacante no puede modificar datos en los firewalls directamente a través de este vector. |
| SA:N | Subsequent System Availability — None | 🟢 | Otros sistemas: no puede tumbar los firewalls con este ataque. |
Resumen visual: cómo leer un vector rápido
CVSS:3.1 / AV:? / AC:? / PR:? / UI:? / S:? / C:? / I:? / A:?
│ │ │ │ │ │ │ └─ ¿Se cae el servicio?
│ │ │ │ │ │ └──────── ¿Puede modificar datos?
│ │ │ │ │ └─────────────── ¿Puede leer datos privados?
│ │ │ │ └───────────────────── ¿El daño se propaga a otros sistemas?
│ │ │ └───────────────────────────── ¿Alguien tiene que hacer clic?
│ │ └───────────────────────────────────── ¿Necesita cuenta o contraseña?
│ └───────────────────────────────────────────── ¿Es difícil ejecutarlo?
└───────────────────────────────────────────────────── ¿Desde dónde puede atacar?
Valores de riesgo (de mayor a menor):
N (None) / H (High) = 🔴 → Peor escenario
L (Low) = 🟡 → Impacto parcial
N (None en impacto) = 🟢 → Sin efecto en esa categoría
La frase que resume todo
Cuando veas un vector como el de CVE-2024-9465, tradúcelo a una sola frase antes de enviarlo al equipo:
Eso es lo que dice el vector. Ahora sí sabes por qué tiene un 9.2.
Conclusión
El número CVSS te dice si debes preocuparte. El vector te dice cómo preocuparte. AV:N/AC:L/PR:N/UI:N juntos es lo más peligroso que existe: fácil, remoto y sin depender de nadie. Cuando lo veas así, actúa primero y analiza después.