
CVE-2024-23897: قراءة ملف عشوائي في Jenkins تؤدي إلى RCE
CVE-2024-23897: Jenkins قراءة ملف عشوائية تؤدي إلى تنفيذ كود عن بُعد 🎯 المنتجات والإصدارات المتأثرة
المنتج: Jenkins (خادم التكامل المستمر/التسليم المستمر)
الإصدارات: Jenkins 2.441 والإصدارات السابقة، Jenkins LTS 2.426.2 والإصدارات السابقة
تم الإصلاح في: Jenkins 2.442, Jenkins LTS 2.426.3
📝 الوصف
CVE-2024-23897 هي ثغرة خطيرة في Jenkins تسمح للمهاجمين غير المصادَق عليهم بقراءة ملفات عشوائية على نظام ملفات وحدة التحكم في Jenkins. توجد الثغرة لأن Jenkins لا يعطل ميزة في محلل أوامر CLI الخاصة به والتي تستبدل الحرف '@' المتبوع بمسار ملف بمحتويات الملف.
يمكن أن يؤدي هذا العيب إلى تنفيذ كود عن بُعد (RCE) عند دمجه مع تقنيات أخرى، مما يجعله خطيرًا بشكل خاص للمؤسسات التي تستخدم Jenkins في خطوط الأنابيب الخاصة بـ CI/CD الخاصة بها. 🔍 تفاصيل الثغرة السبب الجذري
تنبع الثغرة من دالة expandAtFiles() في الفئة org.kohsuke.args4j.CmdLineParser. عند تحليل وسائط CLI، إذا واجه المحلل رمز '@' متبوعًا بمسار ملف، فإنه يقرأ ويوسع محتوى ذلك الملف. متجه الهجوم
يمكن للمهاجمين استغلال هذه الثغرة باستخدام واجهة CLI الخاصة بـ Jenkins دون مصادقة: bash
java -jar jenkins-cli.jar -s http://target-jenkins-server:8080/ help @/etc/passwd
تحليل تقني قيود قراءة الملف
بدون مصادقة: يمكن قراءة أول 3 أسطر فقط من الملف (اعتمادًا على أمر CLI)
بصلاحية 'Overall/Read': يمكن قراءة محتوى الملف بالكامل
الملفات الثنائية: يمكن استخراجها ولكن قد تتأثر بمشكلات الترميز (Windows-1252 على Windows يعطي نتائج أفضل من UTF-8 على Linux)
توسيع سطح الهجوم
بمجرد تحقيق قراءة الملف، يمكن للمهاجمين التصعيد إلى هجمات أكثر خطورة:
استخراج بيانات الاعتماد:
اقرأ /var/jenkins_home/credentials.xml للحصول على بيانات الاعتماد المشفرة
اقرأ /var/jenkins_home/secrets/master.key و hudson.util.Secret لفك التشفير
فك تشفير بيانات الاعتماد باستخدام وحدة التحكم النصية في Jenkins: println(Hudson.util.Secret.fromString("{XXX=}").getPlainText())
تزوير ملفات تعريف الارتباط 'Remember-me':
الحصول على وصول إداري عن طريق تزوير ملفات تعريف الارتباط للمصادقة
تنفيذ كود عشوائي:
تحقيق RCE عبر متجهات Resource Root URL أو XSS أو CSRF
💥 التأثير التأثير الفوري
السرية: الإفصاح الكامل عن جميع الملفات على خادم Jenkins (الكود المصدر، بيانات الاعتماد، مفاتيح SSH، الرموز)
النزاهة: يمكن للمهاجمين تعديل البنيات وخطوط الأنابيب والتكوينات
التوفر: احتمالية رفض الخدمة أو نشر برامج الفدية
الاستغلال في العالم الحقيقي
تم استغلال هذه الثغرة بنشاط في البرية:
أُضيفت إلى كتالوج CISA للثغرات المستغلة المعروفة (KEV)
استُخدمت من قبل عصابات برامج الفدية (RansomEXX) لاختراق البنية التحتية
استُغلت من قبل جهة تهديد IntelBroker لسرقة مستودعات GitHub واختراق مزودي خدمات تكنولوجيا المعلومات
🔧 الكشف مؤشرات الاختراق
يمكن اكتشاف محاولات الاستغلال الناجحة من خلال:
أنماط طلبات HTTP: text
POST /cli?remoting=false HTTP/1.1 Content-type: application/octet-stream [binary payload containing @/path/to/file]
أمثلة نموذجية للحمولة:
@/etc/passwd
@/var/jenkins_home/secrets/initialAdminPassword
@/etc/os-release
استعلام كشف Splunk text
index=web uri="/cli?remoting=false" http_method=POST http_status=200
🛡️ التخفيف الإصلاح الرسمي
قم بالترقية إلى الإصدارات المصححة:
Jenkins ≥ 2.442
Jenkins LTS ≥ 2.426.3
التخفيف المؤقت
إذا لم يكن التصحيح الفوري ممكنًا:
تعطيل الوصول إلى CLI في Jenkins
تعيين خاصية نظام Java: hudson.cli.CLICommand.allowAtSyntax=false
تقييد الوصول الشبكي إلى واجهة إدارة Jenkins
تنفيذ قواعد WAF لحظر الطلبات التي تحتوي على أنماط @/
🔗 المراجع
[إدخال NVD](https://nvd.nist.gov/vuln/detail/CVE-2024-23897)
[نشرة أمان Jenkins](https://www.jenkins.io/security/advisory/2024-01-24/)
[كتالوج CISA KEV](https://www.cisa.gov/known-exploited-vulnerabilities-catalog)
[بحث Splunk](https://www.splunk.com/en_us/blog/security/cve-2024-23897-jenkins-arbitrary-file-read-vulnerability.html)
[صفحة Tenable CVE](https://www.tenable.com/cve/CVE-2024-23897)
📦 البناء والتشغيل bash
go build -o jenkins-cve-2024-23897 exploit.go
./jenkins-cve-2024-23897 http://target-jenkins:8080 /etc/passwd
go run exploit.go http://target-jenkins:8080 /etc/passwd
🎯 أمثلة الاستخدام bash
./jenkins-cve-2024-23897 http://jenkins.internal:8080 /etc/passwd ./jenkins-cve-2024-23897 http://localhost:8080 /var/jenkins_home/secrets/initialAdminPassword
./jenkins-cve-2024-23897 http://win-jenkins:8080 C:/Windows/win.ini
⚙️ كيف يعمل
تهيئة الجلسة: يولد معرف جلسة فريد بحجم 20 بايت
بناء الحمولة: يبني حمولة ثنائية بهيكل help @/path/to/file
مرحلة التحميل: يرسل الحمولة إلى نقطة نهاية CLI في Jenkins
مرحلة التنزيل: يسترجع محتوى الملف من الرد
المخرجات: يعرض محتوى الملف أو رسالة الخطأ
📊 الميزات
تطبيق خالص بلغة Go - لا تبعيات خارجية
متعدد المنصات - يعمل على Windows و Linux و macOS
مهلات قابلة للتكوين - قابلة للتعديل للشبكات البطيئة
معالجة أخطاء نظيفة - رسائل خطأ مفصلة
آمن للثنائيات - يتعامل مع الملفات النصية والثنائية
⚠️ ملاحظات مهمة
لأغراض تعليمية فقط - استخدم فقط على الأنظمة التي تملكها أو لديك إذن لاختبارها
قراءات غير مصادق عليها - بدون مصادقة، يمكن قراءة أول 3 أسطر فقط تقريبًا
الملفات الثنائية - قد تتأثر بمشكلات الترميز (استخدم هدف Windows لاستخراج ثنائي أفضل)