
Exercice junior pour candidat au poste de backend : Empaquetage de l'interface CLI dasel (v3.3.1) avec Melange, correction de CVE-2026-33320, et construction d'une image de conteneur minimale à l'aide d'Apko.
Package dasel v3.3.1 avec Melange, construire une image conteneur avec apko, et corriger CVE-2026-33320.
Prérequis : Docker. Toutes les étapes de construction s'exécutent dans des conteneurs — aucune installation locale de melange/apko nécessaire. Exécutez toutes les commandes depuis la racine du dépôt sur linux/amd64 (ou Docker Desktop avec émulation linux/amd64).
Étape 0 — Générer la clé de signature (unique)
docker run --rm -v "/${PWD}":/work cgr.dev/chainguard/melange keygen
Étape 1 — Construire le package
docker run --privileged --rm -v "/${PWD}":/work cgr.dev/chainguard/melange build melange/dasel.yaml --arch amd64 --signing-key melange.rsa
Sortie : packages/x86_64/dasel-3.3.1-r1.apk
Étape 2 — Tester le package
docker run --privileged --rm -v "/${PWD}":/work cgr.dev/chainguard/melange test melange/dasel.yaml --arch amd64 --repository-append //work/packages --keyring-append //work/melange.rsa.pub
Étape 3 — Construire l'image
docker run --rm -v "/${PWD}":/work cgr.dev/chainguard/apko build apko/dasel.yaml dasel-image:latest dasel-image.tar --arch amd64 -k melange.rsa.pub
Sortie : dasel-image.tar. Le dépôt @local ./packages dans apko/dasel.yaml fait en sorte qu'apko installe l'APK construit à l'étape 1. -k permet à apko de faire confiance à la clé de signature Melange. apko ajoute l'architecture au tag, donc l'image chargée est dasel-image:latest-amd64.
Étape 4 — Charger l'image
docker load --input dasel-image.tar
Étape 5 — Exécuter les tests de l'image
bash tests/test.sh
Dix tests : binaire présent et exécutable, requête de clé plate JSON, architecture amd64, limite de budget CVE rejette une bombe d'alias YAML, lecture normale du chemin vert YAML, chemin JSON imbriqué, accès par index de tableau, format TOML, limite de profondeur CVE rejette une chaîne d'alias de 33 niveaux, JSON malformé rejeté.
melange/CVE-2026-33320.patch ajoute deux garde-fous à parsing/yaml/yaml_reader.go :
maxExpansionDepth = 32 — rejette les chaînes d'alias de plus de 32 niveauxmaxExpansionBudget = 100 — rejette les documents avec plus de 100 résolutions d'alias au totalLes deux renvoient un code de sortie non nul avec un message contenant yaml expansion. Le test 4 dans tests/test.sh le vérifie.
Commandes exécutées : melange keygen → melange build → melange test → apko build → docker load → tests/test.sh
Toutes les étapes se sont déroulées avec succès sur linux/amd64.
Ce que j'améliorerais avec plus de temps :
test.sh