
Paquete e imagen reforzados de dasel v3.3.1 construidos mediante Melange y apko. Parcheando CVE-2026-33320.
Este es un paquete melange y una imagen de contenedor apko para dasel v3.3.1 con un parche en tiempo de compilación para CVE-2026-33320 (expansión ilimitada de alias YAML). La imagen se construye enteramente a partir de un APK producido localmente; no se utiliza ninguna imagen upstream preconstruida.
| Herramienta | Versión probada | Propósito |
|---|---|---|
| Docker | 29.3.1 | Runtime de contenedores; ejecuta melange/apko mediante compose.yaml |
| melange | 0.50.5 (imagen Docker cgr.dev/chainguard/melange@sha256:b6f11bb45a6090c182986028fd2249fb1a18dcb6e173c4ce001dd3fb4cb1dd71) | Constructor de paquetes APK |
| apko | 1.2.10 (imagen Docker cgr.dev/chainguard/apko@sha256:20dfc1f5e3461b5eaf3279f762cd4bf86c7f3635d2a9642f905cf583525f9ee6) | Constructor de imágenes OCI |
Todos los comandos de compilación y carga funcionan desde cualquier terminal (PowerShell, CMD o bash). Un paso todavía requiere un shell Unix:
bash tests/test.sh — el script de pruebas usa bash y coreutils (timeout, grep, sed)Instale Git Bash (se incluye con Git for Windows) antes de ejecutar las pruebas de la imagen.
.
├── .github/
├── melange/
│ ├── dasel.yaml
│ └── CVE-2026-33320.patch
├── apko/
│ └── dasel.yaml
├── tests/
│ └── test.sh
├── Makefile
├── compose.yaml
├── keys/ # Generated, gitignored
│ ├── melange.rsa
│ └── melange.rsa.pub
├── sbom/ # Generated, gitignored
│ ├── sbom-x86_64.spdx.json
│ └── sbom-index.spdx.json
├── packages/ # Generated, gitignored
│ └── 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/
El paso 2 genera y firma automáticamente packages/x86_64/APKINDEX.tar.gz.
Después de cargar la imagen, ejecute 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'
Estas opciones aplican la capa de tiempo de ejecución de la estrategia de defensa en profundidad descrita en Endurecimiento de la imagen: un sistema de archivos raíz inmutable, cero capacidades de Linux y ninguna vía de escalada de privilegios.
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
El script de pruebas verifica:
dasel version reporta v3.3.1-i json 'test')-i json -o yaml --root)"yaml expansion budget exceeded" en lugar de colgarseLa vulnerabilidad permite un consumo ilimitado de CPU/memoria mediante alias YAML anidados exponencialmente (ataque billion laughs). El parche en melange/CVE-2026-33320.patch añade dos salvaguardas al lector YAML de dasel: un límite de profundidad de expansión (32) que limita el anidamiento recursivo de alias, y un presupuesto de expansión (1000) que limita el total de desreferencias de alias por documento. Cuando se alcanza cualquiera de los límites, la decodificación devuelve un error de inmediato.
-trimpath para eliminar las rutas de compilación localesLa imagen aplica defensa en profundidad más allá del empaquetado mínimo:
| Capa | Medida | Efecto |
|---|---|---|
| Construcción | Usuario no root (UID 65532) | El proceso del contenedor nunca se ejecuta como root |
| Construcción | -s -w ldflags + -trimpath automático | Binario sin símbolos, sin fugas de rutas locales |
| Construcción | Solo 3 paquetes | Superficie de ataque mínima, sin shell ni gestor de paquetes |
| Tiempo de ejecución | --read-only | Sistema de archivos raíz inmutable |
| Tiempo de ejecución | --cap-drop=ALL | Cero capacidades de Linux |
| Tiempo de ejecución | --no-new-privileges | Evita la escalada de privilegios mediante setuid/setgid |
La imagen construida (dasel.tar) se escaneó con herramientas estándar de la industria para validar la postura de seguridad más allá del propio parche de CVE.
Syft extrajo 36 paquetes de la imagen inspeccionando los metadatos de módulos 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 y 25 más/usr/bin/dasel, /etc/ssl/certs/ca-certificates.crt, base de datos APK, SBOM por paquete y archivos de configuración de baselayout