A03: Software Supply Chain Failures — Un riesgo creciente del OWASP Top 10:2025

En este artículo continuamos el análisis de las categorías del OWASP Top 10:2025, explorando A03: Software Supply Chain Failures, una vulnerabilidad que ha ganado enorme relevancia en los últimos años debido a la fuerte dependencia de librerías, frameworks, contenedores y servicios de terceros en el desarrollo moderno.

En los artículos anteriores analizamos A01: Broken Access Control y A02: Security Misconfiguration, dos riesgos críticos que afectan directamente la lógica de la aplicación y su configuración. En esta ocasión, el foco se desplaza hacia un problema más amplio: la cadena de suministro de software.

🚀 ¿Qué es Software Supply Chain Failures?

A03: Software Supply Chain Failures hace referencia a los riesgos introducidos cuando una aplicación depende de componentes externos que pueden ser comprometidos, manipulados o construidos de forma insegura.

Esto incluye:

  • Librerías open source
  • Dependencias de terceros (npm, pip, Maven, etc.)
  • Imágenes de contenedores
  • Pipelines de CI/CD
  • Proveedores de software o APIs externas

En otras palabras, no solo importa el código que escribimos, sino todo lo que usamos para construir y ejecutar la aplicación.

Si uno de esos componentes es comprometido, toda la aplicación puede quedar expuesta.


🎯 ¿Por qué es una vulnerabilidad tan crítica?

La cadena de suministro de software es crítica porque las aplicaciones modernas dependen de cientos o incluso miles de dependencias.

Un solo componente comprometido puede afectar a múltiples sistemas simultáneamente.

Una explotación exitosa puede permitir:

  • Inyectar código malicioso en aplicaciones legítimas
  • Robar credenciales o secretos del sistema
  • Modificar el comportamiento de la aplicación sin ser detectado
  • Introducir puertas traseras persistentes
  • Comprometer pipelines de desarrollo y despliegue
  • Propagar ataques a múltiples organizaciones en cascada

Este tipo de ataque no requiere comprometer directamente la aplicación final: basta con atacar un componente intermedio.


🔍 Ejemplos comunes

📦 Dependencias vulnerables en librerías open source

Una aplicación utiliza una librería desactualizada con una vulnerabilidad conocida.

El atacante aprovecha esa debilidad para ejecutar código dentro del sistema.

Ejemplo típico:

  • Frameworks o paquetes sin actualizar
  • Dependencias abandonadas

⚙️ Paquetes maliciosos en repositorios públicos

Un atacante publica un paquete con un nombre similar a uno legítimo (typosquatting).

Ejemplo:

  • requset en lugar de request

Si un desarrollador lo instala por error, puede introducir código malicioso en el proyecto.


☁️ Imágenes de contenedores comprometidas

Una imagen Docker descargada de un repositorio público contiene software modificado.

Esto puede incluir:

  • Backdoors
  • Mineros de criptomonedas
  • Exfiltración de datos
  • Credenciales embebidas

🔗 Compromiso de pipelines CI/CD

Un atacante obtiene acceso al pipeline de integración continua y modifica el proceso de build.

Esto permite:

  • Inyectar código en cada despliegue
  • Alterar binarios en producción
  • Robar secretos del pipeline

🔐 Dependencias transitivas inseguras

No solo importan las dependencias directas, sino también las indirectas.

Ejemplo:

Tu app usa A → A usa B → B tiene una vulnerabilidad crítica.

Aunque no uses B directamente, sigues siendo vulnerable.


⚠️ Principales causas

Las fallas en la cadena de suministro suelen originarse por:

  • Falta de control sobre dependencias externas
  • Uso de versiones desactualizadas
  • Ausencia de verificación de integridad (hashes o firmas)
  • Confianza excesiva en repositorios públicos
  • Pipelines CI/CD sin hardening
  • Falta de escaneo de vulnerabilidades en dependencias
  • Uso de imágenes no oficiales o no verificadas
  • Falta de monitoreo de dependencias transitivas

🛡️ ¿Cómo mitigar esta vulnerabilidad?

Buenas prácticas para reducir el riesgo:

  • Mantener dependencias siempre actualizadas
  • Usar herramientas de Software Composition Analysis (SCA)
  • Verificar integridad de paquetes e imágenes (hashes, firmas)
  • Utilizar fuentes oficiales y repositorios confiables
  • Bloquear versiones específicas (version pinning)
  • Escanear contenedores antes de producción
  • Proteger pipelines CI/CD con controles de acceso
  • Auditar dependencias transitivas regularmente
  • Generar SBOM (Software Bill of Materials)


💡 Conclusión

Software Supply Chain Failures demuestra que la seguridad moderna no depende solo del código propio, sino de todo el ecosistema que lo rodea.

A medida que aumenta la adopción de open source, contenedores y CI/CD, también crece la superficie de ataque en la cadena de suministro.

Controlar y monitorear estas dependencias es esencial para evitar compromisos a gran escala.


🔜 Próximo artículo

En el próximo artículo analizaremos A04: Cryptographic Failures, una categoría que abarca los errores relacionados con el uso inadecuado de mecanismos criptográficos para proteger información sensible.

Veremos cómo prácticas inseguras como el uso de algoritmos obsoletos, una gestión deficiente de claves, el almacenamiento inseguro de contraseñas o la falta de cifrado adecuado pueden comprometer la confidencialidad e integridad de los datos, exponiendo a las organizaciones a filtraciones de información y otros incidentes de seguridad.

blog