notes/scan-du-depot-pas-de-l-image
Le scan du dépôt ne voit pas les paquets de l'image de base
Trivy en mode dépôt lit le lockfile et le Dockerfile, jamais les paquets Alpine de l'image de base. Le contrôle local était vert, la veille rouge.
- docker
- ci
- sécurité
Le 29 octobre 2026, la veille de sécurité quotidienne de la CI passe au rouge. Elle tourne chaque jour à 5 h, heure de Paris, et elle scanne l'image qui sert le site en production. Le contrôle local, pnpm security, lancé avant le push, est vert le même jour.
Trivy, en mode dépôt, lit le lockfile et le Dockerfile. Il ne voit jamais les paquets Alpine de l'image de base, et sa doc le dit : ce mode vise les fichiers de verrouillage, à la différence du scan d'image. L'image nginx-unprivileged 1.30.6, sur Alpine 3.24, embarque curl et libcurl en 8.22.0-r0. La faille CVE-2026-92392 est classée HIGH. Elle est corrigée en 8.23.0-r0, et ce correctif est déjà publié dans les dépôts Alpine 3.24.
Le correctif tient en deux lignes dans l'étage servi du Dockerfile. Elles vont à côté des planchers déjà posés pour zlib, brotli-libs et musl : "curl>=8.23.0-r0" et "libcurl>=8.23.0-r0". Un plancher nomme un paquet, jamais de mise à jour globale. Si le correctif manque au dépôt, le build échoue. Quand la base embarque la version corrigée, la ligne tombe.
La preuve tient en une image reconstruite en local, puis scannée en mode image : 0 HIGH, 0 CRITICAL, curl-8.23.0-r0 et libcurl-8.23.0-r0 présents.
Deux cas à ne pas confondre. Le scan de release ne regarde l'image qu'au moment où elle part. Une faille publiée après ce moment ne passe que par la veille quotidienne, qui l'a attrapée le 29 octobre. Pour savoir si ton image est propre, tu la construis et tu la scannes, comme la release le fait.
Contrôle à lancer avant pnpm release :
docker build -t site:check .
docker save site:check | docker run --rm -i --entrypoint sh aquasec/trivy \
-c 'cat > /tmp/i.tar && trivy image --quiet --input /tmp/i.tar --severity HIGH,CRITICAL'
retour aux notes