From e95781c8d4c385dc562f5f06d6429d1529097691 Mon Sep 17 00:00:00 2001 From: Philippe Vienne Date: Sat, 12 Sep 2026 13:06:02 +0200 Subject: [PATCH 1/2] =?UTF-8?q?fix(images):=20applique=20les=20correctifs?= =?UTF-8?q?=20de=20s=C3=A9curit=C3=A9=20Debian=20au=20build?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Le job Trivy de la CI échouait sur libpcre2-8-0 (CVE-2026-86145, CVE-2026-89161, dépendance transitive d'opensc/grep) : apt-get update seul n'entraîne pas la mise à niveau des paquets déjà présents dans l'image de base, et le cache GHA de cette couche la rejoue telle quelle d'un build à l'autre. Ajoute apt-get upgrade -y avant l'installation, dans les 3 Dockerfiles (ca-server, tsa, ocsp-responder). --- deploy/ca-server/Dockerfile | 1 + deploy/ocsp-responder/Dockerfile | 1 + deploy/tsa/Dockerfile | 1 + 3 files changed, 3 insertions(+) diff --git a/deploy/ca-server/Dockerfile b/deploy/ca-server/Dockerfile index 392fa0e..73d0e64 100644 --- a/deploy/ca-server/Dockerfile +++ b/deploy/ca-server/Dockerfile @@ -19,6 +19,7 @@ RUN cargo build --release --bin ca-server \ FROM debian:bookworm-slim RUN apt-get update \ + && apt-get upgrade -y \ && apt-get install -y --no-install-recommends softhsm2 opensc ca-certificates \ && rm -rf /var/lib/apt/lists/* \ && useradd --system --uid 10003 --create-home --home-dir /var/lib/open-eidas --groups softhsm ca \ diff --git a/deploy/ocsp-responder/Dockerfile b/deploy/ocsp-responder/Dockerfile index 6c6e9d7..5137795 100644 --- a/deploy/ocsp-responder/Dockerfile +++ b/deploy/ocsp-responder/Dockerfile @@ -18,6 +18,7 @@ RUN cargo build --release --bin ocsp-responder \ FROM debian:bookworm-slim RUN apt-get update \ + && apt-get upgrade -y \ && apt-get install -y --no-install-recommends softhsm2 opensc ca-certificates \ && rm -rf /var/lib/apt/lists/* \ && useradd --system --uid 10002 --create-home --home-dir /var/lib/open-eidas --groups softhsm ocsp \ diff --git a/deploy/tsa/Dockerfile b/deploy/tsa/Dockerfile index 8114f12..30eccfe 100644 --- a/deploy/tsa/Dockerfile +++ b/deploy/tsa/Dockerfile @@ -18,6 +18,7 @@ RUN cargo build --release --bin tsa-server \ FROM debian:bookworm-slim RUN apt-get update \ + && apt-get upgrade -y \ && apt-get install -y --no-install-recommends softhsm2 opensc ca-certificates \ && rm -rf /var/lib/apt/lists/* \ && useradd --system --uid 10001 --create-home --home-dir /var/lib/open-eidas --groups softhsm tsa \ From fd40e43199cb00857c585e25b2b89695fdec5113 Mon Sep 17 00:00:00 2001 From: Philippe Vienne Date: Sat, 12 Sep 2026 13:16:46 +0200 Subject: [PATCH 2/2] fix(images): invalide le cache apt-get une fois par jour (CACHEBUST) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Suite à la revue Copilot sur #2 : cache-from/cache-to: type=gha rejouait sinon indéfiniment la couche apt-get update/upgrade, gelant les paquets Debian installés à leur version du premier build en cache — la cause racine derrière libpcre2-8-0 resté vulnérable malgré apt-get update. Ajoute un ARG CACHEBUST (date du jour, calculée par la CI) dans les 3 Dockerfiles, propagé sur tous les builds de ces images (build, publish, helm-kind-smoke-test). --- .github/workflows/ci.yml | 31 +++++++++++++++++++++++++++++++ deploy/ca-server/Dockerfile | 9 ++++++++- deploy/ocsp-responder/Dockerfile | 8 +++++++- deploy/tsa/Dockerfile | 8 +++++++- 4 files changed, 53 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 144c437..67e9b26 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -94,6 +94,16 @@ jobs: - uses: docker/setup-buildx-action@v3 + # cache-from/cache-to: type=gha rejoue sinon indéfiniment la couche + # apt-get de chaque Dockerfile, gelant les paquets Debian installés à + # leur version du premier build mis en cache — c'est ce qui a laissé + # passer un correctif de sécurité (libpcre2-8-0) malgré apt-get + # update. CACHEBUST change une fois par jour pour forcer sa + # réexécution au moins quotidiennement. + - name: Calcule le cache-bust journalier + id: cachebust + run: echo "value=$(date -u +%Y-%m-%d)" >> "$GITHUB_OUTPUT" + - name: Construit l'image de la CA (sans publication) uses: docker/build-push-action@v6 with: @@ -106,6 +116,7 @@ jobs: cache-to: type=gha,mode=max build-args: | VERSION=${{ github.sha }} + CACHEBUST=${{ steps.cachebust.outputs.value }} - name: Vérifie que le binaire de la CA démarre # SoftHSM exige un PIN de 4 à 255 caractères, comme pour la TSA et le @@ -134,6 +145,7 @@ jobs: cache-to: type=gha,mode=max build-args: | VERSION=${{ github.sha }} + CACHEBUST=${{ steps.cachebust.outputs.value }} - name: Vérifie que le binaire TSA démarre # SoftHSM exige un PIN de 4 à 255 caractères. @@ -160,6 +172,7 @@ jobs: cache-to: type=gha,mode=max build-args: | VERSION=${{ github.sha }} + CACHEBUST=${{ steps.cachebust.outputs.value }} - name: Vérifie que le binaire du répondeur OCSP démarre run: docker run --rm -e OPENEIDAS_PIN=1234 openeidas-ocsp-responder:ci version @@ -209,6 +222,13 @@ jobs: username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} + # Voir le commentaire équivalent du job build : sans cache-bust, le + # cache GHA gèlerait les paquets Debian installés à leur version du + # premier build en cache. + - name: Calcule le cache-bust journalier + id: cachebust + run: echo "value=$(date -u +%Y-%m-%d)" >> "$GITHUB_OUTPUT" + - name: Construit et publie l'image uses: docker/build-push-action@v6 with: @@ -222,6 +242,7 @@ jobs: cache-to: type=gha,mode=max build-args: | VERSION=${{ github.sha }} + CACHEBUST=${{ steps.cachebust.outputs.value }} helm-lint: name: Lint du chart Helm @@ -243,6 +264,10 @@ jobs: - uses: docker/setup-buildx-action@v3 + - name: Calcule le cache-bust journalier + id: cachebust + run: echo "value=$(date -u +%Y-%m-%d)" >> "$GITHUB_OUTPUT" + - name: Construit l'image de la CA uses: docker/build-push-action@v6 with: @@ -253,6 +278,8 @@ jobs: tags: openeidas-ca:ci cache-from: type=gha cache-to: type=gha,mode=max + build-args: | + CACHEBUST=${{ steps.cachebust.outputs.value }} - name: Construit l'image TSA uses: docker/build-push-action@v6 @@ -264,6 +291,8 @@ jobs: tags: openeidas-tsa:ci cache-from: type=gha cache-to: type=gha,mode=max + build-args: | + CACHEBUST=${{ steps.cachebust.outputs.value }} - name: Construit l'image du répondeur OCSP uses: docker/build-push-action@v6 @@ -275,6 +304,8 @@ jobs: tags: openeidas-ocsp-responder:ci cache-from: type=gha cache-to: type=gha,mode=max + build-args: | + CACHEBUST=${{ steps.cachebust.outputs.value }} - name: Crée un cluster kind uses: helm/kind-action@v1 diff --git a/deploy/ca-server/Dockerfile b/deploy/ca-server/Dockerfile index 73d0e64..540fe07 100644 --- a/deploy/ca-server/Dockerfile +++ b/deploy/ca-server/Dockerfile @@ -18,7 +18,14 @@ RUN cargo build --release --bin ca-server \ FROM debian:bookworm-slim -RUN apt-get update \ +# Invalide volontairement le cache Docker de cette couche une fois par jour +# (CACHEBUST passé par la CI, voir .github/workflows/ci.yml) : sans ça, +# `cache-from: type=gha` rejoue indéfiniment le même `apt-get upgrade`, +# gelant les paquets installés à leur version du premier build en cache — +# exactement ce qui a laissé passer libpcre2-8-0 non corrigé. +ARG CACHEBUST=unset +RUN echo "cachebust=${CACHEBUST}" \ + && apt-get update \ && apt-get upgrade -y \ && apt-get install -y --no-install-recommends softhsm2 opensc ca-certificates \ && rm -rf /var/lib/apt/lists/* \ diff --git a/deploy/ocsp-responder/Dockerfile b/deploy/ocsp-responder/Dockerfile index 5137795..45243fe 100644 --- a/deploy/ocsp-responder/Dockerfile +++ b/deploy/ocsp-responder/Dockerfile @@ -17,7 +17,13 @@ RUN cargo build --release --bin ocsp-responder \ FROM debian:bookworm-slim -RUN apt-get update \ +# Invalide volontairement le cache Docker de cette couche une fois par jour +# (CACHEBUST passé par la CI, voir .github/workflows/ci.yml) : sans ça, +# `cache-from: type=gha` rejoue indéfiniment le même `apt-get upgrade`, +# gelant les paquets installés à leur version du premier build en cache. +ARG CACHEBUST=unset +RUN echo "cachebust=${CACHEBUST}" \ + && apt-get update \ && apt-get upgrade -y \ && apt-get install -y --no-install-recommends softhsm2 opensc ca-certificates \ && rm -rf /var/lib/apt/lists/* \ diff --git a/deploy/tsa/Dockerfile b/deploy/tsa/Dockerfile index 30eccfe..3043873 100644 --- a/deploy/tsa/Dockerfile +++ b/deploy/tsa/Dockerfile @@ -17,7 +17,13 @@ RUN cargo build --release --bin tsa-server \ FROM debian:bookworm-slim -RUN apt-get update \ +# Invalide volontairement le cache Docker de cette couche une fois par jour +# (CACHEBUST passé par la CI, voir .github/workflows/ci.yml) : sans ça, +# `cache-from: type=gha` rejoue indéfiniment le même `apt-get upgrade`, +# gelant les paquets installés à leur version du premier build en cache. +ARG CACHEBUST=unset +RUN echo "cachebust=${CACHEBUST}" \ + && apt-get update \ && apt-get upgrade -y \ && apt-get install -y --no-install-recommends softhsm2 opensc ca-certificates \ && rm -rf /var/lib/apt/lists/* \