
Esercizio per candidati backend junior: creazione del pacchetto della CLI dasel (v3.3.1) con Melange, correzione della CVE-2026-33320 e creazione di un'immagine container minimale con Apko.
Pacchetto dasel v3.3.1 con Melange, crea un'immagine container con apko e correggi CVE-2026-33320.
Prerequisiti: Docker. Tutti i passaggi di build vengono eseguiti all'interno di container — non è necessaria alcuna installazione locale di melange/apko. Esegui tutti i comandi dalla radice del repository su linux/amd64 (oppure Docker Desktop con emulazione linux/amd64).
Passaggio 0 — Genera la chiave di firma (una tantum)
docker run --rm -v "/${PWD}":/work cgr.dev/chainguard/melange keygen
Passaggio 1 — Compila il pacchetto
docker run --privileged --rm -v "/${PWD}":/work cgr.dev/chainguard/melange build melange/dasel.yaml --arch amd64 --signing-key melange.rsa
Output: packages/x86_64/dasel-3.3.1-r1.apk
Passaggio 2 — Testa il pacchetto
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
Passaggio 3 — Crea l'immagine
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
Output: dasel-image.tar. Il repository @local ./packages in apko/dasel.yaml fa sì che apko installi l'APK che hai compilato nel Passaggio 1. -k consente ad apko di fidarsi della chiave di firma Melange. apko aggiunge l'architettura al tag, quindi l'immagine caricata è dasel-image:latest-amd64.
Passaggio 4 — Carica l'immagine
docker load --input dasel-image.tar
Passaggio 5 — Esegui i test dell'immagine
bash tests/test.sh
Dieci test: binario presente ed eseguibile, query su chiave piatta JSON, architettura amd64, limite di budget CVE che rifiuta una YAML alias bomb, lettura del percorso normale YAML, percorso JSON annidato, accesso per indice di array, formato TOML, limite di profondità CVE che rifiuta una catena di alias a 33 livelli, JSON malformato rifiutato.
melange/CVE-2026-33320.patch aggiunge due controlli a parsing/yaml/yaml_reader.go:
maxExpansionDepth = 32 — rifiuta catene di alias più profonde di 32 livellimaxExpansionBudget = 100 — rifiuta documenti con più di 100 risoluzioni di alias totaliEntrambi restituiscono un codice di uscita diverso da zero con un messaggio contenente yaml expansion. Il test 4 in tests/test.sh verifica questo comportamento.
Comandi eseguiti: melange keygen → melange build → melange test → apko build → docker load → tests/test.sh
Tutti i passaggi sono riusciti su linux/amd64.
Cosa migliorerei con più tempo:
test.sh