
Gehärtetes dasel v3.3.1 Paket und Image erstellt mit Melange und apko. Patchen von CVE-2026-33320.
Dies ist ein Melange-Paket und ein apko-Container-Image für dasel v3.3.1 mit einem Build-Zeit-Patch für CVE-2026-33320 (unbegrenzte YAML-Alias-Expansion). Das Image wird vollständig aus einem lokal erstellten APK erstellt – es wird kein vorab erstelltes Upstream-Image verwendet.
| Werkzeug | Getestete Version | Zweck |
|---|---|---|
| Docker | 29.3.1 | Container-Laufzeit, führt melange/apko via compose.yaml aus |
| melange | 0.50.5 (Docker-Image cgr.dev/chainguard/melange@sha256:b6f11bb45a6090c182986028fd2249fb1a18dcb6e173c4ce001dd3fb4cb1dd71) | APK-Paket-Builder |
| apko | 1.2.10 (Docker-Image cgr.dev/chainguard/apko@sha256:20dfc1f5e3461b5eaf3279f762cd4bf86c7f3635d2a9642f905cf583525f9ee6) | OCI-Image-Builder |
Alle Build- und Ladebefehle funktionieren von jedem Terminal (PowerShell, CMD oder bash). Ein Schritt erfordert noch eine Unix-Shell:
bash tests/test.sh – das Testskript verwendet bash und coreutils (timeout, grep, sed)Installieren Sie Git Bash (wird mit Git für Windows ausgeliefert), bevor Sie die Image-Tests ausführen.
.
├── .github/
├── melange/
│ ├── dasel.yaml
│ └── CVE-2026-33320.patch
├── apko/
│ └── dasel.yaml
├── tests/
│ └── test.sh
├── Makefile
├── compose.yaml
├── keys/ # Generiert, gitignoriert
│ ├── melange.rsa
│ └── melange.rsa.pub
├── sbom/ # Generiert, gitignoriert
│ ├── sbom-x86_64.spdx.json
│ └── sbom-index.spdx.json
├── packages/ # Generiert, gitignoriert
│ └── x86_64/
│ ├── dasel-3.3.1-r0.apk
│ └── APKINDEX.tar.gz
└── README.md
make build # keygen (falls nötig) + Paket + Image
make test # Paket-Tests + Image-Tests
make all # build + test
make clean # Entfernt alle generierten Artefakte
make help # Listet alle Ziele und Variablen
# 1. Signierschlüssel generieren (einmalig)
docker compose run --rm melange keygen keys/melange.rsa
# 2. APK-Paket bauen (holt Quelle, wendet CVE-Patch an, kompiliert)
docker compose run --rm melange build melange/dasel.yaml --arch x86_64 --signing-key keys/melange.rsa
# 3. OCI-Image bauen (verbraucht lokales APK)
docker compose run --rm apko build apko/dasel.yaml dasel:3.3.1 dasel.tar --arch x86_64 --sbom-path sbom/
Schritt 2 erzeugt und signiert automatisch packages/x86_64/APKINDEX.tar.gz.
Nach dem Laden des Images, führen Sie dasel aus:
docker load --input dasel.tar
# Beispiel: Abfrage einer JSON-Datei
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'
Diese Flags setzen die Laufzeitschicht der abwehr-in-der-Tiefe-Strategie durch, die in Image-Härtung beschrieben wird: ein unveränderliches Root-Dateisystem, null Linux-Fähigkeiten und keine Privilegieneskalationspfade.
make test # alle Tests (Paket + Image)
make package-test # nur Melange-Paket-Tests
make image-test # nur Image-Tests (erfordert bash)
# Paket-Tests
docker compose run --rm melange test melange/dasel.yaml --arch x86_64
# Image-Tests (erfordert Git Bash unter Windows)
docker load --input dasel.tar
bash tests/test.sh
Das Testskript überprüft:
dasel version meldet v3.3.1-i json 'test')-i json -o yaml --root)"yaml expansion budget exceeded" aus statt hängen zu bleibenDie Schwachstelle ermöglicht unbegrenzten CPU-/Speicherverbrauch über exponentiell verschachtelte YAML-Aliase (Billion-Laughs-Angriff). Der Patch unter melange/CVE-2026-33320.patch fügt zwei Sicherungen in das YAML-Lese-Modul von dasel ein: eine Expansionstiefenbegrenzung (32), die rekursive Alias-Verschachtelung begrenzt, und ein Expansionsbudget (1000), das die Gesamtzahl der Alias-Dereferenzierungen pro Dokument begrenzt. Wenn eine dieser Grenzen erreicht wird, gibt die Decodierung sofort einen Fehler zurück.
-trimpath gebaut, um lokale Build-Pfade zu entfernenDas Image wendet über die Minimalverpackung hinaus eine abwehr-in-der-Tiefe an:
| Schicht | Maßnahme | Wirkung |
|---|---|---|
| Build | Nicht-Root-Benutzer (UID 65532) | Container-Prozess läuft nie als Root |
| Build | -s -w ldflags + auto -trimpath | Gestripptes Binary, kein lokaler Pfadverlust |
| Build | Nur 3 Pakete | Minimale Angriffsfläche, keine Shell oder Paketmanager |
| Runtime | --read-only | Unveränderliches Root-Dateisystem |
| Runtime | --cap-drop=ALL | Null Linux-Fähigkeiten |
| Runtime | --no-new-privileges | Verhindert Privilegieneskalation via setuid/setgid |
Das erstellte Image (dasel.tar) wurde mit branchenüblichen Tools gescannt, um das Sicherheitsniveau über den CVE-Patch hinaus zu validieren.
Syft extrahierte 36 Pakete aus dem Image, indem es die Modul-Metadaten des Go-Binarys untersuchte:
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 und 25 weitere/usr/bin/dasel, /etc/ssl/certs/ca-certificates.crt, APK-DB, SBOMs pro Paket und Baselayout-KonfigurationsdateienDas erzeugte SBOM wurde mit Grype untersucht, wobei keine weiteren Schwachstellen in den 32 Go-Modulen oder den 3 APK-Paketen gefunden wurden.