Skip to main content

Resumen

  • Qué hace: El escaneo de dependencias, también conocido como Análisis de Composición de Software (SCA), identifica automáticamente vulnerabilidades de seguridad conocidas en las dependencias y bibliotecas de terceros de tu proyecto. Escanea archivos de manifiestos de dependencias (como package.json, requirements.txt, pom.xml) y proporciona información detallada sobre vulnerabilidades, incluyendo identificadores CVE, puntuaciones CVSS y orientación para remediación.
  • Para quién es: Esta función está dirigida a equipos de seguridad, desarrolladores, ingenieros de DevOps y cualquier persona responsable de mantener aplicaciones seguras. Resulta especialmente útil en proyectos con numerosas dependencias de terceros cuyos equipos deben conocer las vulnerabilidades que pueden afectar a sus aplicaciones.

Características y beneficios principales

  • Cobertura integral de ecosistemas: Analiza dependencias de 25+ lenguajes y ecosistemas, como Python, JavaScript/Node.js, Java, Go, Ruby, PHP, C# y Swift
  • Fuentes de datos reconocidas: Utiliza numerosas bases de datos de vulnerabilidades fiables, entre ellas:
    • GitHub Advisory Database (CC-BY 4.0)
    • PyPI Advisory Database (CC-BY 4.0)
    • Go Vulnerability Database (CC-BY 4.0)
    • Rust Advisory Database (CC0 1.0)
    • Global Security Database (CC0 1.0)
    • OSS-Fuzz (CC-BY 4.0)
    • Rocky Linux (BSD)
    • AlmaLinux (MIT)
    • Avisos de seguridad de Haskell (CC0 1.0)
    • RConsortium Advisory Database (Apache 2.0)
    • Paquetes maliciosos OpenSSF (Apache 2.0)
    • Base de datos de Python Software Foundation (CC-BY 4.0)
    • Base de datos de vulnerabilidades de Bitnami (Apache 2.0)
    • Ubuntu (GPL v3)
    • Y muchas más fuentes autorizadas
  • Información detallada sobre vulnerabilidades: Proporciona:
    • Identificadores CVE e identificadores alternativos de vulnerabilidades
    • Puntuaciones y calificaciones de gravedad CVSS (Crítica, Alta, Media, Baja)
    • Versiones de paquetes afectadas y correcciones disponibles
    • Descripciones detalladas de vulnerabilidades y referencias
    • Enlaces a avisos de fuentes como GitHub Advisory Database, NVD y los proveedores, cuando estén disponibles
    • Fechas de publicación y enlaces externos
  • Lógica de escaneo inteligente: Detecta automáticamente cuando hay archivos de dependencia presentes y optimiza el rendimiento de escaneo

Instrucciones de configuración

El proyecto debe contener al menos un archivo de dependencia compatible y permisos apropiados para realizar escaneos de seguridad.

Pasos de configuración

1

Verificar archivos de dependencia

Asegúrate de que tu proyecto contiene archivos de dependencias compatibles:
2

Configurar el alcance de escaneo

Elige si incluir el escaneo de dependencias en escaneos completos o parciales
3

Configurar notificaciones

Configura cómo quieres ser notificado de nuevas vulnerabilidades

Guía de uso

Para consultar las dependencias de un escaneo, descargar archivos SBOM o exportar las dependencias a CSV necesitas el permiso Ver problema SCA. Si el control de acceso a proyectos está habilitado, también debes tener acceso al proyecto.

Flujos de trabajo clave

  1. Detección automática: El sistema identifica automáticamente los archivos de dependencias en el directorio de tu proyecto
  2. Escaneo exhaustivo: Analiza todos los archivos de dependencias compatibles y compara los paquetes con bases de datos de vulnerabilidades
  3. Procesamiento de vulnerabilidades: Analiza los resultados y los enriquece con información de seguridad adicional
  4. Creación de hallazgos: Crea un hallazgo con seguimiento por cada vulnerabilidad detectada
  5. Informes: Genera informes completos con recomendaciones prácticas de remediación

Filtros de la vista de dependencias

Vista de dependencias Utiliza filtros en la vista de Dependencias para restringir los resultados de SCA:
  • Buscar: Encuentra hallazgos por CVE, nombre de paquete o resumen
  • Gravedad: Limita los resultados a hallazgos críticos, altos, medios o bajos
  • Estado del SLA: Muestra los hallazgos de dependencias vencidos o escalados cuando se aplica un SLA de SCA
  • Ecosistema: Limita los resultados a un ecosistema de paquetes concreto
  • Proyecto: Filtra a un proyecto específico por nombre (muestra solo proyectos a los que puedes acceder)
  • Licencia: Filtra por la licencia de la dependencia
  • Tipo de dependencia: Muestra dependencias directas, transitivas, de desarrollo u opcionales
  • Alcanzabilidad: Muestra hallazgos alcanzables, inalcanzables, no utilizados o cuyo análisis sigue en curso. Consulta Análisis de alcanzabilidad
  • Corrección disponible: Muestra solo hallazgos con una corrección conocida
Escaneos afectados cuenta los escaneos distintos en los que se detectó una vulnerabilidad, incluso cuando el mismo escaneo la encuentra en múltiples paquetes o manifiestos.

Exportar dependencias a CSV

Haz clic en Exportar CSV en la vista de Dependencias para descargar los resultados que coincidan con tu búsqueda y filtros actuales. La exportación incluye detalles de paquetes y vulnerabilidades, tipo de dependencia y alcance alcanzable, proyecto y rama, y la ruta del manifiesto afectada. Cuando el Control de Acceso al Proyecto está activado, la exportación incluye solo los proyectos a los que puedes acceder.

Dependencias transitivas

Muchas vulnerabilidades de los proyectos modernos se encuentran en dependencias transitivas: paquetes que no añadiste directamente, sino que incorporaron otras dependencias. Corgea resuelve el grafo completo para mostrar exactamente de qué depende la aplicación y por qué.

Tipos de dependencias

En los resultados de escaneo, los grupos de paquetes incluyen insignias que muestran de dónde proviene una dependencia vulnerable:
  • Direct: El paquete vulnerable es una dependencia directa declarada en tu manifiesto (por ejemplo, package.json o pom.xml).
  • Transitivo: El paquete vulnerable se incorpora indirectamente mediante otra dependencia.
  • Dev: El paquete vulnerable se utiliza como dependencia de desarrollo (compilación, prueba o herramienta) en lugar de en tiempo de ejecución.
  • Opcional: El paquete vulnerable se marca como dependencia opcional.
En la página de detalles del hallazgo de SCA, el tipo de dependencia aparece junto a sus demás datos. La insignia Sub-dependencias indica que el paquete seleccionado contiene dependencias anidadas.

Cómo se construye el grafo de dependencias

Corgea construye el árbol de dependencias combinando los paquetes que declaras con los paquetes que tu build realmente resuelve:
  1. Las dependencias directas se leen de los manifiestos (package.json, pom.xml, requirements.txt, go.mod, Gemfile y otros).
  2. Las dependencias transitivas se resuelven a partir de lockfiles —como package-lock.json, yarn.lock, poetry.lock y go.sum— y de un SBOM generado, que contiene las versiones resueltas exactas y sus relaciones jerárquicas.
  3. Cuando falta un lockfile, Corgea intenta generarlo automáticamente en los ecosistemas compatibles (por ejemplo, resolviendo dependencias de Python o .NET) para poder analizar también los paquetes transitivos.
Cada dependencia registra el padre que la introdujo y la dependencia directa raíz a la que se remonta, lo que permite a Corgea mostrar la ruta completa desde tu manifiesto hasta el paquete vulnerable.

Vista del árbol de dependencias

La vista de dependencias puede representarlas como un árbol desplegable, donde puedes expandir una dependencia directa para ver todos los paquetes que incorpora:
La búsqueda en el árbol resalta los paquetes coincidentes y mantiene visibles sus antecesores para mostrar por qué está presente un paquete vulnerable. Por motivos de rendimiento, el árbol no se renderiza en proyectos muy grandes —con más de unas 10.000 dependencias—; en esos casos, utiliza las vistas de lista y búsqueda.

Ecosistemas compatibles

El escaneo de dependencias es compatible con los siguientes ecosistemas:
  • AlmaLinux - Paquetes de Linux empresarial
  • Alpine - Paquetes de Linux Alpine
  • Android - Dependencias de aplicaciones Android
  • Bitnami - Paquetes de aplicaciones Bitnami
  • crates.io - Paquetes de Rust
  • Curl - vulnerabilidades en la biblioteca cURL
  • Debian GNU/Linux - Paquetes de Debian
  • Git - Repositorios Git (incluyendo C/C++)
  • GitHub Actions - Workflows de GitHub Actions
  • Go - Módulos y paquetes de Go
  • Haskell - Paquetes de Haskell
  • Hex - Paquetes de Elixir
  • Kernel de Linux - Vulnerabilidades del kernel de Linux
  • Maven - Dependencias de Java Maven
  • npm - Paquetes de Node.js
  • NuGet - Paquetes .NET
  • OSS-Fuzz - El servicio de fuzzing continuo de Google
  • Packagist - Paquetes PHP
  • Pub - Paquetes de Dart
  • PyPI - Paquetes en Python
  • Python - Vulnerabilidades del lenguaje Python
  • R - Paquetes R (CRAN y Bioconductor)
  • Rocky Linux - Paquetes de Rocky Linux
  • RubyGems - Paquetes de Ruby
  • SwiftURL - Paquetes Swift
  • Ubuntu OS - Paquetes de Ubuntu

Ejemplo de proyecto multiecosistema

Enterprise Application Structure

Desglose de la gravedad de la vulnerabilidad

Crítico: Se requiere acción inmediata, posible compromiso total del sistema
  • Alto: Debe abordarse con prontitud, impacto significativo en la seguridad
  • Medio: Debería tratarse en ciclos de mantenimiento regulares
  • Bajo: Hallazgos menores que pueden abordarse cuando resulte conveniente

Análisis de alcanzabilidad

Un paquete vulnerable en el árbol de dependencias no implica necesariamente que la aplicación esté expuesta. El análisis de alcanzabilidad ayuda a priorizar al determinar si el código puede activar la vulnerabilidad. Por cada dependencia directa vulnerable, Corgea responde a dos preguntas:
  1. ¿Se usa el paquete? Corgea busca importaciones y usos del paquete en tu código. Un paquete que se declara pero nunca se importa conlleva un riesgo mucho menor.
  2. ¿Es accesible la función vulnerable? Para los paquetes que se usan, Corgea analiza si tu código realmente llama a las funciones específicas afectadas por la vulnerabilidad.
Corgea trata de forma distinta las bibliotecas auxiliares y los frameworks. En las bibliotecas auxiliares, puede buscar llamadas directas a las funciones vulnerables. En los frameworks, donde el código vulnerable se ejecuta dentro del propio framework y no mediante una función invocada directamente, la alcanzabilidad se marca como incierta, porque no puede determinarse solo a partir del código de la aplicación.
El análisis de alcanzabilidad se ejecuta en las dependencias directas. Las vulnerabilidades de dependencias transitivas se notifican y pueden corregirse —consulta Recomendaciones de corrección—, pero su alcanzabilidad no se analiza de forma individual.

Estados de alcanzabilidad

Cada hallazgo analizado recibe uno de los siguientes estados, que también puedes utilizar como filtros en la vista de dependencias:
  • Accesible: Tu código llama a la funcionalidad vulnerable. Estas son la máxima prioridad, especialmente para dependencias directas.
  • Inalcanzable: Se utiliza el paquete, pero no se llaman las funciones vulnerables.
  • No utilizado: El paquete está declarado pero no se usa en tu código.
  • Analizando: El análisis de alcanzabilidad del hallazgo sigue en curso.

Visualización de la alcanzabilidad

En los hallazgos alcanzables, Corgea puede representar la ruta desde los puntos de entrada de la aplicación hasta el código vulnerable. Muestra cómo fluye la ejecución desde los endpoints, pasa por funciones intermedias y llega a la función vulnerable, lo que permite comprender y validar la alcanzabilidad.

Recomendaciones de corrección

Cuando existe una corrección, Corgea recomienda la versión corregida más próxima, es decir, la versión más baja que resuelve la vulnerabilidad, y la muestra junto a la instalada. Así, la actualización es lo más pequeña posible y se reduce el riesgo de cambios incompatibles. En las dependencias directas, puedes aplicar la corrección actualizando la versión en el manifiesto. En las dependencias transitivas, normalmente no puedes sustituir la versión directamente porque la controla un paquete padre. Corgea muestra la ruta de dependencias y la dependencia padre que debes actualizar para incorporar la versión transitiva corregida. Consulta Dependencias transitivas para saber cómo se construye la ruta.
Las recomendaciones de corrección de dependencias son orientativas. Comprueba la compatibilidad de las actualizaciones antes de aplicarlas.

Escaneo de licencias

Durante el escaneo de dependencias, Corgea captura la licencia de software asociada a cada dependencia, dándote visibilidad sobre las licencias presentes en todo tu proyecto. La información de licencias aparece de dos formas:
El escaneo de licencias proporciona un inventario de licencias para visibilidad e informes. No aplica automáticamente las políticas de cumplimiento de licencias.

Escaneo de imágenes en contenedor

Corgea también escanea las imágenes de contenedor de las que depende el proyecto e identifica vulnerabilidades en paquetes base del sistema operativo y en otros programas instalados en sus capas. Las imágenes se detectan automáticamente en archivos Dockerfile y Docker Compose, sin configuración adicional. Para conocer los métodos de detección, los registros compatibles y los límites, consulta Escaneo de imágenes de contenedor.

Detección de paquetes maliciosos

Como parte del escaneo de dependencias, Corgea identifica paquetes maliciosos o comprometidos conocidos, como typosquats, versiones secuestradas y versiones con puertas traseras, mediante OpenSSF Malicious Packages y fuentes de avisos relacionadas. Para obtener más información, consulta Detección de paquetes maliciosos.

Mejores prácticas

Activa el escaneo automático para detectar nuevas vulnerabilidades a medida que se revelan en tiempo real.
  • Escaneo periódico: Habilita el escaneo automático para detectar vulnerabilidades nuevas a medida que se publican
  • Actualizaciones de dependencias: Actualiza rápidamente las dependencias cuando haya correcciones disponibles
  • Priorización por gravedad: Aborda primero las vulnerabilidades críticas y de gravedad alta
  • Evaluación de riesgos: Evalúa si las vulnerabilidades afectan realmente a la superficie de ataque de tu aplicación
  • Higiene de dependencias: Revisa y elimina periódicamente las dependencias sin usar para reducir la superficie de ataque
  • Versiones fijas: Utiliza números de versión concretos en los archivos de dependencias para obtener resultados coherentes
  • Monitorización: Configura alertas para nuevas vulnerabilidades descubiertas en tus dependencias
  • Documentación: Mantén registros de los riesgos aceptados y de las decisiones de remediación

Resolución de problemas

Solución: Comprueba que los archivos de dependencias tengan formatos compatibles y contengan información válidaComprobación: Asegúrate de que los archivos no estén dañados ni contengan errores de sintaxis
Solución: Comprueba que todos los archivos de dependencias estén incluidos en el ámbito del escaneoComprobación: Verifica que los archivos de dependencias tengan un formato correcto y sean accesibles
Solución: Revisa los detalles de las vulnerabilidades para determinar si afectan realmente a la aplicaciónComprobación: Considera los patrones de uso específicos y los vectores de ataque en tu aplicación
Solución: Es normal en proyectos grandes con muchas dependenciasComprobación: Considera usar escaneo incremental solo para archivos modificados