Supprimé dans la dernière couche : récupérer un secret dans une image Docker

Sécurité Cloud Niveau 3/4 ~4 min 28 octobre 2026

Le défi

Pinewood efface .env à la fin de son build. Une image n'oublie rien : fouille ~/image. Récupère la STRIPE_KEY de ce .env.

Ce que tu vas apprendre

  • Expliquer comment une image Docker est construite à partir de couches empilées, dans l'ordre du manifest
  • Reconnaître un fichier whiteout et ce qu'il cache
  • Localiser un fichier supprimé dans une couche précédente et le lire
  • Garder les secrets de build hors des couches d'image

Compétences testées

Forensique de conteneursRecherche de fichiers sous LinuxChasse aux secrets

Prérequis

  • Commandes shell de base (ls, cat, find)
  • Savoir ce qu'est un Dockerfile

Comment ça marche

Chaque COPY, ADD et RUN d'un Dockerfile produit une nouvelle couche en lecture seule. L'image est la pile de toutes ces couches, et un conteneur voit la vue fusionnée.

Quand une étape ultérieure supprime un fichier, Docker ne peut pas réécrire la couche précédente. Il ajoute à la place une entrée whiteout, un fichier nommé .wh.<name>, qui indique à la vue fusionnée de masquer l'original. Les octets d'origine restent livrés dans la couche précédente.

docker save exporte chaque couche sous forme de tarball : quiconque peut récupérer une image publique peut donc lire tous les fichiers que n'importe quelle étape du build a écrits.

Erreurs fréquentes

  • Utiliser un simple ls. .env est un dotfile, il n'apparaît qu'avec ls -a ou find.
  • Lire le whiteout. .wh..env est vide : c'est le marqueur de suppression, pas le fichier.
  • Prendre le premier .env trouvé. Deux couches en ont écrit un. Les ids de couches ne se trient pas dans l'ordre du build : c'est manifest.json qui le donne, et l'écriture la plus récente est celle que la production a utilisée.
  • Prendre le fichier d'exemple. .env.example contient une valeur factice sk_test_.

Comment s'en protéger

  • Exclure .env et les autres fichiers secrets du contexte de build dans .dockerignore.
  • Passer les secrets de build avec BuildKit : RUN --mount=type=secret,id=env ... monte le secret pour une seule étape et ne l'écrit jamais dans une couche.
  • Utiliser des builds multi-stage pour que seuls les artefacts finaux atteignent l'image livrée.
  • Injecter les secrets d'exécution en variables d'environnement ou depuis un gestionnaire de secrets, et faire une rotation de toute clé qui s'est trouvée dans une image poussée.

Solution complète

Les membres Pro et Max débloquent la solution complète étape par étape.

Passer Pro

Statistiques de la communauté

158 résolutions
87% taux de réussite
M2F14M3 Premier sang

Hacks du jour associés

35 000+ Hackers Vrais labs Gratuit
Commencer Gratuitement ou résolvez le hack du jour, sans compte