
تعداد أسماء المستخدمين عبر قناة جانبية لتوقيت المصادقة في PaperCut NG
| الحقل | التفاصيل |
|---|---|
| معرّف CVE | CVE-2026-8794 |
| المنتج | PaperCut NG |
| الإصدار المتأثر | 25.0.11 (Build 75758) والإصدارات الأقدم |
| CWE | CWE-208 — تباين التوقيت الملاحَظ |
| درجة CVSS | 3.7 (منخفضة) — بشكل مستقل؛ تتصاعد عند دمجها مع CVE-2026-8793 |
| الباحث | Vivien LEBAS (@Hazaz) |
| أُبلغ عنه | مايو 2026 |
| الحالة | تم التصحيح — PaperCut NG 26.0.3 |
تعرض نقطة نهاية المصادقة في PaperCut NG تباينًا في التوقيت قابلًا للقياس بين محاولات تسجيل الدخول ضد الحسابات الموجودة وغير الموجودة. هذا التباين — الناتج عن تنفيذ تجزئة كلمة المرور bcrypt فقط عند العثور على حساب مطابق — يسمح لمهاجم غير مصادَق بتحديد ما إذا كان اسم مستخدم معين موجودًا في النظام بشكل موثوق عبر قياس أوقات استجابة HTTP.
عند دمجها مع CVE-2026-8793 (غياب الحماية من هجمات القوة العمياء)، تتيح هذه الثغرة سلسلة هجوم كاملة لاختراق بيانات الاعتماد: عدّ أسماء المستخدمين الصالحة أولاً، ثم تنفيذ تخمين كلمات مرور مستهدف وغير محدود دون أي خطر من قفل الحساب.
ينبع التباين في التوقيت من نمط تنفيذ كلاسيكي: يستدعي التطبيق مقارنة bcrypt فقط عند العثور على حساب يطابق اسم المستخدم المُرسَل في قاعدة البيانات. بالنسبة للحسابات غير الموجودة، يخرج إجراء المصادقة مبكرًا — قبل استدعاء bcrypt — مما يؤدي إلى وقت استجابة أقصر بشكل ملحوظ.
Valid username: DB lookup (found) → bcrypt comparison → failure response ~2.1s avg
Invalid username: DB lookup (not found) → immediate failure response ~0.2s avg
هذا النمط موثق جيدًا (انظر CWE-208). المعالجة القياسية هي تنفيذ مقارنة bcrypt وهمية حتى عندما لا يكون الحساب موجودًا، لمعادلة أوقات الاستجابة عبر مساري الكود.
أُجريت محاولات مصادقة ضد نقطة نهاية تسجيل الدخول في PaperCut NG في ظل ظروف مضبوطة:
curl مع --write-out "%{time_total}"، مع كلمة مرور خاطئة عمدًا في جميع الحالاتيُظهر التوزيعان تداخلًا صفريًا، مما يجعل التعداد موثوقًا حتى مع وجود تذبذب شبكي معتدل.
# Measure response time for an existing account (wrong password)
curl -s -o /dev/null -w "%{time_total}\n" \
-X POST "http://<target>:9191/app" \
-H "Origin: http://<target>:9191" \
--data "service=direct/1/Home/%24Form&inputUsername=admin&inputPassword=wrongpassword"
# Output: ~2.1s
# Measure response time for a non-existent account
curl -s -o /dev/null -w "%{time_total}\n" \
-X POST "http://<target>:9191/app" \
-H "Origin: http://<target>:9191" \
--data "service=direct/1/Home/%24Form&inputUsername=zz_doesnotexist_zz&inputPassword=wrongpassword"
# Output: ~0.2s
وقت الاستجابة الأعلى بشكل ملحوظ من ~0.5 ثانية يشير بشكل موثوق إلى اسم مستخدم صالح. ويمكن لنص برمجي بسيط أتمتة التعداد باستخدام قائمة كلمات من أنماط التسمية المؤسسية الشائعة (firstname.lastname, flastname, إلخ.).
يحقق هذا الاكتشاف أكبر تأثير عند استخدامه كخطوة أولى في هجوم من مرحلتين:
الخطوة 1 (CVE-2026-8794، هذا الاكتشاف) — إنشاء قائمة بأسماء حسابات PaperCut NG الصالحة عبر قياس توقيت استجابات المصادقة. في البيئات المؤسسية، غالبًا ما تكون قائمة كلمات قصيرة من توليفات firstname.lastname المستمدة من مصادر عامة (LinkedIn، موقع الشركة، تواقيع البريد الإلكتروني) كافية.
الخطوة 2 (CVE-2026-8793) — إرسال محاولات كلمات مرور غير محدودة ضد حسابات صالحة مؤكدة. غياب تحديد المعدل أو قفل الحساب يعني أن أي هجوم حشو بيانات اعتماد أو رش كلمات مرور يمكن تنفيذه بالكامل عبر الإنترنت وبسرعة كاملة.
يمكن لمهاجم غير مصادَق يمتلك وصولًا شبكيًا إلى TCP/9191 أن:
في النشر المؤسسي النموذجي، تعكس أسماء مستخدمي PaperCut حسابات Active Directory. وبالتالي، فإن اسم المستخدم الصالح المؤكد في PaperCut هو أيضًا اسم حساب نطاق صالح مؤكد، مما يضخم القيمة الاستطلاعية إلى ما هو أبعد من PaperCut نفسها.
للمسؤولين (تخفيفات مرحلية):
للبائع:
نفّذ مقارنة bcrypt وهمية بوقت ثابت عندما لا يطابق اسم المستخدم المُرسَل أي حساب، لضمان معادلة أوقات الاستجابة بغض النظر عن وجود الحساب من عدمه:
# Pseudocode — constant-time authentication pattern
user = db.find_user(username)
if user:
valid = bcrypt.verify(password, user.password_hash)
else:
bcrypt.verify(password, DUMMY_HASH) # always run, result discarded
valid = False
هذا نمط راسخ للتخفيف من CWE-208 في تدفقات المصادقة.
| التاريخ | الحدث |
|---|---|
| 9 مايو 2026 | إرسال التقرير الأولي إلى فريق أمان PaperCut |
| 10 مايو 2026 | استلام الإقرار |
تم الإفصاح وفقًا لمبادئ الإفصاح المسؤول. جرى مشاركة التفاصيل التقنية الكاملة مع فريق أمان PaperCut قبل الإصدار العلني.
الباحث: Vivien LEBAS — @Hazaz
| الحالة | الحد الأدنى (ث) | الحد الأقصى (ث) | المتوسط (ث) | الانحراف المعياري |
|---|
حساب موجود (admin) | 2.08 | 2.19 | 2.13 | 0.031 |
حساب غير موجود (zz_doesnotexist_zz) | 0.18 | 0.24 | 0.21 | 0.018 |
| الفرق | ~1.92s |
| مايو 2026 | تعيين CVE-2026-8794 من قِبل PaperCut (CNA) |
| أغسطس 2026 | إصدار التصحيح — PaperCut NG 26.0.3 |
| أغسطس 2026 | الكشف العام بالتنسيق مع البائع |