CVE-2026-17351
pgAdmin 4: تجاوز المعاملات للقراءة فقط في المساعد الذكي عبر خلاف بين محلل sqlparse ومحلل PostgreSQL (إصلاح غير مكتمل لـ CVE-2026-12045)
- تم النشر
- 31/07/2026
- محدث
- 01/08/2026
- تخصيص CNA
- PostgreSQL
- الأدلة المرصودة
- 08/08/2026
CVSS الأساسي
nvd · CVSS 4.0
CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:P/VC:H/VI:H/VA:H/SC:H/SI:H/SA:H/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:Xمنخفض · الثلاثين يومًا القادمة
- المئوية
- 34.6%
- تاريخ الموديل
- 21/09/2026
EPSS هو تقدير إحصائي، وليس يقينًا أو مقياسًا للتأثير. ادمجها مع CVSS وحالة KEV والتعرض وبيئتك.
ملخص
إصلاح CVE-2026-12045 في pgAdmin 4 9.16 تطلّب أن يُحلَّل الاستعلام المقدَّم من LLM إلى أداة execute_sql_query الخاصة بالمساعد الذكي، عبر sqlparse، كعبارة واحدة غير متعلقة بالتحكم في المعاملات قبل تنفيذه داخل غلاف BEGIN TRANSACTION READ ONLY. يمكن أن يتعارض تحليل sqlparse للسلاسل النصية مع محلل PostgreSQL الخاص به: تحت standard_conforming_strings = on (الإعداد الافتراضي لـ PostgreSQL منذ 9.1)، تكون الشرطة المائلة للخلف قبل علامة الاقتباس حرفًا عاديًا بالنسبة إلى PostgreSQL، لكن sqlparse يعاملها على أنها تهرب علامة الاقتباس. لذلك، فإن حمولة مثل SELECT '\';COMMIT;CREATE TABLE pwn(x int);SELECT 1 --' تُحلَّل كعبارة SELECT واحدة لدى مدقق sqlparse، بينما ينفذها PostgreSQL كأربع عبارات: COMMIT المُهرَّب ينهي معاملة القراءة فقط المغلفة، ويصبح ROLLBACK اللاحق بلا تأثير. هذا يعيد تقديم نفس تجاوز الكتابة/RCE الذي كان CVE-2026-12045 يهدف إلى سده، ويمكن الوصول إليه عبر نفس آلية حقن التعليمات غير المباشرة (يزرع المهاجم الحمولة في أي كائن قد يقرؤه المساعد الذكي؛ ويصدرها LLM كاستدعاء أداة). حاول إصلاح مرشح أولي تشغيل الاستعلام عبر psycopg's execute(..., prepare=True)، بهدف إجبار خطوة Parse الخاصة بـ PostgreSQL (بروتوكول الاستعلام الموسع) على رفض النص متعدد العبارات بغض النظر عن تصنيف sqlparse. لا يعمل هذا الإصلاح المرشح كما قُدِّم: يتجاهل PrepareManager في psycopg3 وسيط prepare بصمت كلما كانت prepare_threshold الخاصة بالاتصال None، وهو الإعداد الافتراضي لـ pgAdmin لكل اتصال خادم (حقل "Prepare threshold" لكل خادم فارغ ما لم يضبطه مسؤول صراحةً) — يتراجع psycopg3 إلى بروتوكول الاستعلام البسيط، وهو نفس المسار القابل للعبارات المتعددة الذي يستغله التجاوز، لذا لا يسد الإصلاح المرشح أي شيء في أي تكوين افتراضي واقعي. يضبط الإصلاح المصحح conn.prepare_threshold = 0 مباشرةً على الاتصال المخصص أحادي الاستخدام للقراءة فقط الذي تفتحه أداة المساعد الذكي، مما يفرض هيكليًا بروتوكول الاستعلام الموسع بغض النظر عن أي تكوين على مستوى الخادم. تم التحقق من ذلك مقابل مثيل PostgreSQL 18 مباشر: تُنفَّذ الحمولة بنجاح تحت سلوك prepare_threshold=None (الافتراضي)، وتُرفض برسالة "cannot insert multiple commands into a prepared statement" بمجرد ضبط prepare_threshold=0 على ذلك الاتصال. تؤثر هذه المشكلة على pgAdmin 4: من 9.13 قبل 9.17.
المصادر
1الاستخدام المسؤول
استخدم معلومات الثغرات الأمنية فقط على الأنظمة التي تمتلكها أو المرخص لها باختبارها. يرتبط Kitploit ببيانات تعريف البحث العامة ولا يخزن أكواد الاستغلال أو الحمولات الضارة.