
نصوص برمجية أحادية السطر لفحص الخوادم وصور Docker بحثًا عن CVE-2024-3094 (ثغرة xz الخلفية). تتضمن فحصًا قائمًا على Trivy للبيئات المحتوية على حاويات وفحوصات قائمة على grep لمستودعات التعليمات البرمجية للكشف عن مراجع المكتبات المعرضة للخطر.
يوفر هذا المستودع نصوصًا بسيطة لكنها قوية مكونة من سطر واحد مصممة لمساعدتك في تحديد ما إذا كان خادمك عرضة للثغرة CVE-2024-3094، وهي ثغرة أمنية حرجة موجودة في إصدارات معينة من أداة xz. بالإضافة إلى ذلك، نقدم طريقة ملائمة لفحص مستودعات الكود بحثًا عن مراجع لمكتبة xz، والتي قد تشير إلى ثغرات غير مباشرة محتملة.
لمعرفة ما إذا كان خادمك عرضة للثغرة CVE-2024-3094، قم بتنفيذ الأمر التالي في الطرفية:
(type dpkg &>/dev/null && dpkg -l xz 2>/dev/null | awk '/^ii/{print $3}' | grep -qE '^(5.6.0|5.6.1)$' && echo "Vulnerable: CVE-2024-3094" || echo "Not vulnerable or xz not installed") || (type rpm &>/dev/null && rpm -q --qf "%{VERSION}\n" xz 2>/dev/null | grep -qE '^(5.6.0|5.6.1)$' && echo "Vulnerable: CVE-2024-3094" || echo "Not vulnerable or xz not installed")
الأمر أعلاه سيتحقق من الحزم في توزيعة لينكس.
أو جرب هذا الخيار الآخر حيث يتم تنفيذ أمر xz، وهذا غير موصى به عادةً:
command -v xz &>/dev/null && { xz_version=$(xz --version | head -n 1 | awk '{print $4}'); [[ $xz_version == "5.6.0" || $xz_version == "5.6.1" ]] && echo "Vulnerable: CVE-2024-3094" || echo "Not vulnerable: CVE-2024-3094"; } || echo "xz not installed"
يقوم هذا البرنامج النصي بالإجراءات التالية:
xz مثبتة.xz.للفرق التي تستخدم Docker وتهتم بالثغرات داخل حاوياتها، نقدم مثالًا متطورًا باستخدام Trivy، ماسح الثغرات مفتوح المصدر من Aqua Security. تقوم هذه الطريقة بفحص صور Docker بحثًا عن الثغرات، بما في ذلك CVE-2024-3094، وتوفر مخرجات واضحة حول الحالة الأمنية للصورة.
يستخدم الأمر التالي Trivy لفحص صورة Docker (debian:experimental-20240311) بحثًا عن الثغرات ويصفي النتائج للثغرة CVE-2024-3094 المتعلقة بـ liblzma5:
docker run --rm -v $('pwd'):/project -w /project aquasec/trivy:latest image --format cyclonedx --scanners vuln --output /project/result.json debian:experimental-20240311@sha256:16cc2b09c44d991d36f63153f13a7c98fb7da6bd2ba9d7cc0f48baacb7484970 && jq -r '.components[] | .properties[] | select(.name == "aquasecurity:trivy:PkgID" and (.value | tostring | test("liblzma5@(5\\.6\\.0|5\\.6\\.1)"))) | .value' result.json | grep -qE '5\.6\.0|5\.6\.1' && echo "Vulnerable: CVE-2024-3094" || echo "Not vulnerable or liblzma5 not found"
كيف يعمل:
أمر تشغيل Docker: يبدأ حاوية Trivy، ويقوم بربط الدليل الحالي كحجم داخل الحاوية. هذا الإعداد يسمح لـ Trivy بإخراج نتائج الفحص مباشرة إلى ملف (result.json) في الدليل الحالي للمضيف.
فحص Trivy: يقوم بفحص صورة Docker المحددة بحثًا عن الثغرات، وإخراج النتائج بتنسيق CycloneDX (تنسيق موحد لقائمة مكونات البرامج).
المعالجة باستخدام jq: يقوم بتصفية نتائج الفحص لتحديد الحزمة liblzma5 والتحقق من الإصدارات "5.6.0" أو "5.6.1".
التحقق من الثغرة: يستخدم grep للبحث عن الإصدارات المعرضة للثغرة من liblzma5. يطبع "Vulnerable: CVE-2024-3094" إذا تم العثور عليها؛ وإلا فإنه يخرج "Not vulnerable or liblzma5 not found".
هذه الطريقة فعالة جدًا لخطوط الأنابيب الآلية ويمكن تعديلها للتحقق من ثغرات مختلفة عبر صور Docker مختلفة، مما يضمن أمان عمليات النشر الخاصة بك.
لاستخدام الأمر المقدم لفحص صور Docker الخاصة بك، اتبع هذه الخطوات لتخصيص الأمر وفقًا لاحتياجاتك:
استبدال صورة Docker: قم بتغيير debian:experimental-20240311@sha256:16cc2b09c44d991d36f63153f13a7c98fb7da6bd2ba9d7cc0f48baacb7484970 بالصورة التي ترغب في فحصها. يمكنك تحديد صورتك بالاسم والعلامة (مثل yourimage:yourtag) أو بـ digest الخاص بها.
ضبط التحقق من الثغرة: إذا كنت تفحص بحثًا عن ثغرات غير CVE-2024-3094، قم بتعديل تعبيرات jq و grep لاستهداف الحزم والإصدارات المحددة ذات الصلة بالثغرات التي تهمك.
على سبيل المثال، لفحص صورتك المسماة yourimage:yourtag:
docker run --rm -v $('pwd'):/project -w /project aquasec/trivy:latest image --format cyclonedx --scanners vuln --output /project/result.json yourimage:yourtag && jq -r '.components[] | .properties[] | select(.name == "aquasecurity:trivy:PkgID" and (.value | tostring | test("liblzma5@(5\\.6\\.0|5\\.6\\.1)"))) | .value' result.json | grep -qE '5\.6\.0|5\.6\.1' && echo "Vulnerable: CVE-2024-3094" || echo "Not vulnerable or liblzma5 not found"
نصائح للتخصيص:
لثغرات مختلفة: استبدل "liblzma5@(5\\.6\\.0|5\\.6\\.1)" في أمر jq بالحزمة والإصدارات التي تهتم بها. على سبيل المثال، للتحقق من إصدار openssl "1.1.1"، قد تستخدم openssl@(1\\.1\\.1).
لخصائص مختلفة: اعتمادًا على الثغرة أو الحزمة، قد تحتاج إلى تعديل .name == "aquasecurity:trivy:PkgID" لاستهداف خصائص مختلفة في مخرجات CycloneDX.
التحديثات المنتظمة: تأكد من تحديث مثيل Trivy الخاص بك بانتظام للحصول على أحدث تعريفات الثغرات. يمكن تحقيق ذلك عادةً بسحب أحدث صورة aquasec/trivy قبل تشغيل الفحوصات.
فهم المخرجات: تعرف على تنسيق مخرجات Trivy ومعالجة jq لتفسير النتائج بدقة وفهم الآثار المترتبة على صور Docker الخاصة بك.
xzإذا كنت تحتفظ بكود يتفاعل مع مكتبة xz أو يعتمد عليها، فمن الضروري تحديد أي مراجع صريحة لإصدارات المكتبة المعرضة للثغرة. استخدم الأوامر التالية لفحص مستودعاتك:
مشروع tukaani هو موطن أداة xz. للعثور على إشارات داخل الكود الخاص بك:
grep -rnH "tukaani" .
لمشاريع Java التي تستخدم Maven، قد تحدد xz كتبعية في ملف pom.xml. لتحديد موقع هذه المراجع:
grep -rnH "org.tukaani:xz:" .
هذه الأوامر ستبحث بشكل متكرر في الدليل الحالي (والدلائل الفرعية) عن الأنماط المحددة، مع الإبلاغ عن اسم الملف ورقم السطر والسطر الذي يحتوي على المطابقة.
ملاحظة: تأكد من أن لديك الأذونات اللازمة لتشغيل هذه البرامج النصية على خادمك أو لفحص المستودعات. دائمًا تحقق واختبر البرامج النصية في بيئة آمنة قبل استخدامها في أنظمة الإنتاج.
لا تتردد في المساهمة أو اقتراح تحسينات لهذا المستودع عن طريق تقديم طلب سحب (pull request) أو فتح مشكلة (issue). ملاحظاتك ومساهماتك محل تقدير كبير!