Dev.to · 5 min read

Escaneo de dependencias e imágenes Docker de una API .NET con Grype

Escaneo de dependencias e imágenes Docker de una API .NET con Grype

Introducción En este artículo uso Grype, de Anchore, para encontrar vulnerabilidades conocidas (CVE) en las dependencias NuGet y en la imagen Docker de una API .NET 8, todo automatizado con GitHub Actions. La mayor parte del código de una aplicación moderna no lo escribimos nosotros: viene de librerías y de la imagen base del contenedor. El análisis de composición de software (SCA) revisa esas piezas contra bases de datos de vulnerabilidades públicas. Elegí Grype porque está en la lista de herramientas de escaneo de vulnerabilidades de OWASP, es gratuito y de código abierto, escanea tanto carpetas como imágenes Docker, y exporta resultados en SARIF para GitHub. Este trabajo complementa el de mi compañero Victor Carretero, que analiza el código fuente con DevSkim en el mismo pipeline. La aplicación y el repositorio público La aplicación es Banco API, una Minimal API en .NET 8 empaquetada en Docker. A propósito usa Newtonsoft.Json 12.0.1, una versión afectada por CVE-2024-21907 (denegación de servicio con JSON profundamente anidado), para que Grype tenga qué detectar. Repositorio público del equipo: github.com/viccarretero/banco-api-vulnerabilidades La dependencia vulnerable en BancoApi.csproj: El Dockerfile compila en dos etapas, así la imagen final solo lleva el runtime de ASP.NET y la app publicada: FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build WORKDIR /src COPY src/BancoApi/ ./ RUN dotnet publish -c Release -o /app FROM mcr.microsoft.com/dotnet/aspnet:8.0 WORKDIR /app COPY --from=build /app . ENTRYPOINT ["dotnet", "BancoApi.dll"] Grype escanea esa imagen completa: los paquetes del sistema operativo de la imagen base y las librerías .NET que aparecen en el archivo BancoApi.deps.json. Automatización con GitHub Actions En cada push o pull request a main, el workflow .github/workflows/seguridad.yml construye la imagen y la escanea con Grype, sin pasos manuales: build: compila la API con .NET 8. grype: construye la imagen Docker, la escanea con la acción oficial anchore/scan-action y sube el SARIF a GitHub Code Scanning. publicar: junta el reporte de Grype con el de DevSkim y los despliega en GitHub Pages. El job de Grype: - name: Construir imagen Docker run: docker build -t banco-api:${{ github.sha }} . - name: Ejecutar Grype id: scan uses: anchore/scan-action@v6 with: image: banco-api:${{ github.sha }} fail-build: false output-format: sarif - name: Publicar hallazgos en GitHub Code Scanning uses: github/codeql-action/upload-sarif@v3 with: sarif_file: ${{ steps.scan.outputs.sarif }} category: grype Con fail-build: false el pipeline reporta sin bloquear el despliegue; en un proyecto real se cambia a true con severity-cutoff: high para frenar los cambios que introduzcan vulnerabilidades graves. En local basta con: docker build -t banco-api . grype banco-api Resultados y publicación en la nube Los hallazgos de Grype quedan en la pestaña Security → Code scanning del repositorio y en un reporte HTML público en GitHub Pages. Reporte publicado: viccarretero.github.io/banco-api-vulnerabilidades/grype En la primera ejecución, Grype encontró 226 vulnerabilidades en la imagen: 52 de severidad alta o crítica, 80 media y 94 baja. Casi todas vienen de la imagen base, no del código del equipo. Origen Ejemplo Severidad Riesgo Paquete NuGet (BancoApi.deps.json) Newtonsoft.Json 12.0.1 — GHSA-5crp-9r3c-p9vr / CVE-2024-21907 Alta Un JSON muy anidado puede tumbar el servicio Imagen base Debian (aspnet:8.0) libtasn1-6 — CVE-2025-13151 Alta Falla en una librería del sistema que la app no controla Imagen base Debian (aspnet:8.0) libgnutls30 — CVE-2011-3389 Baja CVE antiguo sin corrección disponible en la distribución Cada hallazgo indica el paquete, la versión instalada, la versión que lo corrige y el enlace al CVE. Cómo corregir las vulnerabilidades La corrección en SCA casi siempre es actualizar: subir la librería a la versión parcheada y reconstruir la imagen. # Imagen base más pequeña = menos paquetes y menos CVE FROM mcr.microsoft.com/dotnet/aspnet:8.0-alpine Tras el push, el pipeline vuelve a construir y escanear, y el reporte en Pages muestra menos hallazgos. Si un CVE no aplica al proyecto, se puede ignorar de forma documentada en un archivo .grype.yaml. Conclusiones Grype cubre lo que el análisis de código no ve: las vulnerabilidades heredadas de librerías y de la imagen base. Junto con DevSkim (SAST), el equipo revisa en cada cambio tanto el código propio como el de terceros, y publica los resultados sin intervención manual. Enlaces Repositorio: github.com/viccarretero/banco-api-vulnerabilidades Reportes en GitHub Pages: viccarretero.github.io/banco-api-vulnerabilidades Ejecución del pipeline: GitHub Actions Video: (pendiente) Artículo complementario sobre DevSkim (Victor Carretero): Escaneo de vulnerabilidades en .NET con DevSkim y GitHub Actions Grype en GitHub Herramientas de escaneo de vulnerabilidades — OWASP Gerald Deybi Zevallos Pinto — Calidad y Pruebas de Software, Universidad Privada de Tacna.

This is a summary aggregated from Dev.to. Read the complete article on the original site:

Read full article at Dev.to

More Cybersecurity News