🔒️ build-push refuse de publier une image qui porte une CVE HIGH ou CRITICAL corrigeable (raggaroth-factory/RF_CICD#7)

Entre la construction et la publication, Trivy examine l'image, exportée
en répertoire OCI : pas de démon, et rien n'est publié avant le verdict.

Seuil décidé par Benjamin le 2026-10-07 : HIGH et CRITICAL corrigeables
bloquent ; le reste est rapporté sans bloquer. Le seuil n'est pas une
entrée : un dépôt ne l'abaisse pas pour lui seul. Exceptions dans
.trivyignore.yaml, chacune avec « statement » et « expired_at » —
vérifiés par l'action, faute de quoi elle refuse le fichier.

Banc du 2026-10-07, Ubuntu 24.04 non privilégié, buildah 1.33.7, trivy
0.75.0 vérifié par empreinte, registre jetable :
  1. frontend actuel          → bloqué (libexpat, pcre2 HIGH corrigeables)
  2. + apk upgrade            → publié
  3. + exceptions futures     → publié
  4. + exceptions expirées    → bloqué
  5. exception sans date      → refusé à la validation

Constaté en route : « trivy --input » refuse une archive OCI ; il veut
l'archive Docker ou le répertoire OCI.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VyxLNGHojdXeRMQgWFgzRV
This commit is contained in:
2026-10-07 22:15:54 +02:00
co-authored by Claude Opus 5.5
parent 4f9fe0d1f0
commit e6a5fd6252
2 changed files with 83 additions and 6 deletions
+25 -1
View File
@@ -36,7 +36,31 @@ le registre de Gitea sous les tags de sa filière. **Ne déploie rien.**
Sorties : `tags` (les tags publiés) et `digest` (l'empreinte `sha256:…` de
l'image publiée).
**Exigences** : l'image du conteneur de job doit porter `buildah`. L'action
**Scan de vulnérabilités bloquant.** Entre la construction et la publication,
**Trivy** examine l'image. Une CVE **HIGH ou CRITICAL pour laquelle un
correctif existe** fait échouer le job : rien n'est publié. Les autres — dont
les CVE sans correctif, contre lesquelles personne ne peut rien — sont
rapportées dans le journal sans bloquer. Le seuil n'est pas une entrée de
l'action : un dépôt ne peut pas l'abaisser pour lui seul.
Une CVE **acceptée sciemment** va dans `.trivyignore.yaml`, à la racine du
dépôt appelant. Chaque entrée porte une justification et une date
d'expiration ; sans l'une ou l'autre, l'action refuse le fichier. À
l'échéance, Trivy cesse d'appliquer l'exception et la CVE bloque de nouveau.
```yaml
vulnerabilities:
- id: CVE-2026-93990
statement: libexpat de l'image nginx ; correctif attendu dans la prochaine base
expired_at: 2026-11-15
```
Le plus souvent, la correction est une ligne dans le Dockerfile — mettre à
jour les paquets de la base (`apk upgrade --no-cache`, `apt-get upgrade`) —
plutôt qu'une exception.
**Exigences** : l'image du conteneur de job doit porter `buildah` **et
`trivy`**. L'action
construit avec `--storage-driver vfs --isolation chroot`, ce qui fonctionne
dans un conteneur non privilégié, sans capacité ajoutée ni `/dev/fuse`. Les
`FROM` des Dockerfiles construits doivent être des **noms complets**