
مختبر Docker مستقل لممارسة استغلال CVE-2026-2005، وهو تجاوز سعة المخزن المؤقت في الكومة (heap buffer overflow) في امتداد pgcrypto الخاص بـ PostgreSQL، مما يتيح تصعيد الامتيازات وتنفيذ الأكواد داخل الحاوية.
مختبر Docker متكامل لممارسة استغلال CVE-2026-2005، وهو تجاوز سعة مخزن مؤقت في الكومة في امتداد pgcrypto الخاص بـ PostgreSQL والذي يتيح تنفيذ التعليمات البرمجية عن بُعد دون امتيازات المستخدم الفائق.
الإصدارات المتأثرة: PostgreSQL ≤ 17.7 / 16.11 / 15.15 / 14.20 / 18.1
تم الإصلاح في: 18.2, 17.8, 16.12, 15.16, 14.21 (صدر في 2026-02-12)
المتطلبات: Docker، Docker Compose
git clone <this-repo>
cd CVE-2026-2005
docker compose up -d
سيكون PostgreSQL يستمع على 127.0.0.1:5433.
لقد حصلت على بيانات اعتماد قاعدة البيانات من ملف إعدادات أحد التطبيقات:
| المعامل | القيمة |
|---|---|
| المضيف | 127.0.0.1 |
| المنفذ | 5433 |
| قاعدة البيانات | targetdb |
| اسم المستخدم | pentester |
| كلمة المرور | pentester123 |
اتصل لتأكيد الوصول:
psql -h 127.0.0.1 -p 5433 -U pentester -d targetdb
يمتلك الحساب صلاحية CREATE على مخطط public. وهو ليس مستخدمًا فائقًا.
التقط كلا العلمين لإكمال المختبر.
العلم 1 — تصعيد صلاحيات قاعدة البيانات
SELECT * FROM flag_db;
-- يمكن قراءته فقط بعد التصعيد إلى مستخدم فائق داخل جلسة قاعدة البيانات
العلم 2 — تنفيذ تعليمات برمجية داخل الحاوية
/var/lib/postgresql/flag.txt
-- يمكن قراءته فقط بعد تنفيذ الأوامر كمستخدم postgres لنظام التشغيل داخل الحاوية
ملاحظة حول النطاق: يتم تنفيذ
COPY TO PROGRAMداخل حاوية Docker، وليس على المضيف. التأثير الأساسي في العالم الحقيقي هو الوصول الكامل للقراءة إلى قاعدة البيانات (جميع الجداول، جميع قواعد البيانات). يتطلب الوصول إلى مضيف Docker تقنية منفصلة للهروب من الحاوية.
الخلل موجود في pgp_parse_pubenc_sesskey() داخل pgcrypto/pgp-pubenc.c.
عند فك تشفير حزمة مفتاح جلسة مشفرة بمفتاح عام، تستمد الدالة
طول مفتاح الجلسة كـ msglen - 3 من حمولة RSA/ElGamal يتحكم فيها المهاجم
وتنسخه في مخزن مؤقت ثابت بحجم 32 بايت (PGP_MAX_KEY) دون
التحقق من الحدود. يمكن للمهاجم كتابة مئات البايتات خارج حدود المخزن المؤقت.
يتم الاستغلال على ثلاث مراحل:
dst لاستبدال CurrentUserId في .data بالقيمة 10 (BOOTSTRAP_SUPERUSERID)COPY (SELECT '') TO PROGRAM '<cmd>' أوامر نظام التشغيل كمستخدم postgres داخل الحاوية. في نشر حقيقي بدون Docker، يعني هذا وصولًا على مستوى نظام التشغيل إلى مضيف قاعدة البيانات.نظرًا لأن تخطيط ASLR متطابق عبر جميع الاتصالات إلى نفس عملية postmaster، تظل العناوين المسربة على اتصال واحد صالحة في الاتصال التالي.
pgcrypto/pgp-pubenc.cobjdump -t $(which postgres) | grep CurrentUserIddocker compose down -v
هذا المختبر مخصص لأبحاث وتعليم الأمن المصرح بها فقط. قم بتشغيله فقط على الأنظمة التي تملكها أو لديك إذن صريح لاختبارها.