Seguridad de dependencias y análisis de composición de software
Audite bibliotecas de terceros con herramientas de SCA, aplique el bloqueo de versiones de dependencias e integre alertas automatizadas de vulnerabilidades en el pipeline de CI/CD.
Seguridad de dependencias y análisis de composición de software es una lección gratuita de Security+ Academy en CoddyKit. Esta es la lección 3 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Security+ Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Security+ Academy incluye 4 lecciones en total.
El riesgo de las dependencias de código abierto
Las aplicaciones modernas están compuestas en gran medida por bibliotecas y frameworks de código abierto de terceros. Una aplicación típica de Node.js puede tener más de 1.000 dependencias transitivas; un proyecto Java puede incorporar cientos de artefactos de Maven. Cada dependencia constituye una posible superficie de ataque. La vulnerabilidad Log4Shell (CVE-2021-44228) de la biblioteca Log4j demostró que una sola dependencia podía hacer que millones de aplicaciones fueran explotables de inmediato en todo el mundo pocos días después de divulgarse la vulnerabilidad.
¿Qué es el análisis de composición de software?
Las herramientas de análisis de composición de software (SCA) inventarían automáticamente todos los componentes de código abierto de una aplicación, incluidas las dependencias transitivas (las dependencias de sus dependencias), y los comprueban continuamente con bases de datos de vulnerabilidades en busca de CVE conocidas. SCA genera una lista de materiales de software (SBOM) que enumera cada componente y versión, lo que permite identificar rápidamente los sistemas afectados cuando se divulgan nuevas vulnerabilidades.
# SCA tool usage examples:
# npm audit (Node.js):
# npm audit
# -> Reports vulnerabilities in package.json dependencies
# -> Shows severity, CVE ID, affected package, fix version
# OWASP Dependency-Check (Java/Python/etc.):
# dependency-check --project 'MyApp' --scan ./lib/
# -> Generates HTML/XML report with CVE findings
# Snyk scan:
# snyk test
# -> Reports vulns + 'snyk fix' applies patches automaticallyDependencias transitivas: el riesgo oculto
Las dependencias transitivas son bibliotecas de las que dependen sus dependencias directas y que usted no ha elegido explícitamente. Puede depender directamente del Paquete A, que depende del Paquete B (versión 1.2), que depende del Paquete C (versión 3.0, una versión vulnerable). Usted no conoce el Paquete C, pero su aplicación lo ejecuta. Las herramientas SCA recorren el árbol completo de dependencias para revelar estas vulnerabilidades ocultas, que los desarrolladores no pueden ver directamente.
# Dependency tree example:
# Your package.json:
# 'express': '^4.18.0' (direct dependency)
# 'lodash': '^4.17.21' (direct dependency)
# Transitive dependencies (you didn't choose these):
# express -> 'qs' 6.11.0 (URL parsing)
# express -> 'body-parser' 1.20 -> 'qs' 6.11.0
# lodash (self-contained in this case)
# If 'qs' 6.10.x had a prototype pollution CVE,
# you are vulnerable via express even though
# you never directly imported 'qs'.La lista de materiales de software (SBOM)
Una lista de materiales de software (SBOM) es un inventario formal y legible por máquinas de todos los componentes de un producto de software, similar a la lista de ingredientes de un alimento. Entre los formatos de SBOM se incluyen SPDX (Linux Foundation) y CycloneDX (OWASP). La Orden Ejecutiva 14028 de Estados Unidos (2021) estableció la obligatoriedad de las SBOM para el software vendido al Gobierno federal. Con una SBOM, los equipos de seguridad pueden consultar inmediatamente: «¿cuáles de nuestros productos contienen Log4j?» y obtener respuestas en minutos, en lugar de tardar días con búsquedas manuales.
# Generate SBOM with syft:
# syft packages . -o spdx-json > sbom.spdx.json
# SBOM content example (SPDX JSON):
# {
# 'packages': [
# { 'name': 'express', 'version': '4.18.2', 'license': 'MIT' },
# { 'name': 'lodash', 'version': '4.17.21','license': 'MIT' },
# { 'name': 'log4j-core','version': '2.14.0','license': 'Apache-2.0'}
# ]
# }
# When Log4Shell announced, query SBOM:
# grep -i 'log4j-core' sbom.spdx.json -> FOUND in 3 projectsFijación de dependencias y archivos de bloqueo
La fijación de dependencias especifica versiones exactas de las dependencias en lugar de rangos flexibles (^1.2.3 o *). Los archivos de bloqueo (package-lock.json, yarn.lock, Pipfile.lock, Gemfile.lock) registran la versión exacta resuelta de cada dependencia durante la instalación. Estos archivos deben confirmarse en el control de código fuente para garantizar que todos los miembros del equipo y las canalizaciones de CI/CD utilicen versiones idénticas de las dependencias y evitar ataques a la cadena de suministro que envenenen las versiones de los paquetes entre instalaciones.
# Version range vs pinned versions:
# FLEXIBLE (can pull different versions each install):
# 'express': '^4.0.0' -> installs latest 4.x.x
# 'lodash': '*' -> installs any version!
# PINNED (always same version):
# 'express': '4.18.2' -> always exactly 4.18.2
# Lock file (package-lock.json):
# Records EXACT resolved version of every transitive dep.
# Commit this file! It ensures reproducible builds.
# Never .gitignore lock files (security anti-pattern).Ataques a la cadena de suministro: typosquatting y confusión de dependencias
Los ataques a la cadena de suministro tienen como objetivo el ecosistema de dependencias. El typosquatting consiste en publicar paquetes maliciosos con nombres similares a los de paquetes populares (por ejemplo, lodahs en lugar de lodash) con la esperanza de que los desarrolladores escriban mal el nombre. Los ataques de confusión de dependencias aprovechan el orden en que los administradores de paquetes buscan en los registros: un atacante publica un paquete malicioso con el mismo nombre que un paquete privado interno, pero con un número de versión superior, lo que hace que el administrador de paquetes instale en su lugar la versión pública maliciosa.
# Dependency Confusion Attack (Alex Birsan 2021):
# Company uses internal package 'company-utils' v1.0.0
# Hosted on: internal.registry.company.com
# Attacker publishes 'company-utils' v9.9.9 to npmjs.com
# (public registry with higher version number)
# npm install resolves: 'find highest version across ALL registries'
# -> Installs v9.9.9 from public npm (attacker's malicious package!)
# -> Instead of v1.0.0 from internal registry
# Defense: use namespace scoping (@company/utils)
# or configure npm to ONLY use internal registry for private packagesHerramientas SCA del mercado
En el sector se utilizan ampliamente varias herramientas SCA. Snyk ofrece análisis de dependencias orientado a desarrolladores, con solicitudes de cambios automáticas para corregir problemas. OWASP Dependency-Check es una herramienta gratuita y ampliamente adoptada para Java, .NET, Python y Ruby. GitHub Dependabot abre automáticamente solicitudes de cambios para actualizar dependencias vulnerables en repositorios de GitHub. JFrog Xray y Sonatype Nexus IQ integran SCA en los repositorios de artefactos para impedir que las compilaciones vulnerables lleguen a producción.
Integración de SCA en las canalizaciones de CI/CD
SCA resulta más eficaz cuando se integra como una puerta de calidad en la canalización de CI/CD. En cada solicitud de cambios y compilación, la canalización ejecuta la herramienta SCA y falla la compilación si se encuentran CVE de gravedad crítica o alta en las dependencias. Este enfoque de «desplazamiento a la izquierda» detecta las dependencias vulnerables antes de que lleguen a producción, no meses después durante una revisión de seguridad manual ni después de una brecha. Los equipos deben definir umbrales claros de gravedad de vulnerabilidades para distinguir las que bloquean la implementación de las que solo generan advertencias.
# GitHub Actions SCA pipeline step:
# - name: Run Snyk SCA scan
# uses: snyk/actions/node@master
# env:
# SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }}
# with:
# args: --severity-threshold=high
# --fail-on=upgradable
# # Build fails if any HIGH or CRITICAL vuln found
# # that has an available fix (--fail-on=upgradable)
# # No fix available? Generates warning, doesn't block
# # (acknowledging risk explicitly is better than blocking forever)Evaluación del estado de los paquetes de código abierto
Antes de añadir una dependencia, evalúe su postura de seguridad mediante varias señales. Actividad de mantenimiento: ¿se mantiene el proyecto de forma activa? ¿Cuándo se realizaron la última confirmación y la última publicación? Historial de vulnerabilidades conocidas: ¿cuántas CVE ha tenido y con qué rapidez se corrigieron? Volumen de descargas: los paquetes ampliamente utilizados reciben un mayor escrutinio de seguridad. Número de dependencias: los paquetes con menos dependencias introducen menos riesgo transitivo. OpenSSF Scorecard proporciona una puntuación automatizada de las prácticas de seguridad de los proyectos de código abierto.
Estrategias de corrección de vulnerabilidades
Cuando SCA identifica una dependencia vulnerable, existen varias estrategias de corrección. Actualícela a una versión corregida: es la opción preferida cuando está disponible. La aplicación de parches virtuales mediante reglas de WAF puede mitigar las rutas de explotación conocidas mientras se prepara una actualización. Elimine la dependencia si ya no es necesaria. Acepte el riesgo con una justificación documentada si la vulnerabilidad no se puede explotar en el contexto de uso específico (por ejemplo, una vulnerabilidad del lado del servidor en una biblioteca del lado del cliente). Nunca deje vulnerabilidades críticas sin abordar ni una aceptación documentada.
Cumplimiento de licencias en las dependencias
Las herramientas SCA tienen una doble finalidad: identifican vulnerabilidades de seguridad y señalan problemas de cumplimiento de licencias en las dependencias de código abierto. Entre las licencias problemáticas más comunes se incluyen GPL v2/v3 (copyleft: exige que su producto también se publique como código abierto si lo distribuye), AGPL (extiende la GPL a los servicios de red) y SSPL. Usar una biblioteca con licencia GPL en software comercial propietario sin una licencia comercial puede generar una responsabilidad legal grave. Herramientas SCA como FOSSA, Black Duck y WhiteSource automatizan el análisis de licencias junto con la detección de vulnerabilidades para garantizar el cumplimiento de las obligaciones del código abierto.
# License compliance risk levels:
# PERMISSIVE (low risk for commercial use):
# MIT, Apache 2.0, BSD 2/3-Clause
# -> Can use in proprietary code, just keep attribution
# WEAK COPYLEFT (medium risk - check usage):
# LGPL -> can link dynamically without open-sourcing your code
# MPL 2.0 -> modifications to MPL files must be open-sourced
# STRONG COPYLEFT (high risk for proprietary products):
# GPL v2, GPL v3 -> if you distribute code using GPL library,
# your entire product must also be GPL
# AGPL -> extends GPL to SaaS/network services
# SCA policy: block AGPL/GPL in commercial product
# -> Review any exception requests manuallyComprobación rápida
Compruebe su comprensión de los conceptos de CompTIA Security+ (SY0-701) tratados en esta lección.
Resumen de la lección
En esta lección ha aprendido que: las herramientas SCA analizan el árbol completo de dependencias, incluidas las dependencias transitivas, en busca de CVE conocidas; las SBOM proporcionan un inventario legible por máquinas que permite responder rápidamente cuando se divulgan nuevas vulnerabilidades; e integrar SCA como una puerta de calidad de CI/CD detecta las dependencias vulnerables antes de que lleguen a producción. A continuación, exploraremos DevSecOps y cómo desplazar los controles de seguridad hacia la izquierda, integrándolos en toda la canalización de CI/CD.
Preguntas frecuentes
¿La lección «Seguridad de dependencias y análisis de composición de software» es gratis?
Sí — el texto completo de «Seguridad de dependencias y análisis de composición de software» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Security+ Academy, actualiza a CoddyKit PRO. El curso de Security+ Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Seguridad de dependencias y análisis de composición de software»?
Audite bibliotecas de terceros con herramientas de SCA, aplique el bloqueo de versiones de dependencias e integre alertas automatizadas de vulnerabilidades en el pipeline de CI/CD. Practicas Security+ Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Security+ Academy?
No se requiere experiencia previa. Security+ Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 4.
¿Cuánto tiempo toma la lección «Seguridad de dependencias y análisis de composición de software»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Security+ Academy?
Sí. Cada lección de Security+ Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Validación de entradas y codificación de salidas
- Gestión segura de secretos y variables de entorno
- Seguridad de dependencias y análisis de composición de software
- DevSecOps: integrar la seguridad desde el inicio en los pipelines