
تمرين لمرشح باك-إند مبتدئ: حزم أداة سطر الأوامر dasel (الإصدار v3.3.1) باستخدام Melange، وإصلاح الثغرة الأمنية CVE-2026-33320، وبناء صورة حاوية مصغّرة باستخدام Apko.
احزِم dasel الإصدار v3.3.1 مع Melange، وابنِ صورة حاوية باستخدام apko، وأصلح CVE-2026-33320.
المتطلبات الأساسية: Docker. جميع خطوات البناء تعمل داخل الحاويات — لا حاجة لتثبيت melange/apko محليًا. شغّل جميع الأوامر من جذر المستودع على linux/amd64 (أو Docker Desktop مع محاكاة linux/amd64).
الخطوة 0 — توليد مفتاح التوقيع (مرة واحدة)
docker run --rm -v "/${PWD}":/work cgr.dev/chainguard/melange keygen
الخطوة 1 — بناء الحزمة
docker run --privileged --rm -v "/${PWD}":/work cgr.dev/chainguard/melange build melange/dasel.yaml --arch amd64 --signing-key melange.rsa
الناتج: packages/x86_64/dasel-3.3.1-r1.apk
الخطوة 2 — اختبار الحزمة
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
الخطوة 3 — بناء الصورة
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
الناتج: dasel-image.tar. مستودع @local ./packages في apko/dasel.yaml يجعل apko يثبّت حزمة APK التي بنيتها في الخطوة 1. يتيح -k لـ apko الثقة بمفتاح توقيع Melange. يضيف apko البنية إلى الوسم، لذا تكون الصورة المحمّلة هي dasel-image:latest-amd64.
الخطوة 4 — تحميل الصورة
docker load --input dasel-image.tar
الخطوة 5 — تشغيل اختبارات الصورة
bash tests/test.sh
عشرة اختبارات: وجود الثنائي وإمكانية تشغيله، استعلام مفتاح مسطّح JSON، البنية amd64، حد ميزانية CVE يرفض قنبلة الأسماء المستعارة في YAML، مسار القراءة الطبيعي السليم لـ YAML، مسار JSON متداخل، الوصول إلى عنصر مصفوفة، تنسيق TOML، حد عمق CVE يرفض سلسلة أسماء مستعارة من 33 مستوى، رفض JSON غير الصالح.
يضيف melange/CVE-2026-33320.patch حارسين إلى parsing/yaml/yaml_reader.go:
maxExpansionDepth = 32 — يرفض سلاسل الأسماء المستعارة الأعمق من 32 مستوىmaxExpansionBudget = 100 — يرفض المستندات التي تحتوي على أكثر من 100 تحليل اسم مستعار إجمالييعيد كلاهما رمز خروج غير صفري مع رسالة تحتوي على yaml expansion. يتحقق الاختبار 4 في tests/test.sh من ذلك.
الأوامر المنفَّذة: melange keygen ← melange build ← melange test ← apko build ← docker load ← tests/test.sh
جميع الخطوات نجحت على linux/amd64.
ما الذي سأحسّنه لو توفر مزيد من الوقت:
test.sh