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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
CVE-2026-34828 — استمرار الجلسة في listmonk بعد إعادة تعيين كلمة المرور وتغييرها | Kitploit
أدوات/GitHubGitHub/0xmrma/cve-2026-34828
تحليل الثغرات الأمنيةالاستغلالأمن الويباختبار الاختراقالمصادقة
GitHub0xmrma/cve-2026-34828

CVE-2026-34828

استمرار الجلسة في listmonk بعد إعادة تعيين كلمة المرور وتغييرها

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

الأكثر شعبية

عرض الكل →

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

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

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

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

CVE-2026-34828

استمرارية جلسات listmonk بعد إعادة تعيين كلمة المرور وتغييرها

مقدمة

اكتشفت هذه المشكلة أثناء مراجعة listmonk، وهو مدير نشرات إخبارية وقوائم بريدية مفتوح المصدر، وكان في ذهني سؤال أمني بسيط:

عندما يغيّر المستخدم كلمة المرور أو يعيد تعيينها، هل يقوم التطبيق فعليًا بإنهاء الجلسات الصادرة مسبقًا؟

في هذه الحالة، كانت الإجابة لا.

ظلت الجلسات المصادق عليها الصادرة مسبقًا صالحة بعد كل من:

  • إعادة تعيين كلمة المرور
  • تغيير كلمة المرور

هذا يعني أن كوكي جلسة مسروقة يمكن أن تبقى قادرة على الصمود في وجه الأحداث الأمنية نفسها التي يعتمد عليها المستخدمون لاسترداد حساباتهم.

تم قبول المشكلة وتخصيص CVE-2026-34828 لها.

المشروع: listmonk على GitHub
CVE: CVE-2026-34828

أثرت هذه المشكلة على listmonk، وهو مشروع واسع الانتشار مع 5M+ من عمليات سحب Docker.

photo0

سلسلة الهجوم

جلسة مصادق عليها مسروقة → الضحية يعيد تعيين كلمة المرور أو يغيّرها → تبقى الجلسة القديمة صالحة → يحتفظ المهاجم بالوصول إلى الحساب بعد استرداد بيانات الاعتماد


ماذا يفعل listmonk

listmonk هو مدير قوائم بريدية ونشرات إخبارية مستضاف ذاتيًا.

يوفر:

  • مصادقة المسؤول
  • إدارة المستخدمين
  • إنشاء الحملات
  • إدارة المشتركين
  • إعدادات SMTP والإعدادات التشغيلية
  • إدارة قائمة على المتصفح

هذا يعني أن نموذج الجلسات الخاص به يشكّل حدًا أمنيًا حقيقيًا.

السؤال المهم هنا لم يكن ما إذا كان listmonk يدعم إعادة تعيين كلمة المرور.

السؤال الحقيقي كان:

هل تؤدي إعادة تعيين كلمة المرور أو تغييرها إلى إلغاء استمرارية وصول المهاجم فعليًا إذا كانت الجلسة قد سُرقت بالفعل؟

في هذه الحالة، لم يحدث ذلك.


لماذا كانت هذه الثغرة جديرة بالفحص

الكثير من المراجعات الأمنية تركّز بشكل ضيق جدًا على تجاوزات تسجيل الدخول وتصعيد الامتيازات الواضح.

وهذا يغفل فئة مهمة من نقاط الضعف:

فشل الاسترداد

إذا غيّر المستخدم كلمة المرور أو أعاد تعيينها، فمن المفترض أن يكون لهذا الإجراء معنى. من المفترض أن يقلل الثقة في بيانات الاعتماد الأقدم وحالة المصادقة القديمة.

إذا كان المهاجم يمتلك بالفعل جلسة صالحة ونجت تلك الجلسة من حدث الاسترداد، فإن الضحية لم يسترد الحساب بالكامل فعليًا.

كانت هذه هي المشكلة هنا.

لم تكن هذه ثغرة في التحقق من تسجيل الدخول. لم تكن مشكلة تشفير. لم تكن فشلًا في تجزئة كلمات المرور.

بل كانت فشلًا في دورة حياة الجلسة:

  • تغيّرت حالة كلمة المرور،
  • وحدث استرداد للحساب،
  • لكن الجلسات القديمة كانت لا تزال موثوقة.

وهذا كافٍ لإنشاء ثغرة حقيقية.


الحدود التي ركّزت عليها

لم أتعامل مع listmonk عبر مهاجمة النقاط الطرفية بشكل عشوائي وأمل أن تسقط إحداها.

المسار الأقوى كان تحديد حد الثقة الأعلى قيمة أولًا.

بالنسبة للبرمجيات المعتمدة بشدة على المصادقة، فإن أحد أفضل الحدود لاختبارها هو:

هل تلغي تغييرات الحساب الحساسة أمنيًا الجلسات الموثوقة سابقًا؟

عادةً ما يصبح هذا السؤال مثيرًا للاهتمام حول:

  • إعادة تعيين كلمة المرور
  • تغيير كلمة المرور
  • تغييرات المصادقة الثنائية
  • مسارات استرداد الحساب

في listmonk، جاءت أقوى الإشارات من الأولين.

هناك أصبحت المشكلة واضحة.


السبب الجذري

لم تكن الثغرة أن تغييرات كلمة المرور تفشل.

كانت الثغرة أن الجلسات عاشت لفترة أطول منها.

من مراجعة المصدر، مسار إعادة تعيين كلمة المرور:

  • يولّد رمز إعادة تعيين لمرة واحدة ويتحقق منه،
  • يحدّث كلمة المرور،
  • وينشئ جلسة جديدة،

لكن لم يكن هناك إلغاء مرئي للجلسات الأقدم.

ظهر النمط نفسه في مسار تغيير كلمة المرور المصادق عليه:

  • تم تحديث كلمة المرور،
  • لكن الجلسات الأقدم الصادرة مسبقًا لم يتم إبطالها.

طابق هذا السلوك النتائج الفعلية تمامًا.

مناطق الكود ذات الصلة التي راجعتها كانت:

  • cmd/auth.go لسلوك النسيان/إعادة التعيين
  • cmd/users.go لتحديثات الملف الشخصي المصادق عليها
  • internal/core/users.go لمعالجة تحديث كلمة المرور

لماذا هذا قابل للاستغلال

لأن سرقة الجلسة شرط هجوم حقيقي.

بمجرد أن يحصل المهاجم على كوكي جلسة مصادق عليها صالحة بأي وسيلة مثل:

  • اختراق المتصفح
  • البرمجيات الخبيثة
  • الوصول إلى محطة عمل مشتركة
  • XSS في مكوّن آخر
  • تسريب عبر بروكسي أو تصحيح الأخطاء
  • الكشف العرضي لكوكي

يجب أن يكون بمقدور الضحية إنهاء استمرارية وصول المهاجم عن طريق تغيير كلمة المرور أو إعادة تعيينها.

هنا، لم يستطيعوا ذلك.

كانت سلسلة الهجوم مباشرة:

  • المهاجم يمتلك كوكي جلسة صالحة
  • الضحية ينفّذ إعادة تعيين كلمة المرور أو تغييرها
  • كلمة المرور القديمة تصبح غير صالحة
  • كلمة المرور الجديدة تعمل
  • جلسة المهاجم القديمة ما تزال تصادق بنجاح

تلك هي الثغرة بأكملها.


ما الذي يجعل هذه مشكلة أمنية وليس مجرد سلوك تطبيق

التمييز المهم هو الاستمرارية بعد الاسترداد.

الكثير من التطبيقات تتعامل مع تغيير كلمة المرور كحدث على مستوى بيانات الاعتماد فقط. وهذا ليس كافيًا.

السؤال الحقيقي ليس:

«هل تغيّرت قيمة كلمة المرور في التخزين؟»

السؤال الحقيقي هو:

«هل تم إلغاء علاقة الثقة المرتبطة بالجلسات الأقدم؟»

في listmonk، لم يحدث ذلك.

هذا يحوّل ما كان يمكن أن يكون صيانة حساب عادية إلى استرداد أمني غير مكتمل.

هذا هو الفرق بين:

  • استمرارية الجلسة العادية
  • ونقطة ضعف أمنية حقيقية

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

تحققت من المشكلة في مسارين منفصلين.

الحالة 1: إعادة تعيين كلمة المرور لا تلغي الجلسات القائمة

أولًا، أنشأت مستخدم اختبار عاديًا وسجّلت الدخول، محتفظًا بكوكي الجلسة المصادق عليها.

ثم قمت بتشغيل مسار «نسيت كلمة المرور»، والتقطت رابط إعادة التعيين، وأعدت تعيين كلمة المرور.

بعد إعادة التعيين:

  • لم تعد كلمة المرور القديمة تعمل
  • عملت كلمة المرور الجديدة
  • لكن كوكي الجلسة القديمة قبل إعادة التعيين ما زالت تصادق بنجاح

كان طلب تحقق تمثيلي بالشكل التالي:

GET /api/profile HTTP/1.1
Host: 127.0.0.1:9000
Cookie: session=<old_pre_reset_session>

وما زال الخادم يعيد:

HTTP/1.1 200 OK
Content-Type: application/json

مع الملف الشخصي المصادق عليه.

أثبت ذلك الادعاء الأساسي:

  • اكتمل الاسترداد،
  • وتغيّرت بيانات الاعتماد،
  • لكن ثقة الجلسة القائمة ظلت سليمة.

الحالة 2: تغيير كلمة المرور لا يلغي الجلسات النشطة المتوازية

ثم تحققت من الفئة نفسها من الثغرات في مسار تغيير كلمة المرور المصادق عليه.

سجّلت الدخول مرتين بنفس المستخدم وحفظت جلستين مصادق عليهما صالحتين:

  • الجلسة A
  • الجلسة B

باستخدام الجلسة A، غيّرت كلمة المرور من خلال نقطة تحديث الملف الشخصي.

مثال على الطلب:

PUT /api/profile HTTP/1.1
Host: 127.0.0.1:9000
Cookie: session=<session_A>
Content-Type: application/json

{
  "name":"victim1",
  "email":"[email protected]",
  "password":"VictimChanged123"
}

بعد ذلك:

  • لم تعد كلمة المرور القديمة تعمل
  • عملت كلمة المرور الجديدة
  • لكن الجلسة B ظلت صالحة

طلب متابعة باستخدام الجلسة B ما زال يعيد بيانات مصادق عليها من /api/profile.

أثبت ذلك أن المشكلة لم تقتصر على مسار النسيان/إعادة التعيين. بل أثرت أيضًا على تغييرات كلمة المرور العادية المصادق عليها.


لماذا تهم عمليتا إعادة الإنتاج

كانت إعادة إنتاج واحدة كافية لإظهار وجود مشكلة.

لكن التحقق من المسارين معًا كان مهمًا لسببين.

أولًا

أظهر أن الثغرة لم تكن معزولة في مسار استرداد واحد لحالة حافة.

نفس الخاصية الأمنية فشلت في:

  • إعادة تعيين كلمة المرور غير المصادق عليها والمدفوعة بالاسترداد
  • تغيير كلمة المرور المصادق عليه داخل الجلسة

ثانيًا

جعل من الصعب تجاهل المشكلة باعتبارها منطق أعمال عرضيًا.

كانت هذه بوضوح نقطة ضعف أوسع في إدارة الجلسات:

  • تغيّرت حالة كلمة المرور،
  • لكن الجلسات القائمة ظلت موثوقة.

أعطى ذلك المشكلة وزنًا أمنيًا أقوى بكثير.


التحقق من TOTP

اختبرت أيضًا مسار إعادة التعيين على حساب مفعّل بـ TOTP لأنني أردت معرفة ما إذا كانت إعادة تعيين كلمة المرور ستُضعف أو تتجاوز توقعات المصادقة الثنائية بصمت.

ما أكدته هو:

  • ما زالت إعادة تعيين كلمة المرور تنجح
  • ظل TOTP مفعّلًا
  • إعادة تسجيل دخول جديدة بكلمة المرور الجديدة ما زالت تعيد التوجيه إلى خطوة المصادقة الثنائية
  • لذلك لم يكن هذا تجاوزًا مباشرًا للمصادقة الثنائية

كان ذلك فحصًا مفيدًا للحدود.

ضيّق المشكلة بشكل صحيح.

لم تكن الثغرة:

  • «إعادة تعيين كلمة المرور تعطّل TOTP»
  • أو «إعادة تعيين كلمة المرور تتجاوز TOTP»

المشكلة الحقيقية بقيت:

  • الجلسات الصادرة مسبقًا ما زالت تنجو من تغييرات أمنية حساسة في الحساب

هذه نتيجة أنظف وأكثر قابلية للدفاع عنها.


الخطورة والتصنيف

صُنّفت هذه المشكلة بشكل معقول على أنها عالية الخطورة.

التأثير الرئيسي هنا هو الوصول غير المصرح به المستمر بعد إجراءات استرداد أمان الحساب.

تنزيل الأداة