
Pacchetto e immagine dasel v3.3.1 induriti, costruiti tramite Melange e apko. Patch per la CVE-2026-33320.
Questo è un pacchetto melange e una immagine container apko per dasel v3.3.1 con una patch in fase di build per CVE-2026-33320 (espansione illimitata degli alias YAML). L'immagine è costruita interamente da un APK prodotto localmente - non viene utilizzata alcuna immagine upstream precompilata.
| Tool | Versione testata | Scopo |
|---|---|---|
| Docker | 29.3.1 | Runtime container, esegue melange/apko tramite compose.yaml |
| melange | 0.50.5 (immagine Docker cgr.dev/chainguard/melange@sha256:b6f11bb45a6090c182986028fd2249fb1a18dcb6e173c4ce001dd3fb4cb1dd71) | Builder di pacchetti APK |
| apko | 1.2.10 (immagine Docker cgr.dev/chainguard/apko@sha256:20dfc1f5e3461b5eaf3279f762cd4bf86c7f3635d2a9642f905cf583525f9ee6) | Builder di immagini OCI |
Tutti i comandi di build e caricamento funzionano da qualsiasi terminale (PowerShell, CMD o bash). Un passaggio richiede ancora una shell Unix:
bash tests/test.sh — lo script di test usa bash e coreutils (timeout, grep, sed)Installa Git Bash (incluso in Git for Windows) prima di eseguire i test dell'immagine.
.
├── .github/
├── melange/
│ ├── dasel.yaml
│ └── CVE-2026-33320.patch
├── apko/
│ └── dasel.yaml
├── tests/
│ └── test.sh
├── Makefile
├── compose.yaml
├── keys/ # Generati, ignorati da git
│ ├── melange.rsa
│ └── melange.rsa.pub
├── sbom/ # Generati, ignorati da git
│ ├── sbom-x86_64.spdx.json
│ └── sbom-index.spdx.json
├── packages/ # Generati, ignorati da git
│ └── x86_64/
│ ├── dasel-3.3.1-r0.apk
│ └── APKINDEX.tar.gz
└── README.md
make build # keygen (if needed) + package + image
make test # package tests + image tests
make all # build + test
make clean # remove all generated artifacts
make help # list all targets and variables
# 1. Generate signing keys (one-time)
docker compose run --rm melange keygen keys/melange.rsa
# 2. Build the APK package (fetches source, applies CVE patch, compiles)
docker compose run --rm melange build melange/dasel.yaml --arch x86_64 --signing-key keys/melange.rsa
# 3. Build the OCI image (consumes the local APK)
docker compose run --rm apko build apko/dasel.yaml dasel:3.3.1 dasel.tar --arch x86_64 --sbom-path sbom/
Il passaggio 2 genera e firma automaticamente packages/x86_64/APKINDEX.tar.gz.
Dopo aver caricato l'immagine, esegui dasel:
docker load --input dasel.tar
# Example: query a JSON file
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'
Questi flag applicano il livello runtime della strategia di difesa in profondità descritta in Indurimento dell'immagine: un filesystem root immutabile, zero capacità Linux e nessun percorso di escalation dei privilegi.
make test # all tests (package + image)
make package-test # melange package tests only
make image-test # image tests only (requires bash)
# Package tests
docker compose run --rm melange test melange/dasel.yaml --arch x86_64
# Image tests (requires Git Bash on Windows)
docker load --input dasel.tar
bash tests/test.sh
Lo script di test verifica:
dasel version riporta v3.3.1-i json 'test')-i json -o yaml --root)"yaml expansion budget exceeded" invece di bloccarsiLa vulnerabilità consente un consumo illimitato di CPU/memoria tramite alias YAML annidati esponenzialmente (attacco billion laughs). La patch in melange/CVE-2026-33320.patch aggiunge due salvaguardie al lettore YAML di dasel: un limite di profondità di espansione (32) che limita l'annidamento ricorsivo degli alias e un budget di espansione (1000) che limita il totale dei dereferenziamenti di alias per documento. Quando viene raggiunto uno dei due limiti, la decodifica restituisce immediatamente un errore.
-trimpath per rimuovere i percorsi di build localiL'immagine applica una difesa in profondità oltre al packaging minimale:
| Livello | Misura | Effetto |
|---|---|---|
| Build | Utente non-root (UID 65532) | Il processo del container non viene mai eseguito come root |
| Build | -s -w ldflags + -trimpath automatico | Binario ripulito, nessuna fuga di percorsi locali |
| Build | Solo 3 pacchetti | Superficie d'attacco minima, nessuna shell o package manager |
| Runtime | --read-only | Filesystem root immutabile |
| Runtime | --cap-drop=ALL | Zero capacità Linux |
| Runtime | --no-new-privileges | Impedisce l'escalation dei privilegi tramite setuid/setgid |
L'immagine costruita (dasel.tar) è stata scansionata con strumenti standard di settore per validare la postura di sicurezza oltre alla patch CVE in sé.
Syft ha estratto 36 pacchetti dall'immagine ispezionando i metadati dei moduli del binario Go:
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 e altri 25/usr/bin/dasel, /etc/ssl/certs/ca-certificates.crt, database APK, SBOM per pacchetto e file di configurazione baselayoutLo SBOM che ho generato è stato esaminato con Grype e non sono state trovate altre vulnerabilità in nessuno dei 32 moduli Go o dei 3 pacchetti APK.