
Melange और apko के माध्यम से निर्मित हार्डन्ड dasel v3.3.1 पैकेज और इमेज। CVE-2026-33320 को पैच करना।
यह dasel v3.3.1 के लिए एक melange पैकेज और apko कंटेनर इमेज है, जिसमें CVE-2026-33320 (असीमित YAML alias विस्तार) के लिए बिल्ड-समय पैच शामिल है। यह इमेज पूरी तरह से स्थानीय रूप से उत्पादित APK से बनाई गई है - कोई पूर्व-निर्मित upstream इमेज उपयोग नहीं की गई है।
| उपकरण | परीक्षित संस्करण | उद्देश्य |
|---|
| Docker | 29.3.1 | कंटेनर रनटाइम, compose.yaml के माध्यम से melange/apko चलाता है |
| melange | 0.50.5 (Docker image cgr.dev/chainguard/melange@sha256:b6f11bb45a6090c182986028fd2249fb1a18dcb6e173c4ce001dd3fb4cb1dd71) | APK पैकेज बिल्डर |
| apko | 1.2.10 (Docker image cgr.dev/chainguard/apko@sha256:20dfc1f5e3461b5eaf3279f762cd4bf86c7f3635d2a9642f905cf583525f9ee6) | OCI इमेज बिल्डर |
सभी बिल्ड और लोड कमांड किसी भी टर्मिनल (PowerShell, CMD, या bash) से काम करते हैं। एक चरण अभी भी यूनिक्स शेल की आवश्यकता रखता है:
bash tests/test.sh — परीक्षण स्क्रिप्ट bash और coreutils (timeout, grep, sed) का उपयोग करती हैइमेज परीक्षण चलाने से पहले Git Bash स्थापित करें (यह Git for Windows के साथ आता है)।
.
├── .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/
चरण 2 स्वचालित रूप से packages/x86_64/APKINDEX.tar.gz उत्पन्न और हस्ताक्षरित करता है।
इमेज लोड करने के बाद, 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'
ये फ्लैग इमेज हार्डनिंग में वर्णित रक्षा-गहराई (defense-in-depth) रणनीति की रनटाइम परत को लागू करते हैं: एक अपरिवर्तनीय रूट फाइलसिस्टम, शून्य Linux क्षमताएँ, और कोई विशेषाधिकार वृद्धि पथ नहीं।
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
परीक्षण स्क्रिप्ट निम्नलिखित की जाँच करती है:
dasel version v3.3.1 दर्शाता है-i json 'test')-i json -o yaml --root)"yaml expansion budget exceeded" ट्रिगर करता हैयह कमजोरी घातांकीय रूप से नेस्टेड YAML alias (billion laughs attack) के माध्यम से असीमित CPU/मेमोरी खपत की अनुमति देती है। melange/CVE-2026-33320.patch पर पैच dasel के YAML रीडर में दो सुरक्षा उपाय जोड़ता है: एक विस्तार गहराई सीमा (32) जो पुनरावर्ती alias नेस्टिंग को सीमित करती है, और एक विस्तार बजट (1000) जो प्रति दस्तावेज़ कुल alias डीरेफरेंस को सीमित करता है। जब भी कोई सीमा प्रभावित होती है, डिकोडिंग तुरंत एक त्रुटि लौटाती है।
-trimpath के साथ बनाई गई हैइमेज न्यूनतम पैकेजिंग के अतिरिक्त defense-in-depth लागू करती है:
| परत | उपाय | प्रभाव |
|---|---|---|
| बिल्ड | गैर-रूट उपयोगकर्ता (UID 65532) | कंटेनर प्रक्रिया कभी रूट के रूप में नहीं चलती |
| बिल्ड | -s -w ldflags + auto -trimpath | स्ट्रिप्ड बाइनरी, कोई स्थानीय पथ लीक नहीं |
| बिल्ड | केवल 3 पैकेज | न्यूनतम हमला सतह, कोई शेल या पैकेज मैनेजर नहीं |
| रनटाइम | --read-only | अपरिवर्तनीय रूट फाइलसिस्टम |
| रनटाइम | --cap-drop=ALL | शून्य Linux क्षमताएँ |
| रनटाइम | --no-new-privileges | setuid/setgid के माध्यम से विशेषाधिकार वृद्धि रोकता है |
निर्मित इमेज (dasel.tar) को CVE पैच के अतिरिक्त सुरक्षा स्थिति को सत्यापित करने के लिए उद्योग-मानक उपकरणों से स्कैन किया गया।
Syft ने Go बाइनरी के मॉड्यूल मेटाडेटा का निरीक्षण करके इमेज से 36 पैकेज निकाले:
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, और 25 अन्य शामिल हैं/usr/bin/dasel, /etc/ssl/certs/ca-certificates.crt, APK DB, प्रति-पैकेज SBOM, और baselayout कॉन्फ़िग फ़ाइलेंजो SBOM मैंने उत्पन्न किया था, उसे Grype के साथ निरीक्षित किया गया, और 32 Go मॉड्यूल या 3 APK पैकेज में से किसी में कोई अन्य भेद्यता नहीं पाई गई।
--arch फ्लैग की आवश्यकता होगीbusybox, go, ca-certificates-bundle) पर निर्भर हैं। यदि उन upstream पैकेजों में से किसी में भेद्यता खोजी जाती है, तो यह इस इमेज को भी प्रभावित करेगा। उत्पादन में Wolfi पैकेज को अद्यतित रखना या उनके सुरक्षा परामर्शों की सदस्यता लेना आवश्यक होगाcompose.yaml के माध्यम से Docker कंटेनर के रूप में चलते हैं। इसका विकास Kali 2025.3 पर किया गया था और Windows 10 पर Docker Desktop 29.3.1 के साथ सत्यापित किया गया थाtests/test.sh timeout (coreutils) और Docker CLI का उपयोग करता है। अन्य सभी कमांड शुद्ध docker हैं और PowerShell या CMD से काम करते हैं। Windows पर, परीक्षण स्क्रिप्ट को Git Bash से चलाएँ (देखें Windows आवश्यकताएँ)apko बिल्ड समय पर sbom/ फ़ोल्डर में SPDX SBOM स्वचालित रूप से उत्पन्न करता है (sbom/sbom-x86_64.spdx.json, sbom/sbom-index.spdx.json)। ये स्थापित 3 APK पैकेजों को संस्करण, CPE, स्रोत उत्पत्ति, और Melange बिल्ड परिभाषा संदर्भों के साथ ट्रैक करते हैं। हालाँकि, वे dasel बाइनरी में संकलित Go मॉड्यूल निर्भरताओं को शामिल नहीं करते हैं। मैंने उन्हें स्कैन करने का निर्णय लिया और बाइनरी के एम्बेडेड मेटाडेटा से सभी 32 Go मॉड्यूल निकालकर इस अंतर को बंद करने के लिए Syft का उपयोग किया।
उत्पादन परिवेश के लिए SBOM निष्कर्षण का कुछ स्वचालन होना चाहिए जो समय-समय पर पोल करे। फिर शायद SBOM परिणामों को https://github.com/nedlir/CVEnotifier जैसी चीज़ से संलग्न करें, जिसे मैंने आपूर्ति श्रृंखला में नई भेद्यताओं को खोजने के लिए Golang में लिखा था।
| कमांड | परिणाम |
|---|---|
docker compose run --rm melange keygen keys/melange.rsa | पास |
docker compose run --rm melange build melange/dasel.yaml --arch x86_64 --signing-key keys/melange.rsa | पास - पैच लागू (7/7 hunks), APK उत्पन्न |
docker compose run --rm melange test melange/dasel.yaml --arch x86_64 | पास - संस्करण, JSON कुंजी निष्कर्षण, JSON ऐरे एक्सेस |
docker compose run --rm apko build apko/dasel.yaml dasel:3.3.1 dasel.tar --arch x86_64 --sbom-path sbom/ | पास - 3 पैकेज स्थापित, OCI tarball उत्पन्न |
docker load --input dasel.tar | पास - dasel:3.3.1-amd64 लोड हुआ |
bash tests/test.sh | पास - सभी परीक्षण (संस्करण, कुंजी निष्कर्षण, प्रारूप रूपांतरण, YAML aliases, CVE पैच) |
docker run --rm -v ... anchore/grype:latest /work/dasel.tar | पास - 1 निष्कर्ष (पैच किए गए CVE के लिए अपेक्षित गलत सकारात्मक) |
docker run --rm -v ... anchore/syft:latest /work/dasel.tar | पास - 36 पैकेज सूचीबद्ध (3 APK + 32 Go + 1 stdlib) |
मल्टी-आर्क बिल्ड - इस कंटेनर के निर्माण के लिए कई आर्किटेक्चर का समर्थन।
CI/CD पाइपलाइन - melange/apko कंटेनर एक्शन के साथ GitHub Actions में बिल्ड + परीक्षण स्वचालित करें
melange में Go-स्तरीय SBOM - melange बिल्ड पाइपलाइन के दौरान syft चलाएँ और Go-मॉड्यूल SBOM को APK के साथ एम्बेड करें