Bienvenida al curso
Bienvenido a OWASP A06: componentes vulnerables y desactualizados. En diciembre de 2021 se publicó CVE-2021-44228, Log4Shell, una falla en la librería de registro log4j de Java con la nota máxima de CVSS, 10.0. Parchearla era sencillo. Lo difícil, en muchos equipos, fue contestar la pregunta del lunes siguiente: "¿usamos log4j, y dónde?". Casi nadie la había puesto en su lista de dependencias; llegaba escondida dentro de otra librería, dentro de un producto comprado, dentro de una imagen de contenedor. Quien tenía un inventario contestó en una hora. Quien no, pasó la semana buscando.
Este curso trata de ese inventario y de todo lo que se hace con él: el código que su aplicación no escribió, pero ejecuta igual.
Qué va a lograr
- Explicar qué es un componente vulnerable, por qué aparece y cómo llegó al OWASP Top 10.
- Distinguir dependencias directas y transitivas y responder "¿por qué está esto aquí?" con
pipdeptreeynpm explain. - Generar un SBOM en CycloneDX y auditar un proyecto con
pip-auditynpm audit. - Fijar versiones con lockfiles y hashes, y automatizar actualizaciones con Dependabot y una auditoría en CI.
- Planificar el fin de vida de runtimes y reemplazar componentes abandonados.
- Priorizar hallazgos con CVSS, EPSS y KEV, detectar intentos de explotación y redactar un reporte.
Para quién es y qué necesita
Para quien desarrolla, para analistas de seguridad de aplicaciones y para operaciones, que es quien suele heredar el servidor con Python 3.8 que "nadie se atreve a tocar". Conviene haber hecho Seguridad web con OWASP Top 10; si la terminal le es nueva, antes haga Linux básico: 15 comandos para empezar. Necesita Python 3.11 o superior, una terminal y conexión a internet, porque las auditorías consultan bases de avisos en vivo. Node.js es opcional, solo para la comparación con npm.
Cómo está organizado
| Módulo | Qué aprende | Laboratorio |
|---|---|---|
| 1. Qué son los componentes vulnerables y por qué aparecen | Qué es A06, dependencias directas y transitivas, pip, pipdeptree, CVE y avisos | Inventario de dependencias de su app Flask |
| 2. Cómo se ve en el código y cómo se revisa | SBOM con cyclonedx-py, versiones, npm ci, pip-compile, pip-audit, npm audit y uso seguro de APIs | SBOM y auditoría de una versión heredada |
| 3. Cómo se previene y se corrige | Política de actualización con ASVS, Dependabot, pytest, fin de vida y parcheo virtual | Corregir dependencias y probarlo |
| 4. Detectar, monitorear y reportar | CVSS, EPSS, KEV, búsqueda en logs, reglas de WAF y la conclusión | Priorizar hallazgos y redactar el reporte |
| Evaluación | 6 preguntas sobre todo el curso | Aprueba con 70 % |
Cómo aprovecharlo
Sus resultados no van a coincidir con los del texto, y eso es correcto: las bases de avisos cambian a diario, así que un pip-audit de hoy puede listar un aviso que no existía cuando se escribió la lección. Lea su salida, no la del ejemplo.
El laboratorio del módulo 2 es el que más enseña. Usted audita un requirements heredado con un requests de 2018 y pip-audit le marca avisos de urllib3, un paquete que nadie pidió. Ese momento explica las dependencias transitivas mejor que cualquier diagrama. Al aprobar la evaluación final con 70 % recibe el certificado y la insignia.
Tiempo estimado
Unas 4 horas y media, casi 5. Los laboratorios encadenan la misma API Flask, mercadito-api: hágalos en orden y no borre la carpeta entre uno y otro.