Qué son los componentes vulnerables y desactualizados
Abra cualquier aplicación web moderna y cuente cuánto código escribió realmente el equipo. Lo normal es que sea una fracción pequeña. El resto son componentes: frameworks, librerías, módulos de sistema operativo, imágenes de contenedor, el intérprete de Python o Node y hasta el servidor web. Todo ese código ajeno corre con los mismos permisos que el suyo. Si uno de esos componentes tiene una vulnerabilidad conocida, su aplicación la hereda.
Qué es A06
Un componente vulnerable es una pieza de software de terceros que su aplicación usa y que tiene una vulnerabilidad pública; uno desactualizado es el que ya tiene una versión más nueva con correcciones que usted no aplicó, o que dejó de recibir soporte. La categoría A06:2021 Componentes vulnerables y desactualizados del OWASP Top 10 reúne ambos casos. No se trata de un error que usted escribió, sino de un riesgo que usted importó y que nadie actualizó a tiempo.
OWASP (Open Worldwide Application Security Project) es una fundación sin fines de lucro que publica guías abiertas de seguridad de aplicaciones. Su Top 10 es la lista de consenso de los riesgos más importantes en aplicaciones web.
Breve historia
| Año | Hito |
|---|---|
| 1999 | Nace el programa CVE, que da un nombre común a cada vulnerabilidad pública |
| 2013 | El Top 10 incluye por primera vez "Uso de componentes con vulnerabilidades conocidas" (A9) |
| 2014 | Heartbleed en OpenSSL obliga a buscar la librería en miles de equipos |
| 2017 | La brecha de Equifax, por un Apache Struts sin parchear, mantiene la categoría como A9 |
| 2021 | Sube a A06 con el nombre actual; Log4Shell muestra el problema de las dependencias transitivas |
| 2025 | La nueva edición la amplía como fallas de la cadena de suministro de software |
En 2021, además, una orden ejecutiva del gobierno de Estados Unidos empezó a exigir a sus proveedores una lista de componentes (SBOM), algo que verá en el módulo 2.
Por qué importa en ciberseguridad y en el trabajo
Explotar una vulnerabilidad conocida es barato: el aviso es público y, a veces, el código de prueba también. Por eso los atacantes escanean internet a las pocas horas de cada aviso grave. Quien defiende tiene que responder rápido a una pregunta simple: "¿usamos esto, en qué versión y dónde?".
En el día a día, esto toca varios roles:
- Desarrollo: elige dependencias, mantiene el lockfile y fusiona actualizaciones.
- Seguridad de aplicaciones (AppSec): audita, prioriza y redacta hallazgos.
- Operaciones y plataforma: actualiza runtimes, imágenes base y servidores.
- SOC: vigila intentos de explotación y alertas de inventario.
Si nadie domina esto, los avisos se acumulan y los parches llegan meses tarde.
Dónde aparecen los componentes
Piense en capas, de arriba hacia abajo:
- Dependencias de la aplicación: paquetes de PyPI o npm como Flask, requests, Express o lodash.
- Runtime: la versión de Python, Node.js, Java o .NET que ejecuta el código.
- Plataforma: el sistema operativo del servidor, la imagen base de Docker, el servidor web o la base de datos.
- Componentes del navegador: librerías JavaScript que se cargan en el cliente, como un jQuery antiguo copiado hace años en una carpeta
static. - Servicios de terceros embebidos: widgets, SDK de pagos o de analítica.
Cada capa tiene su propio ciclo de vida: una aplicación puede tener sus librerías al día y correr sobre un Python sin parches.
Por qué pasa
OWASP describe causas que se repiten en casi todas las organizaciones: no saber qué se usa, software sin soporte (fin de vida), no revisar avisos de forma regular, actualizar tarde, miedo a romper por falta de pruebas y configuración insegura de los componentes. Casi ninguna es técnica: son fallas de proceso. Por eso este curso dedica tanto espacio a políticas y automatización como a herramientas.
Un ejemplo: Mercadito Verde S.A., una tienda en línea ficticia en tienda.ejemplo.cr, tiene un backend en Flask de 2021 que nadie ha tocado:
flask==2.0.0
requests==2.19.1
pyyaml==5.3Las tres versiones tienen avisos públicos desde hace años, y requests trae una versión antigua de urllib3 que nadie eligió. El código propio no tiene errores y, aun así, la aplicación está expuesta.
Conceptos clave
| Concepto | Qué significa |
|---|---|
| Componente | Cualquier software de terceros que su aplicación usa |
| Dependencia | Paquete que otro necesita para funcionar; puede ser directa o transitiva |
| CVE | Identificador único de una vulnerabilidad pública, como CVE-2021-44228 |
| Aviso de seguridad | Documento que describe la vulnerabilidad, las versiones afectadas y la corregida |
| SBOM | Lista formal y legible por máquina de los componentes de un software |
| Lockfile | Archivo que fija la versión exacta de todo el árbol de dependencias |
| Fin de vida (EOL) | Fecha desde la cual una versión ya no recibe parches |
Cómo leer las sintaxis y pedir ayuda
Este curso usa herramientas de línea de comandos. En las fichas, lo que está entre corchetes es opcional, lo que va en MAYÚSCULAS lo reemplaza usted y ... indica que se puede repetir. Por ejemplo, pip install [OPCIONES] PAQUETE... acepta uno o varios paquetes. Para ver la ayuda de cualquier herramienta use pip help install, npm help audit o pip-audit --help.