CVE-2026-17566 in pgAdmin
الملخص
بحسب VulDB • 31/07/2026
أداة استيراد/تصدير البيانات في pgAdmin 4 تقوم ببناء سطر أوامر psql \copy (...) عن طريق دمج استعلام SQL مقدم من المستخدم داخل قالب Jinja، ثم تمرير السطر المُنتَج إلى psql عبر الخيار --command. ولمنع المهاجم من الخروج من غلاف (...)، كانت الدالة create_import_export_job() (المسار POST /import_export/job/، والمحمية فقط بإذن tools_import_export_data العادي والشائع) تتحقق من الاستعلام باستخدام مدقق موازنة الأقواس المكتوب يدوياً _is_query_parens_balanced(). كان هذا المدقق يعامل دائماً الشرطة المائلة للخلف قبل علامة الاقتباس المفردة (\') على أنها تهرب العلامة، أي كما لو كانت standard_conforming_strings معطلة. ومع ذلك، فإن PostgreSQL جعلت قيمة standard_conforming_strings افتراضياً "مفعّلة" منذ الإصدار 9.1 (2010)، وهي القيمة الافتراضية في كل إصدارات PostgreSQL التي يدعمها pgAdmin 4 حالياً (من 13 إلى 18)؛ وفي ظل هذا الإعداد الافتراضي، يعامل موزع الرموز \copy الخاص بـ psql الشرطة المائلة للخلف كحرف عادي، لذا فإن علامة الاقتباس المفردة التي تليها مباشرةً تغلق السلسلة النصية. ونتيجة لذلك، كان استعلام مثل SELECT 'a\') TO PROGRAM 'echo pwned' x' يُقبل على أنه "متوازن" من قبل مدقق pgAdmin (الذي اعتقد أن القوس ) لا يزال داخل السلسلة)، بينما يقوم psql، عند تشغيله عبر سطر الأوامر المُنتَج فعلياً، بإغلاق السلسلة في تلك النقطة ويعامل القوس ) التالي كنهاية للاستعلام الفرعي المغلف \copy (...)، مما يكشف عن بند TO PROGRAM '' الذي يختاره المهاجم وينفذه psql عبر popen() -- بغض النظر عن وجود خطأ نحوي لاحق على نفس السطر. هذه هي نفس فئة الثغرة الموجودة في CVE-2025-12762/CVE-2025-13780 (تنفيذ كود عن بُعد RCE عبر حقن أوامر psql meta-command / COPY أثناء استعادة النسخة بتنسيق PLAIN)، ولكن تم الوصول إليها من خلال آلية دفاع مكتوبة بشكل مستقل في وحدة مختلفة (استيراد/تصدير البيانات بدلاً من الاستعادة) كانت تحتوي على خطأ منطق مختلف (دلالات تهرب الشرطة المائلة للخلف مقلوبة بدلاً من مراسي regex يتغلب عليها BOM).
يرفض الإصلاح أي شرطة مائلة للخلف داخل سلسلة نصية محاطة بعلامات اقتباس مفردة في الاستعلام بشكل قاطع، بدلاً من اختيار أحد تفسيرين psql المحتملين. هذا الأمر محافظ عن قصد: لأن التفسير الصحيح للشرطة المائلة للخلف يعتمد على إعداد standard_conforming_strings لخادم الهدف، والذي لا يمكن للمدقق معرفته بدقة أثناء وقت التحقق، فإن رفض الاستعلام أكثر أماناً من التخمين.
تؤثر هذه المشكلة في pgAdmin 4: منذ إدخال _is_query_parens_balanced() قبل الإصدار 9.18.
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.