Grype est un scanner de vulnérabilités open source développé par Anchore, conçu pour analyser les images OCI, les systèmes de fichiers et les SBOM. Il détecte les CVE dans les packages OS (Alpine, Debian, RHEL, Ubuntu…) et les dépendances applicatives (Go, Java, Node, Python, Ruby…). Grype est le scanner natif de l'écosystème Anchore et s'intègre directement avec Syft (générateur de SBOM du même éditeur) pour une analyse complète de la supply chain.
Différence avec Trivy : Grype se concentre sur la détection de CVE dans les artefacts (images, SBOM), sans les fonctions de scan IaC ou secrets qu'offre Trivy. Il est souvent utilisé conjointement avec Syft dans les pipelines Anchore.
Informations essentielles
Origine : Anchore Inc. · Licence : Apache 2.0 · Architectures : x86_64, ARM64
Liens : Documentation · GitHub · Releases
Support : Projet actif maintenu par Anchore. Base de données de vulnérabilités mise à jour en continu.
Stack par défaut
| Composant | Valeur |
|---|---|
| Sources CVE | NVD, GitHub Advisory, distro advisories, OSV |
| Formats d'entrée | Image OCI, tarball, répertoire, SBOM Syft/SPDX/CycloneDX |
| Formats de sortie | Table, JSON, SARIF, CycloneDX, template custom |
| Intégration Syft | Input SBOM natif (grype sbom:syft.json) |
| Base de données | Cache local (~100 Mo), mise à jour automatique |
Prérequis
| Ressource | Valeur |
|---|---|
| OS | Linux, macOS, Windows |
| Accès réseau | Pour télécharger la DB de vulnérabilités |
| Docker (optionnel) | Pour scanner des images locales |
Installation
# Via script officiel (Linux/macOS)
curl -sSfL https://raw.githubusercontent.com/anchore/grype/main/install.sh | sh -s -- -b /usr/local/bin
# Homebrew (macOS)
brew install anchore/grype/grype
# Vérifier
grype version
Vérification de l'installation
# 1. Version et état de la DB
grype version
# Application Version: x.y.z
# DB Schema: X DB Built: <date>
# 2. Mise à jour de la base de données
grype db update
# Updated vulnerability database (schema 6)
# 3. Premier scan de test
grype alpine:latest
# Doit lister les CVE ou afficher "No vulnerabilities found"
# 4. Test avec sévérité filtrée
grype --fail-on critical alpine:latest
# exit 0 si aucune CVE CRITICAL, exit 1 sinon
# 5. Test du SBOM en entrée (avec Syft)
syft alpine:latest -o syft-json > sbom.json
grype sbom:./sbom.json
# Mêmes résultats qu'un scan direct de l'image
Pièges courants à l'installation
| Symptôme | Cause | Correction |
|---|---|---|
DB update failed | Accès à anchore.io bloqué | Utiliser GRYPE_DB_UPDATE_URL pour un miroir |
no SBOM providers matched | Entrée non reconnue | Vérifier la syntaxe (image:, sbom:, dir:) |
| Résultats différents de Trivy | Sources CVE et DB différentes | Normal - les deux outils ont des bases différentes |
| Scan lent la première fois | Téléchargement de la DB (~100 Mo) | Normal - mise en cache ensuite |
Utilisation
Scanner une image
# Scan d'une image (pull automatique)
grype nginx:latest
# Seulement HIGH et CRITICAL
grype --severity-cutoff high nginx:latest
# Bloquer le pipeline en cas de CRITICAL
grype --fail-on critical nginx:latest
# Sortie JSON
grype -o json nginx:latest > report.json
# Sortie SARIF (pour GitHub Code Scanning)
grype -o sarif nginx:latest > grype.sarif
Scanner depuis un SBOM (Syft)
# Générer un SBOM avec Syft puis le scanner
syft my-app:latest -o syft-json > sbom.json
grype sbom:./sbom.json
# Avantage : une seule génération de SBOM, plusieurs scanners possibles
Scanner un répertoire ou tarball
# Répertoire local
grype dir:./my-app/
# Image exportée en tarball
docker save my-app:latest -o my-app.tar
grype docker-archive:./my-app.tar
Fichier d'ignorance (.grype.yaml)
# .grype.yaml - configuration du projet
ignore:
# Ignorer cette CVE spécifique dans ce package
- vulnerability: CVE-2023-12345
package:
name: libssl
version: 1.1.1k
# Ignorer toutes les CVE dans ce package
- package:
name: openssl
type: deb
output: json
fail-on-severity: high
Intégration CI/CD
GitHub Actions
- name: Scan image avec Grype
uses: anchore/scan-action@v3
with:
image: ${{ env.IMAGE }}
fail-build: true
severity-cutoff: high
output-format: sarif
- name: Upload résultats Grype
uses: github/codeql-action/upload-sarif@v3
with:
sarif_file: results.sarif
Mise à jour
# Mettre à jour la DB uniquement
grype db update
# Mettre à jour la CLI
curl -sSfL https://raw.githubusercontent.com/anchore/grype/main/install.sh | sh -s -- -b /usr/local/bin
# Vérifier l'état de la DB
grype db status
Troubleshooting
# Voir la version et état de la DB
grype version
grype db status
# Forcer la mise à jour de la DB
grype db update
# Mode verbose
grype -vv nginx:latest 2>&1 | head -50
# Lister les CVE dans une package précis
grype nginx:latest | grep -i openssl
Commandes utiles
grype <image> # Scanner une image
grype sbom:<fichier.json> # Scanner depuis un SBOM
grype dir:<chemin> # Scanner un répertoire
grype --fail-on critical <image> # Pipeline gate
grype -o json <image> # Sortie JSON
grype -o sarif <image> # Sortie SARIF
grype db update # Mettre à jour la DB CVE
grype db status # État de la DB locale
Ressources
- GitHub : https://github.com/anchore/grype
- Documentation Anchore : https://docs.anchore.com/
- Releases : https://github.com/anchore/grype/releases
- GitHub Actions : https://github.com/anchore/scan-action
- Syft (SBOM complémentaire) : https://github.com/anchore/syft