
إنه عيب في تعقيم المدخلات ناتج عن عدم تطابق الترميز، مما يسمح للمدخلات المصممة بتجاوز المرشحات. إذا كان الخادم معرضًا للخطر، يمكن للمهاجم حقن SQL ضار ينفذه النهاية الخلفية.
#لقد كتبت هذا الاستغلال بالرجوع إلى إثبات المفهوم المتاح في CVE-2025-1094
CVE‑2025‑1094 هي ثغرة تعقيم مدخلات في وظائف الهروب (libpq) في PostgreSQL والأداة التفاعلية psql. تنشأ من المعالجة غير السليمة للترميزات متعددة البايت عندما يكون ترميز العميل مضبوطاً على BIG5. في ظل ظروف معينة، يمكن أن يؤدي ذلك إلى سوء معالجة أحرف الهروب، مما يسمح للمهاجمين بتجاوز حدود الاستعلام المقصودة.
تم اكتشاف هذه الثغرة بواسطة Rapid7 أثناء تحليل CVE‑2024‑12356، وهي مشكلة منفصلة في أجهزة BeyondTrust. تم استغلال سلوك PostgreSQL كجزء من سلسلة ثغرات أوسع للتأثير بشكل أكبر على سلوك الخلفية.
عندما يمرر خادم ويب أو تطبيق إدخال المستخدم مباشرة إلى استعلامات SQL المنفذة عبر psql، ويكون client_encoding مضبوطاً على BIG5، يمكن للإدخال المصمم بعناية إنهاء عبارة SQL مبكراً وإلحاق SQL ضار.
يسمح هذا بإجراء عمليات إضافية مثل قراءة الملفات المحلية (مثل /etc/passwd) عبر وظائف PostgreSQL مثل lo_export أو pg_read_file أو وظائف مشابهة.
هذه ليست ثغرة تنفيذ أكواد عن بعد (RCE) في PostgreSQL بشكل افتراضي. بل هي إساءة استخدام لواجهات برمجة تطبيقات عميل PostgreSQL، والتي عند عدم تصفيتها أو هروبها بشكل صحيح، يمكن إساءة استخدامها لتسريب محتويات ملفات حساسة أو تنفيذ SQL خطير محتمل.
COPY TO أو pg_read_file أو lo_export عند دمجها مع حقن SQL في تطبيقات العميل.BIG5 ولا يتم تعقيم الإدخال بشكل صحيح.client_encoding=BIG5.import psycopg2
conn = psycopg2.connect(
host="127.0.0.1",
dbname="test",
user="test",
password="Test"
)
conn.set_client_encoding("BIG5")
cursor = conn.cursor()
# حمولة لقراءة /etc/passwd إلى ملف يمكن للخادم الوصول إليه
sql = \
"""
DO $$ DECLARE f text; BEGIN f := pg_read_file('/etc/passwd', 0, 1000);
RAISE NOTICE '%%', f; END $$;
"""
cursor.execute(sql)
conn.commit()
##✅ ما يفعله هذا الملف exploit.py:
يضبط PGCLIENTENCODING=BIG5 في البيئة (شرط التشغيل).
يصوغ حمولة حقن SQL للخروج من استعلام وإدراج أمر COPY TO PROGRAM جديد.
يرسل الحمولة عبر طلب GET إلى خادم الويب الضعيف (/search?q=...).
إذا استخدمت الخلفية psql وإدخالاً غير معقم، ينفذ COPY TO PROGRAM ويكتب النتيجة أو يفتح شيل.
⚠️ سينجح الشيل العكسي فقط إذا كان الخادم:
ينفذ SQL باستخدام psql (وليس برامج تشغيل قواعد بيانات مع وسائط)
يسمح بـ COPY TO PROGRAM (يتطلب صلاحيات superuser)
لديه اتصال صادر مع المهاجم
#يرسل النص البرمجي بايثون حمولة مصممة بعناية إلى خادم ويب ضعيف يمرر الإدخال مباشرة إلى عملية psql في PostgreSQL بترميز BIG5:
ابدأ مستمعًا على الطرفية:
nc -lvnp 4444
عدّل ملف الاستغلال:
عيّن TARGET_URL إلى IP أو نطاق الخادم الهدف. تأكد من أن ENDPOINT يطابق المسار (مثل /search). اضبط REVERSE_IP و REVERSE_PORT ليتوافقا مع جهاز الهجوم.
نفذ النص في طرفية أخرى:
python3 exploit.py
النتيجة: إذا نجح، ستتلقى اتصالاً على المستمع. إذا لم ينجح، حاول قراءة الملفات (مثل /etc/passwd) باستخدام حمولات pg_read_file بدلاً من ذلك.
لاختبار هذا:
EUC_TW أو ما شابه.psql أو SQL ديناميكي غير مهروب.pg_read_file أو lo_export.client_encoding=BIG5 إلا إذا كان ضرورياً صراحة.