Saltearse al contenido

Dependencias & SCA

El software moderno es, en su mayoría, código de terceros: una app típica tiene cientos de dependencias transitivas. El SCA (Software Composition Analysis) inventaría y evalúa ese código ajeno en busca de vulnerabilidades conocidas y problemas de licencia. Es la respuesta directa a Log4Shell.

- tu código es la punta del iceberg; debajo hay cientos de deps (directas + TRANSITIVAS)
- una vuln en una dep transitiva profunda es TU vuln (Log4Shell estaba "enterrado")
- riesgos: vulns conocidas (CVE), paquetes maliciosos, typosquatting, dependency confusion
SCA identifica dependencias y las cruza con bases de vulns (CVE/GHSA/OSV)
SBOM Software Bill of Materials: inventario completo de componentes (CycloneDX/SPDX)
-> sin SBOM, ante un Log4Shell no sabes DÓNDE lo tienes
# generar SBOM por build y guardarlo -> respuesta rápida a la próxima vuln masiva

Ataques a la cadena de suministro de paquetes

Sección titulada «Ataques a la cadena de suministro de paquetes»
Typosquatting paquete con nombre parecido al legítimo (reqeusts vs requests)
Dependency confusion subir a repo público un paquete con el nombre de uno interno
-> el gestor prioriza la versión pública maliciosa
Paquete comprometido mantenedor hackeado / cuenta robada inyecta código (event-stream)
Protestware el propio autor sabotea su paquete
SCA Dependabot/GitHub, Snyk, OWASP Dependency-Check, Trivy, Grype, osv-scanner
SBOM Syft (genera), CycloneDX, SPDX
Pinning lockfiles (package-lock, poetry.lock) + hashes -> builds reproducibles
- priorizar por EXPLOTABILIDAD y si la vuln es ALCANZABLE (¿se usa esa función?) no solo CVSS
- actualizar con cuidado (tests) ; dependencias sin mantenimiento = riesgo a planificar
- repos privados/proxy (Artifactory/Nexus) + verificación de firmas/hashes
- política contra dependency confusion (scopes, prioridad de repos internos)
  • SCA + SBOM en cada build: inventario para responder rápido a la próxima vuln masiva.
  • Priorizar por explotabilidad/alcanzabilidad (EPSS/KEV, ver Gestión de vulnerabilidades), no por volumen de CVEs.
  • Mitigar dependency confusion/typosquatting con repos internos, scopes y verificación de firmas.
  • Automatizar actualizaciones (Dependabot) con tests; planificar deps abandonadas.
  • Log4Shell (CVE-2021-44228): dep transitiva ubicua; quien tenía SBOM respondió en horas, no semanas.
  • event-stream (2018) y xz/liblzma (CVE-2024-3094): paquetes comprometidos en la cadena de suministro.
  • Dependency confusion (Alex Birsan, 2021): logró ejecución en Apple, Microsoft y otros subiendo paquetes públicos homónimos.
  • SCA en el CI cruzando con CVE/GHSA/OSV
  • SBOM generado por build (Syft/CycloneDX) y almacenado
  • Priorización por explotabilidad/alcanzabilidad (no solo CVSS)
  • Lockfiles con hashes (builds reproducibles)
  • Mitigación de dependency confusion (repos internos/scopes)
  • Actualizaciones automatizadas con tests (Dependabot)
  • Verificación de firmas de paquetes donde sea posible