
اكتشافات لثغرة CVE-2021-44228 داخل الملفات الثنائية المتداخلة
يحتوي هذا المستودع على مجموعة من قواعد YARA لاكتشاف إصدارات log4j المعرّضة للثغرات CVE-2021-44228 وCVE-2021-45046 و/أو CVE-2021-45105 من خلال البحث عن عدد من الخصائص التي تظهر في الإصدارات المتأثرة.
تعمل هذه الأداة بشكل تكراري على الملفات الثنائية مثل صور Docker وحزم النظام وصور أنظمة الملفات وحتى وسائط التثبيت. راجع قسم «كيف تعمل؟» للحصول على قائمة كاملة بصيغ الملفات المدعومة.
JndiManager (< 2.15.0).Interpolator التي لا تستورد JndiManager (< 2.16.0).AbstractConfiguration التي لا تستورد ConfigurationStrSubstitutor (< 2.17.0).على الرغم من وجود عدد من الموارد المتاحة لاكتشاف الاستخدام غير الآمن لـ log4j باستخدام CodeQL أو Semgrep، إلا أنه لم تتوفر حتى الآن أي موارد لاكتشاف إصدارات log4j التي يحتمل أن تكون معرّضة للخطر داخل المخرجات الثنائية.
يشكّل هذا تحدياً للمؤسسات التي تشغّل تطبيقات مؤسسية لم تُطوَّر داخلياً، أو حيث لا يكون الكود المصدري متاحاً مباشرة للفرق التي تجري الفرز الأولي (triage) للمشكلة.
نظراً لأن هذه الثغرة من المرجح أن تظهر في أماكن «غير متوقعة» مختلفة، تهدف هذه الأدوات إلى المساعدة في اكتشاف إصدارات log4j المعرّضة للخطر داخل المخرجات المترجمة، والتي يمكن بعد ذلك مراجعتها يدوياً لتحديد قابلية الاستغلال.
سيؤدي الكود المُعمّى (obfuscated) إلى نتائج سلبية خاطئة، حيث يتعذر اكتشاف مكوّن يحتمل أن يكون معرّضاً للخطر بسبب استخدام التعتيم (obfuscation).
لتشغيل هذه الأداة، استنسخ هذا المستودع واتبع الخطوات التالية. يفترض هذا أن Docker و jq مثبّتان.
artifacts/./quickstart.sh)بدلاً من ذلك، يمكن تخصيص التشغيل باستخدام الأمر التالي:
docker run \
--rm \
--mount type=bind,source=$(pwd)/artifacts,target=/mnt/stacs/input \
--mount type=bind,source=$(pwd)/rules,target=/mnt/stacs/rules \
stacscan/stacs:latest \
--rule-pack "/mnt/stacs/rules/vulnerability.json" \
"/mnt/stacs/input"
إذا كنت ترغب فقط في البحث عن CVE-2021-44228، يمكنك استخدام الأمر التالي:
docker run \
--rm \
--mount type=bind,source=$(pwd)/artifacts,target=/mnt/stacs/input \
--mount type=bind,source=$(pwd)/rules,target=/mnt/stacs/rules \
stacscan/stacs:latest \
--rule-pack "/mnt/stacs/rules/CVE-2021-44228.json" \
"/mnt/stacs/input"
إذا كنت ترغب فقط في البحث عن CVE-2021-45046، يمكنك استخدام الأمر التالي:
docker run \
--rm \
--mount type=bind,source=$(pwd)/artifacts,target=/mnt/stacs/input \
--mount type=bind,source=$(pwd)/rules,target=/mnt/stacs/rules \
stacscan/stacs:latest \
--rule-pack "/mnt/stacs/rules/CVE-2021-45046.json" \
"/mnt/stacs/input"
إذا كنت ترغب فقط في البحث عن CVE-2021-45105، يمكنك استخدام الأمر التالي:
docker run \
--rm \
--mount type=bind,source=$(pwd)/artifacts,target=/mnt/stacs/input \
--mount type=bind,source=$(pwd)/rules,target=/mnt/stacs/rules \
stacscan/stacs:latest \
--rule-pack "/mnt/stacs/rules/CVE-2021-45105.json" \
"/mnt/stacs/input"
يمكن أيضاً تشغيل هذه الأداة دون Docker. يرجى الاطلاع على تعليمات تثبيت STACS لمعرفة كيفية تثبيت STACS دون Docker.
لفحص صورة Docker، يجب أولاً تصديرها إلى دليل artifacts لفحصها. يمكن القيام بذلك باستخدام الأمر التالي:
IMAGE="alpine:latest"
NAME="alpine_latest"
docker export $(docker create ${IMAGE}) -o artifacts/${NAME}.tar
بدلاً من ذلك، يمكن تصدير حاوية قيد التشغيل باستخدام ما يلي فقط:
# Replace CONTAINER_ID with the correct container identifier.
CONTAINER_ID="c29209118f9a"
NAME="widget_example"
docker export ${CONTAINER_ID} -o artifacts/${NAME}.tar
ستحتاج إلى التحقيق في استخدام log4j داخل التطبيق لمعرفة ما إذا كان المنتج معرّضاً للخطر. إذا لم يكن ذلك ممكناً، بسبب عدم الوصول إلى الكود المصدري أو لأسباب أخرى، فيجب عليك التحقق مما إذا كان البائع قد نشر أي نصائح أمنية (advisories) حول هذا الأمر.
لا يوجد أي ضمان بأن تضمين نسخة معرّضة للخطر من log4j يعني أن المنتج معرّض للخطر!
إذا لم تتمكن من العثور على أي نصائح أمنية، فيجب عليك الاتصال بالبائع لسؤاله عن تأثير هذه الثغرة على المنتج.
كما يُنصح بالاطلاع على الإجراءات التخفيفية المنشورة من قبل مشروع log4j. أو بدلاً من ذلك، ومن الأفضل، قم بالترقية إلى إصدار غير متأثر من log4j.
على الرغم من أنها لم تُصمم لهذا الغرض، تستخدم هذه الأداة محرك STACS للتفكيك والتحليل الثنائي الشامل.
STACS هو ماسح ثابت للبيانات الاعتمادية (credentials) يعمل بواسطة YARA ويدعم صيغ الملفات الثنائية، وتحليل الأرشيفات المتداخلة، ومجموعات القواعد وقوائم التجاهل القابلة للتركيب، وتقارير SARIF.
على سبيل المثال، يمكن لهذه الأداة تحليل ملف tar يحتوي على صورة Docker مُصدَّرة، تحتوي بدورها على ملف JAR في مكان ما على نظام الملفات متأثر بهذه الثغرة.
يمكنها أيضاً تحليل الأرشيفات المتداخلة مثل tar وjar وwar وear وzip وapk وbz2 وtgz وxz وrpm وiso وغيرها.
يرجى فتح مشكلة (issue) على GitHub تصف المشكلة، مع رابط إلى المخرَج الثنائي المتأثر - حيثما أمكن.
كما ستكون طلبات السحب (Pull requests) لتعديل مجموعات القواعد موضع تقدير كبير!
راجع دليل validation/ للحصول على مجموعة من ملفات السجلات من التحقق من صحة مجموعة القواعد هذه.