
ماسح البايت كود المحلي لثغرة Log4JShell (CVE-2021-44228)
كاشف بايت كود Log4JShell هو أداة مفتوحة المصدر تساعد في تحديد ما إذا كان ملف jar متأثرًا بالثغرة الحرجة CVE-2021-44228. تقوم الأداة بفحص ملف jar ومقارنة الفئات (classes) بمجموعة من التجزئات (hashes) الضعيفة للفئات داخل ملف jar. تم حساب التجزئات مسبقًا للقطع البرمجية (artifacts) على Maven Central.
تحديث مهم: قمنا بتوسيع قائمة القطع البرمجية المتأثرة على Maven Central. تحتوي القائمة على 18.816 قطعة برمجية. إما أن هذه القطع البرمجية تستخدم log4j-core كاعتماد مُصرَّح به، أو أننا حددنا ملفات .class داخل القطع البرمجية تطابق الإصدارات المتأثرة من log4j-core.
java -cp <PATH_TO_DOWNLOADED_JAR> de.codeshield.log4jshell.Log4JDetector <ABSOLUTE_PATH_TO_JAR_TO_CHECK>إذا كان ملف jar متأثرًا، تقوم الأداة بإخراج المعلومات إلى سطر الأوامر:
CVE-2021-44228 found declared as dependency in META-INF/maven/org.apache.logging.log4j/log4j-core/pom.xml
CVE-2021-44228 found in class file org/apache/logging/log4j/core/net/JndiManager$1.class
java -cp <PATH_TO_DOWNLOADED_JAR> de.codeshield.log4jshell.Log4JProcessDetectorتم اكتشاف ثغرة خطيرة من نوع تنفيذ التعليمات البرمجية عن بُعد (Remote Code Execution) داخل log4j، والإصدارات من 2.0-beta9 إلى 2.14 متأثرة. تم تصنيف الثغرة على أنها حرجة، لأنها أثرت على log4j، أحد أكثر مكتبات تسجيل الدخول (logging) استخدامًا في Java. هناك العديد من المراجع والمقالات المتاحة.
تم استخدام Log4j ويُستخدم حاليًا في معظم مشاريع Java لأغراض تسجيل الدخول. الآن نحتاج إلى فهم المشاريع والمكتبات المتأثرة فعليًا. وفقًا لآلية التبعيات في Java، يمكن أن يتأثر التطبيق أيضًا إذا كان يتضمن بشكل transitively (غير مباشر) إصدار المكتبة الضعيفة. المشروع A يتضمن مكتبة lib بشكل transitively إذا كان أحد التبعيات المباشرة B للمشروع A لديه تبعية إلى lib. يمكن إجراء اختبار بسيط لمعرفة ما إذا كنت متأثرًا باستخدام شجرة تبعيات maven:
مثال: نفّذ الأمر mvn dependency:tree على مشروع maven.
[INFO] exampleProject:mainProject:jar:0.0.1-SNAPSHOT
[INFO] +- exampleProject:lib-using-log4j:jar:0.0.1-SNAPSHOT:compile
[INFO] | \- org.apache.logging.log4j:log4j-core:jar:2.14.1:compile
ومع ذلك، فإن هذا الفحص هو مجرد مؤشر أولي ولا يكفي للأسباب التالية:
برامج Java غالبًا:
وبالتالي، أي مكتبة يستخدمها مشروع Java يمكن أن تُدخل الثغرة إلى مشروعك. يساعد تحليل البايت كود المتعمق في ذلك، وهذا ما ننشره كجزء من هذا المستودع.
لبناء هذه الأداة، شغّل
mvn compile
لتجميع jar قابل للتشغيل، استخدم
mvn clean compile assembly:single
تم حساب مجموعة التجزئات الضعيفة للفئات مسبقًا على مستودع Maven Central بالكامل. تحتوي تجزئات الفئات على جميع التجزئات التي حددناها كمتشابهة بالبايت كود باستخدام تقنية البصمة (Fingerprinting).
المعلومات المحسوبة مسبقًا تتضمن:
كنطاق إصدارات متأثر، اعتبرنا [2.0-beta9, 2.15) المرجع.
تستخدم هذه الأداة تقنية بصمة بايت كود جديدة لـ Java ابتكرها Andreas Dann. التدفق الأساسي هو كما يلي:
ملاحظة: من أجل نشر أبسط، يوفر هذا المستودع تجزئات SHA للفئات الضعيفة، وقد تم حساب المعلومات باستخدام تقنية البصمة
قائمة التجزئات والقطع البرمجية لـ maven ليست كاملة. سنقوم بتحديث القوائم بانتظام.
تم إنشاء هذه الأداة بالاشتراك بين مؤسسي CodeShield
نرحب بملاحظاتكم!
نعمل على توسيع قائمة القطع البرمجية المتأثرة ونبحث دائمًا عن تحسين ما نقدمه. المساهمات مرحب بها
أيضًا، ⭐️ هذا المستودع إذا كان الماسح الضوئي لدينا قد ساعدك!
إذا كنت بحاجة إلى دعم، أو تريد معرفة المزيد عن تقنيتنا، تواصل معنا على [email protected].
فريق CodeShield الخاص بك 💚