
Ejercicio para candidato backend junior: Empaquetar el CLI dasel (v3.3.1) con Melange, corregir CVE-2026-33320 y construir una imagen de contenedor mínima usando Apko.
Paquete dasel v3.3.1 con Melange, construir una imagen de contenedor con apko y corregir CVE-2026-33320.
Requisitos previos: Docker. Todos los pasos de compilación se ejecutan dentro de contenedores — no se necesita instalación local de melange/apko. Ejecuta todos los comandos desde la raíz del repositorio en linux/amd64 (o Docker Desktop con emulación linux/amd64).
Paso 0 — Generar clave de firma (única vez)
docker run --rm -v "/${PWD}":/work cgr.dev/chainguard/melange keygen
Paso 1 — Construir el paquete
docker run --privileged --rm -v "/${PWD}":/work cgr.dev/chainguard/melange build melange/dasel.yaml --arch amd64 --signing-key melange.rsa
Salida: packages/x86_64/dasel-3.3.1-r1.apk
Paso 2 — Probar el paquete
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
Paso 3 — Construir la imagen
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
Salida: dasel-image.tar. El repositorio @local ./packages en apko/dasel.yaml hace que apko instale el APK que construiste en el Paso 1. -k permite que apko confíe en la clave de firma de Melange. apko agrega la arquitectura a la etiqueta, por lo que la imagen cargada es dasel-image:latest-amd64.
Paso 4 — Cargar la imagen
docker load --input dasel-image.tar
Paso 5 — Ejecutar pruebas de la imagen
bash tests/test.sh
Diez pruebas: binario presente y ejecutable, consulta de clave plana JSON, la arquitectura es amd64, el límite de presupuesto de CVE rechaza una bomba de alias YAML, lectura normal de YAML (ruta verde), ruta JSON anidada, acceso por índice de arreglo, formato TOML, el límite de profundidad de CVE rechaza una cadena de alias de 33 niveles, JSON mal formado rechazado.
melange/CVE-2026-33320.patch agrega dos protecciones a parsing/yaml/yaml_reader.go:
maxExpansionDepth = 32 — rechaza cadenas de alias de más de 32 nivelesmaxExpansionBudget = 100 — rechaza documentos con más de 100 resoluciones totales de aliasAmbos devuelven un código de salida distinto de cero con un mensaje que contiene yaml expansion. La prueba 4 en tests/test.sh lo verifica.
Comandos ejecutados: melange keygen → melange build → melange test → apko build → docker load → tests/test.sh
Todos los pasos se ejecutaron correctamente en linux/amd64.
Qué mejoraría con más tiempo:
test.sh