Aller au contenu
medium

Veille sécurité CI/CD : post-quantum, signatures et correctifs critiques (janvier 2026)

15 min de lecture

Depuis l’affaire tj-actions/changed-files et les compromissions en cascade de mars 2025, j’ai fait de la sécurité de la supply chain un fil rouge permanent sur ce site. Chaque semaine, je surveille les changelogs des outils que nous utilisons tous les jours dans nos pipelines.

Cette veille n’est pas un exercice académique : c’est une hygiène de base quand on automatise des déploiements. Un outil de build non patché, un vérificateur de signatures vulnérable, ou un chiffrement obsolète peuvent transformer votre pipeline en vecteur d’attaque.

Ce billet couvre les mises à jour importantes de janvier 2026 : chiffrement post-quantum avec age, correctif de sécurité pour cosign, patches CVE pour Buildah et BuildKit, et durcissement curl.

OutilVersionSévérité (advisory)Suis-je concerné ?Action
cosign3.0.4ModerateVérification offline avec bundles / anciens formatsUpgrader + auditer le chemin offline
curl8.18.0Mix (Low→Medium)Pipelines curl (redirections) + outils libcurl (LDAP/IMAP/SMTP/…)Mettre à jour + durcir
Buildah1.38+ImportantImages builder avec Buildah/Podman + usage SSH/agentReconstruire images
age1.3.0MigrationSecrets > 5 ans de durée de viePlanifier migration PQ
BuildKit0.27.0AméliorationPinning frontend DockerfilePinner au digest + vérifier signature

Pourquoi cette veille est devenue indispensable

Les pipelines CI/CD sont devenus le système nerveux de nos infrastructures. Ils concentrent :

  • Les secrets (credentials cloud, tokens API, clés SSH)
  • Les droits d’écriture sur les registres et les dépôts
  • Le pouvoir de déployer automatiquement en production

Un seul composant compromis dans cette chaîne peut avoir des conséquences dévastatrices. C’est pourquoi je maintiens une vigilance constante sur les outils qui touchent à la signature, au chiffrement et au build.

1. age v1.3.0 : le chiffrement entre dans l’ère post-quantum

Six ans après sa première bêta, age franchit un cap majeur : la version 1.3.0 introduit la résistance post-quantum.

Qu’est-ce que le post-quantum ?

Les ordinateurs quantiques, quand ils seront assez puissants, pourront casser les algorithmes de chiffrement asymétrique actuels (RSA, courbes elliptiques) en quelques heures. Le chiffrement post-quantum utilise des algorithmes mathématiques résistants à ces attaques.

Pourquoi c’est important maintenant ?

Même si les ordinateurs quantiques capables de casser nos chiffrements ne sont pas encore là, les attaquants peuvent capturer vos données chiffrées aujourd’hui et les déchiffrer plus tard. C’est l’attaque “harvest now, decrypt later”.

Si vous chiffrez des secrets avec une durée de vie longue (backups, archives, credentials), le post-quantum devient pertinent dès maintenant.

Ce qui change dans age 1.3.0

Fenêtre de terminal
# Nouveau format d'identité post-quantum
AGE-SECRET-KEY-PQ-1...
# Nouveau format de recipient post-quantum
age1pq1...
# Vérifier si un fichier utilise le chiffrement PQ
age-inspect fichier.age
# Affiche : post-quantum encryption, payload size, recipient types

Autres nouveautés :

  • Support natif des plugins hardware (YubiKeys via PIV)
  • Fichiers age chiffrés utilisables comme fichiers d’identité
  • Proxy de déchiffrement vers des machines distantes (agent)

Action concrète

  1. Mettre à jour age sur vos runners CI et postes d’administration

    Fenêtre de terminal
    brew upgrade age
    age --version
  2. Tester la compatibilité avec vos workflows existants

    Fenêtre de terminal
    age -d -i key.txt secrets.age
  3. Planifier la migration vers les clés post-quantum pour les secrets à longue durée de vie

Lien : age v1.3.0 release notes

2. cosign v3.0.4 : correctif de vulnérabilité dans la vérification offline

Cosign est l’outil de référence pour signer et vérifier vos images conteneurs. La version 3.0.4 corrige une vulnérabilité qui concerne principalement la vérification offline.

La vulnérabilité (bundle/offline)

Un bundle Cosign pouvait être fabriqué pour valider une signature même si l’entrée Rekor embarquée ne référençait pas le bon digest. En d’autres termes : dans certains cas, un attaquant pouvait contourner la vérification d’intégrité lorsque vous faites une validation à partir d’un bundle.

Sévérité et priorité

  • La sévérité de l’advisory est moderate.
  • Priorité opérationnelle P0 si vous dépendez de la vérification offline (air-gapped, policies K8s basées sur bundles, vérification sans accès Rekor, anciens bundles).

Suis-je concerné ?

Vous êtes potentiellement exposé si :

  • vous utilisez cosign verify avec --bundle (vérification offline),
  • vous avez des bundles générés avec des versions anciennes (anciens formats),
  • vous utilisez un trusted_root.json personnalisé.

Action concrète

  1. Upgrader cosign sur tous les runners CI

    Fenêtre de terminal
    brew upgrade cosign
    cosign version
  2. Tester la vérification de vos images signées

    Fenêtre de terminal
    cosign verify ghcr.io/mon-org/mon-app@sha256:abc123 \
    --certificate-identity-regexp="^https://github.com/mon-org/" \
    --certificate-oidc-issuer="https://token.actions.githubusercontent.com"
  3. Auditer vos workflows qui utilisent des bundles

    Fenêtre de terminal
    grep -R "cosign verify" . -n | grep bundle || true

Lien : cosign v3.0.4 release notes

3. Buildah : patches CVE sur les dépendances runtime

Buildah a publié plusieurs releases qui corrigent des vulnérabilités dans ses dépendances critiques.

Ce qui est patché

  • CVE-2025-47913 : vulnérabilité dans golang.org/x/crypto/ssh/agent — un pair peut provoquer une panic côté client dans certaines conditions. Risque principal : déni de service (interruption de jobs) selon exposition.
  • CVE-2025-47914 : vulnérabilité complémentaire côté agent.
  • Mises à jour de runc (runtime conteneur)
  • Correctifs de conformité OCI

Où Buildah peut être présent

Buildah n’est pas toujours visible directement. Il peut être embarqué dans :

  • vos images de builder sur les runners CI
  • les environnements de développement avec Podman

Action concrète

  1. Inventorier où Buildah est installé

    Fenêtre de terminal
    which buildah && buildah version
    docker run --rm mon-builder buildah version
  2. Mettre à jour vers la dernière version patchée

    Fenêtre de terminal
    dnf update buildah || true
    apt update && apt install -y buildah || true
  3. Reconstruire vos images de builder si Buildah y est embarqué

Lien : Buildah releases

4. BuildKit / Dockerfile frontend 1.21.0 : images signées

BuildKit est le moteur de build moderne de Docker. La release v0.27.0 (et le frontend Dockerfile 1.21.0) apporte des évolutions importantes pour la sécurité du build.

Ce qui change

  • Images de release signées : les images officielles BuildKit et les frontends sont désormais signées (meilleure vérification de provenance)
  • Ajustements du parsing / linting Dockerfile
  • Améliorations de la gestion des secrets pendant le build

Rappel : le build est une surface d’attaque

Votre pipeline de build est un endroit privilégié pour injecter du code malveillant. Un Dockerfile compromis, une image de base vérolée, ou un frontend altéré peuvent contaminer tous vos artefacts.

Action concrète

Si vous pinnez un frontend dans vos Dockerfiles :

1.21.0
FROM alpine:3.21
...

Revalidez votre stratégie de pinning. Recommandation : pinner au digest, pas seulement au tag, et vérifier la signature dans votre CI :

Fenêtre de terminal
crane digest docker/dockerfile:1.21.0
# sha256:abc123...
# syntax=docker/dockerfile@sha256:abc123...
cosign verify docker/dockerfile@sha256:abc123... \
--certificate-identity-regexp=".*" \
--certificate-oidc-issuer-regexp=".*"

Lien : BuildKit v0.27.0 release notes

5. curl 8.18.0 : CVE corrigées et risques supply chain

curl (et surtout libcurl) est omniprésent dans nos images de build et nos outils d’automatisation.

Point important : curl CLI vs libcurl

Toutes les vulnérabilités annoncées n’impactent pas nécessairement le binaire curl.

  • Certaines touchent libcurl dans des contextes applicatifs (LDAP/IMAP/SMTP, multi-handle, etc.).
  • D’autres concernent directement des patterns dangereux en CI (ex : redirections permissives, scripts téléchargés).

CVE-2025-14524 : la fuite silencieuse de tokens (à traiter côté CI)

Quand curl suit une redirection cross-protocol (par exemple HTTP → IMAP/LDAP/POP3/SMTP), il peut transmettre le bearer token OAuth2 au nouveau protocole.

Dans un pipeline, ça peut devenir une fuite de token si un endpoint malveillant force une redirection.

Durcir l’usage de curl en CI/CD

  1. Mettre à jour curl/libcurl sur runners et images de build

    Fenêtre de terminal
    curl --version | head -1
    apt update && apt install -y curl
    apk update && apk upgrade curl
  2. Restreindre les protocoles autorisés (requêtes ET redirections)

    Fenêtre de terminal
    curl --proto '=https' --proto-redir '=https' --tlsv1.2 -sSfL https://example.com/script.sh
  3. Vérifier les checksums avant d’exécuter des scripts téléchargés

    Fenêtre de terminal
    curl -sSL https://example.com/install.sh -o install.sh
    echo "a1b2c3d4...expected_sha256 install.sh" | sha256sum -c -
    bash install.sh
  4. Auditer les usages de curl dans vos Dockerfiles et CI

    Fenêtre de terminal
    grep -r "curl.*|.*sh" . --include="Dockerfile*" --include="*.yml"
  5. Préférer des sources signées quand elles existent

Liens : curl changes | curl security advisories

Automatiser cette veille

Surveiller manuellement les changelogs de dizaines d’outils n’est pas viable. Voici quelques approches :

  1. Dependabot / Renovate : pour les dépendances déclarées (package.json, requirements.txt)
  2. Scripts de veille : comparer les versions installées avec les releases GitHub
  3. Alertes RSS : s’abonner aux feeds de releases des projets critiques
  4. Outils de conformité : auditer vos pipelines à l’échelle

Ce qu’il faut retenir

  1. Le post-quantum arrive : age 1.3.0 marque le début d’une transition importante (secrets long-terme uniquement)
  2. La signature n’est pas infaillible : même cosign peut avoir des failles, d’où l’importance des mises à jour — priorité P0 si usage offline
  3. Le build est une surface d’attaque : Buildah, BuildKit et leurs dépendances doivent être patchés régulièrement
  4. curl/libcurl est un vecteur d’attaque : omniprésent, utilisé dans les patterns dangereux (curl | bash) — patchez et durcissez
  5. Pinnez au digest, pas au tag : pour BuildKit et les frontends Dockerfile
  6. La veille est un investissement : 30 minutes par semaine pour éviter des heures de remediation

Checklist lundi 9h

1. Inventaire versions

Lister les versions de cosign, curl/libcurl, Buildah, BuildKit sur vos runners CI

2. Upgrade cosign

Priorité opérationnelle : upgrade vers v3.0.4 et audit des chemins offline/bundles

3. Patch curl/libcurl

Mettre à jour sur runners et images builder, puis durcir les redirections/protocoles

4. Rebuild images

Reconstruire les images de build contenant Buildah/Podman (et valider les versions)

5. Audit curl | bash

grep -r "curl.*|.*sh" . --include="Dockerfile*" --include="*.yml"

6. Pin digests

Vérifier le pinning digest des frontends BuildKit et images critiques

7. Policies Kubernetes

Tester la vérification cosign dans kyverno/Policy Controller (cas offline inclus)

8. Planifier PQ

Identifier les secrets > 5 ans et définir une stratégie de migration post-quantum

Appliquer les patchs sans casser le delivery (analyse + mitigations)

Avant de patcher, classez chaque mise à jour selon l’exposition réelle, pas seulement le CVSS.

1) Analyse d’exposition (30 minutes)

  • Runners partagés vs dédiés : priorité aux partagés (multi-tenant)

  • Jobs déclenchés par PR/forks : surface d’attaque maximale (code non fiable)

  • Présence de secrets : tokens registry, cloud creds, OIDC, SSH agent

  • Usage réel du composant :

    • cosign : vérification offline/bundle ? anciens bundles ? trusted_root custom ?
    • curl/libcurl : redirections ? protocoles permissifs ? usages LDAP/IMAP/SMTP ?
    • Buildah : clone Git via SSH + agent forwardé ? images builder réutilisées ?

2) Déploiement par anneaux + rollback prêt

  • Anneau 0 (canary) : 1 runner, 1 projet non critique, 24h
  • Anneau 1 : 10–20% des runners, projets internes
  • Anneau 2 : généralisation
  • Plan N-1 : image builder précédente + variable de bascule

3) Mesures compensatoires si vous ne pouvez pas patcher immédiatement

  • Réduire l’exposition des runners :

    • désactiver exécution sur forks / PR non approuvées
    • isoler réseau (egress minimal), limiter accès registry/SCM
    • limiter privilèges (rootless, cap drop, seccomp), runners dédiés
  • Durcir les patterns à risque :

    • interdire curl | bash (ou imposer checksum/signature)
    • borner les protocoles : curl --proto '=https' --proto-redir '=https'
    • pinning au digest (images, frontends, actions)

4) Prouver la conformité (et gagner du temps à la prochaine alerte)

  • Job CI “toolchain baseline” : versions cosign/curl/libcurl/buildkit/buildah imprimées et archivées
  • Job “policy” : vérification signatures/provenance/digests (échec si non conforme)
  • Ticket de changement : version avant/après + périmètre + résultat canary