Trivy est le scanner de sécurité open source développé par Aqua Security. Il est capable de détecter les vulnérabilités CVE dans les images de conteneurs, les dépendances d'applications, les fichiers de configuration (Terraform, Kubernetes, Dockerfile), les secrets exposés dans le code, et de générer des SBOM (Software Bill of Materials). Sa simplicité d'utilisation - une commande suffit pour scanner une image - et sa couverture très large en ont fait le standard de facto dans les pipelines CI/CD et Kubernetes.
Incident supply chain - mars 2026 : Le 19 mars 2026, le binaire Trivy v0.69.4, la GitHub Action
trivy-actionetsetup-trivyont été compromis via un token PAT volé. La version malveillante contenait un credential stealer se propageant aux pipelines CI/CD. L'attaque a été contenue le jour même. Versions saines confirmées : Trivy v0.69.3, trivy-action v0.35.0, setup-trivy v0.2.6. Les versions ultérieures publiées après le 20 mars 2026 sont saines (remédiation complète par Aqua Security, releases désormais immutables). Voir l'advisory officiel.
Informations essentielles
Origine : Aqua Security · Licence : Apache 2.0 · Architectures : x86_64, ARM64
Liens : Site officiel · Documentation · GitHub · Releases
Support : Projet actif, releases régulières. Aqua Security maintient activement les bases de données de vulnérabilités. Incident supply chain mars 2026 - voir note ci-dessus.
Stack par défaut
| Composant | Valeur |
|---|---|
| Cibles de scan | Images OCI, systèmes de fichiers, repos Git, manifests IaC, clusters K8s |
| Sources CVE | NVD, OSV, GitHub Advisory, distro advisories (Alpine, Ubuntu, RHEL…) |
| Formats de sortie | Table (terminal), JSON, SARIF, CycloneDX (SBOM), SPDX |
| Base de données | Mise à jour automatique (~12h de TTL) |
| Opérateur K8s | Trivy Operator pour scan continu des workloads |
Cibles de scan
| Type | Commande | Description |
|---|---|---|
| Image OCI | trivy image nginx:latest | CVE dans l'image + packages OS + dépendances app |
| Filesystem | trivy fs /path/to/app | Dépendances, secrets, misconfigurations |
| Repo Git | trivy repo https://github.com/... | Scan d'un repo sans le cloner |
| IaC | trivy config ./terraform/ | Misconfigurations Terraform, K8s, Dockerfile |
| Cluster K8s | trivy k8s --report summary cluster | Vulnérabilités + misconfigurations du cluster |
| SBOM | trivy sbom image.spdx.json | Scanner un SBOM existant |
Prérequis
| Ressource | Valeur |
|---|---|
| OS | Linux, macOS, Windows |
| Accès réseau | Pour télécharger la DB de vulnérabilités (~200 Mo) |
| Docker (optionnel) | Pour scanner des images locales |
Installation
CLI Trivy
# Linux - via script officiel
curl -sfL https://raw.githubusercontent.com/aquasecurity/trivy/main/contrib/install.sh | sh -s -- -b /usr/local/bin
# Ou via package manager
# Debian/Ubuntu
sudo apt-get install -y wget gnupg
wget -qO - https://aquasecurity.github.io/trivy-repo/deb/public.key | \
gpg --dearmor | sudo tee /usr/share/keyrings/trivy.gpg > /dev/null
echo "deb [signed-by=/usr/share/keyrings/trivy.gpg] https://aquasecurity.github.io/trivy-repo/deb generic main" | \
sudo tee /etc/apt/sources.list.d/trivy.list
sudo apt-get update && sudo apt-get install -y trivy
# macOS
brew install aquasecurity/trivy/trivy
# Vérifier
trivy version
Trivy Operator (scan continu en cluster)
helm repo add aqua https://aquasecurity.github.io/helm-charts/
helm repo update
helm install trivy-operator aqua/trivy-operator \
--namespace trivy-system --create-namespace \
--set trivy.ignoreUnfixed=true
kubectl rollout status deploy/trivy-operator -n trivy-system
Vérification de l'installation
# 1. Version et DB
trivy version
# Database: v2, UpdatedAt: <date récente>
# 2. Mise à jour de la base de données
trivy image --download-db-only
# DB téléchargée dans ~/.cache/trivy/db/
# 3. Scan d'une image légère en test
trivy image --severity HIGH,CRITICAL alpine:latest
# Doit lister les CVE HIGH/CRITICAL trouvées (ou "0 vulnerabilities")
# 4. Vérifier le Trivy Operator (si installé)
kubectl get pods -n trivy-system
# trivy-operator-* doit être Running (1/1)
kubectl get vulnerabilityreports -A | head -5
# Des rapports doivent apparaître après quelques minutes
# 5. Scan rapide d'un manifest K8s
trivy config deployment.yaml
# PASS ou liste des misconfigurations détectées
Pièges courants à l'installation
| Symptôme | Cause | Correction |
|---|---|---|
DB update failed | Pas d'accès à GitHub (ghcr.io) | Utiliser un miroir ou --skip-update avec DB locale |
| Scan très lent (première fois) | Téléchargement de la DB (~200 Mo) | Normal - la DB est mise en cache ensuite |
| Nombreux faux positifs | Vulnérabilités sans fix disponible | Ajouter --ignore-unfixed pour ne voir que les fixables |
UNKNOWN severity sur des CVE | CVE sans CVSS score dans la source | Filtrer avec --severity HIGH,CRITICAL |
Utilisation
Scanner une image
# Scan basique
trivy image nginx:1.25
# Seulement HIGH et CRITICAL, sans les non-corrigées
trivy image --severity HIGH,CRITICAL --ignore-unfixed nginx:1.25
# Sortie JSON pour intégration CI/CD
trivy image -f json -o report.json nginx:1.25
# Sortie SARIF pour GitHub Code Scanning
trivy image -f sarif -o trivy.sarif nginx:1.25
Scanner les misconfigurations IaC
# Terraform
trivy config ./terraform/
# Manifests Kubernetes
trivy config ./k8s/
# Dockerfile
trivy config ./Dockerfile
# Avec seuil de sévérité
trivy config --severity HIGH,CRITICAL ./
Scanner les secrets
# Détecter les secrets dans le code (clés API, tokens, mots de passe)
trivy fs --scanners secret ./
# Dans une image
trivy image --scanners secret my-app:latest
Générer un SBOM
# SBOM au format CycloneDX
trivy image --format cyclonedx --output sbom.json nginx:1.25
# SBOM au format SPDX
trivy image --format spdx-json --output sbom.spdx.json nginx:1.25
Scanner un cluster Kubernetes
# Rapport résumé du cluster complet
trivy k8s --report summary cluster
# Rapport détaillé par namespace
trivy k8s --report all --namespace production cluster
# Scanner un seul workload
trivy k8s deployment/my-app -n production
Intégration CI/CD
GitHub Actions
- name: Scan image avec Trivy
uses: aquasecurity/trivy-action@master
with:
image-ref: ${{ env.IMAGE }}
format: sarif
output: trivy-results.sarif
severity: HIGH,CRITICAL
ignore-unfixed: true
- name: Upload résultats à GitHub Security
uses: github/codeql-action/upload-sarif@v3
with:
sarif_file: trivy-results.sarif
Bloquer le pipeline si vulnérabilités critiques
trivy image \
--exit-code 1 \
--severity CRITICAL \
--ignore-unfixed \
my-app:$CI_COMMIT_SHA
# exit-code 1 = retour d'erreur si des vulnérabilités CRITICAL sont trouvées
Mise à jour
# Mettre à jour la CLI
curl -sfL https://raw.githubusercontent.com/aquasecurity/trivy/main/contrib/install.sh | sh -s -- -b /usr/local/bin
# Mettre à jour la base de données de vulnérabilités
trivy image --download-db-only
# Mettre à jour le Trivy Operator
helm upgrade trivy-operator aqua/trivy-operator \
--namespace trivy-system \
--reuse-values
Troubleshooting
# Voir la version de la DB utilisée
trivy version
# Forcer la mise à jour de la DB
trivy image --download-db-only --reset
# Mode verbose pour déboguer
trivy image --debug nginx:latest 2>&1 | head -50
# Vérifier les logs du Trivy Operator
kubectl logs -n trivy-system -l app.kubernetes.io/name=trivy-operator --tail=100
Trop de vulnérabilités (bruit)
# N'afficher que les CVE avec un fix disponible
trivy image --ignore-unfixed nginx:latest
# Ignorer des CVE spécifiques (fichier .trivyignore)
cat > .trivyignore <<EOF
# Ignorer cette CVE - non exploitable dans notre contexte
CVE-2023-12345
EOF
trivy image nginx:latest
Commandes utiles
trivy image <image> # Scanner une image
trivy image --severity HIGH,CRITICAL <image> # Filtrer par sévérité
trivy image --ignore-unfixed <image> # Seulement les CVE fixables
trivy fs . # Scanner le répertoire courant
trivy config . # Scanner les fichiers IaC
trivy k8s cluster --report summary # Scanner un cluster K8s
trivy image --format cyclonedx -o sbom.json <i> # Générer un SBOM
trivy image --download-db-only # Mettre à jour la DB seule
Ressources
- Documentation officielle : https://aquasecurity.github.io/trivy/latest/
- Trivy Operator (K8s) : https://aquasecurity.github.io/trivy-operator/latest/
- GitHub : https://github.com/aquasecurity/trivy
- GitHub Actions : https://github.com/aquasecurity/trivy-action
- Releases : https://github.com/aquasecurity/trivy/releases