
Paquet et image dasel v3.3.1 durcis construits via Melange et apko. Correction de CVE-2026-33320.
Ceci est un package melange et une image de conteneur apko pour dasel v3.3.1 avec un correctif au moment de la construction pour CVE-2026-33320 (expansion d'alias YAML sans limite). L'image est entièrement construite à partir d'un APK produit localement – aucune image amont préconstruite n'est utilisée.
| Outil | Version testée | Objectif |
|---|---|---|
| Docker | 29.3.1 | Runtime de conteneur, exécute melange/apko via compose.yaml |
| melange | 0.50.5 (image Docker cgr.dev/chainguard/melange@sha256:b6f11bb45a6090c182986028fd2249fb1a18dcb6e173c4ce001dd3fb4cb1dd71) | Constructeur de packages APK |
| apko | 1.2.10 (image Docker cgr.dev/chainguard/apko@sha256:20dfc1f5e3461b5eaf3279f762cd4bf86c7f3635d2a9642f905cf583525f9ee6) | Constructeur d'images OCI |
Toutes les commandes de construction et de chargement fonctionnent depuis n'importe quel terminal (PowerShell, CMD ou bash). Une étape nécessite encore un shell Unix :
bash tests/test.sh — le script de test utilise bash et coreutils (timeout, grep, sed)Installez Git Bash (fourni avec Git for Windows) avant d'exécuter les tests de l'image.
.
├── .github/
├── melange/
│ ├── dasel.yaml
│ └── CVE-2026-33320.patch
├── apko/
│ └── dasel.yaml
├── tests/
│ └── test.sh
├── Makefile
├── compose.yaml
├── keys/ # Généré, gitignoré
│ ├── melange.rsa
│ └── melange.rsa.pub
├── sbom/ # Généré, gitignoré
│ ├── sbom-x86_64.spdx.json
│ └── sbom-index.spdx.json
├── packages/ # Généré, gitignoré
│ └── x86_64/
│ ├── dasel-3.3.1-r0.apk
│ └── APKINDEX.tar.gz
└── README.md
make build # keygen (si nécessaire) + package + image
make test # tests du package + tests de l'image
make all # construction + test
make clean # supprime tous les artefacts générés
make help # liste toutes les cibles et variables
# 1. Générer les clés de signature (unique)
docker compose run --rm melange keygen keys/melange.rsa
# 2. Construire le package APK (télécharge la source, applique le correctif CVE, compile)
docker compose run --rm melange build melange/dasel.yaml --arch x86_64 --signing-key keys/melange.rsa
# 3. Construire l'image OCI (consomme l'APK local)
docker compose run --rm apko build apko/dasel.yaml dasel:3.3.1 dasel.tar --arch x86_64 --sbom-path sbom/
L'étape 2 génère et signe automatiquement packages/x86_64/APKINDEX.tar.gz.
Après avoir chargé l'image, exécutez dasel :
docker load --input dasel.tar
# Exemple : interroger un fichier JSON
echo '{"name": "dasel"}' | docker run --rm \
--read-only \
--cap-drop=ALL \
--security-opt=no-new-privileges \
-i dasel:3.3.1-amd64 \
-i json 'name'
Ces drapeaux imposent la couche d'exécution de la stratégie de défense en profondeur décrite dans Durcissement de l'image : un système de fichiers racine immuable, zéro capacité Linux et aucune voie d'escalade de privilèges.
make test # tous les tests (package + image)
make package-test # tests du package melange uniquement
make image-test # tests de l'image uniquement (nécessite bash)
# Tests du package
docker compose run --rm melange test melange/dasel.yaml --arch x86_64
# Tests de l'image (nécessite Git Bash sur Windows)
docker load --input dasel.tar
bash tests/test.sh
Le script de test vérifie :
dasel version rapporte v3.3.1-i json 'test')-i json -o yaml --root)"yaml expansion budget exceeded" au lieu de bloquerLa vulnérabilité permet une consommation illimitée de CPU/mémoire via des alias YAML imbriqués de manière exponentielle (attaque billion laughs). Le correctif dans melange/CVE-2026-33320.patch ajoute deux garde-fous au lecteur YAML de dasel : une limite de profondeur d'expansion (32) qui limite l'imbrication récursive des alias, et un budget d'expansion (1000) qui limite le nombre total de déréférencements d'alias par document. Lorsque l'une ou l'autre limite est atteinte, le décodage retourne immédiatement une erreur.
-trimpath pour supprimer les chemins de construction locauxL'image applique une défense en profondeur au-delà de l'empaquetage minimal :
| Couche | Mesure | Effet |
|---|---|---|
| Build | Utilisateur non-root (UID 65532) | Le processus du conteneur ne s'exécute jamais en root |
| Build | ldflags -s -w + auto -trimpath | Binaire allégé, aucune fuite de chemin local |
| Build | Seulement 3 packages | Surface d'attaque minimale, pas de shell ni gestionnaire de packages |
| Runtime | --read-only | Système de fichiers racine immuable |
| Runtime | --cap-drop=ALL | Zéro capacité Linux |
| Runtime | --no-new-privileges | Empêche l'escalade de privilèges via setuid/setgid |
L'image construite (dasel.tar) a été scannée avec des outils standard de l'industrie pour valider la posture de sécurité au-delà du correctif CVE lui-même.
Syft a extrait 36 packages de l'image en inspectant les métadonnées des modules Go du binaire :
wolfi-baselayout 20230201-r29, ca-certificates-bundle 20260413-r0, dasel 3.3.1-r0go.yaml.in/yaml/v4, github.com/hashicorp/hcl/v2, github.com/pelletier/go-toml/v2, github.com/goccy/go-json, github.com/charmbracelet/bubbletea, golang.org/x/sys, golang.org/x/text, stdlib go1.25.9, et 25 autres/usr/bin/dasel, /etc/ssl/certs/ca-certificates.crt, base de données APK, SBOM par package et fichiers de configuration baselayoutLe SBOM que j'ai généré a été inspecté avec Grype, et aucune autre vulnérabilité n'a été trouvée parmi les 32 modules Go ou les 3 packages APK.