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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
CVE-2021-21239 — استغلال لـ CVE-2021-21239: تجاوز التحقق من توقيع SAML في pysaml2/Redash. يقوم بتزوير استجابات SAML بمفاتيح عامة مدمجة لانتحال هوية المستخدمين وتصعيد الامتيازات عبر التزويد الفوري (JIT). | Kitploit
أدوات/GitHubGitHub/illera88/cve-2021-21239
تحليل الثغرات الأمنيةالاستغلالاستغلال تطبيقات الويباختبار الاختراقالمصادقةالتعلم والتعليم
GitHubillera88/cve-2021-21239

CVE-2021-21239

استغلال لـ CVE-2021-21239: تجاوز التحقق من توقيع SAML في pysaml2/Redash. يقوم بتزوير استجابات SAML بمفاتيح عامة مدمجة لانتحال هوية المستخدمين وتصعيد الامتيازات عبر التزويد الفوري (JIT).

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

الأكثر شعبية

عرض الكل →

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

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

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

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

تقرير فني حول CVE-2021-21239: ثغرة في مصادقة SAML لـ Redash

مقدمة عن SAML

لغة تأكيد الأمان القابلة للتوسيع (SAML) هي معيار مفتوح لتبادل بيانات المصادقة والتفويض بين الأطراف في نظام هوية موحد. تمكن من الدخول الموحد (SSO) عبر النطاقات. المكونات الرئيسية هي:

  • موفر الهوية (IdP): الخدمة التي تصادق المستخدم وتصدر تأكيد SAML (مثل موفر SAML من Google). يوقع التأكيد بمفتاحه الخاص لضمان التكامل والأصالة.
  • موفر الخدمة (SP): التطبيق الذي يعتمد على موفر الهوية للمصادقة (مثل Redash). يتحقق موفر الخدمة من التوقيع باستخدام المفتاح العام أو الشهادة الخاص بموفر الهوية للثقة في التأكيد.

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

شرح الثغرة

CVE-2021-21239 هي ثغرة في تجاوز التحقق من التوقيع في مكتبة pysaml2 (إصدارات <6.5.0)، والتي تستخدمها Redash <=10.1.0 لـ SAML SSO. على المستوى العالي، تسمح للمهاجم بتزوير استجابة SAML تحتوي على مفتاح عام مدمج عشوائي، مما يمكن من انتحال شخصية المستخدم وتصعيد الصلاحيات عبر التوفير الفوري (JIT).

تنشأ الثغرة من كيفية قيام pysaml2 باستدعاء xmlsec1 للتحقق من توقيعات SAML. xmlsec1، بشكل افتراضي، يفضل المفاتيح العامة المدمجة في <ds:KeyInfo> الخاصة باستجابة SAML على شهادة موفر الهوية المكونة. يمكن للمهاجم صياغة استجابة SAML بزوج مفاتيح RSA مولد ذاتيًا، ودمج المفتاح العام في ، وتوقيع التأكيد بالمفتاح الخاص. بما أن pysaml2 لا يقيد لاستخدام شهادة موفر الهوية الموثوقة فقط، يعتبر التوقيع المزور صحيحًا، مما يسمح للمهاجم بتسجيل الدخول كأي مستخدم (مثل مسؤول) والحصول على أعلى الصلاحيات.

<ds:RSAKeyValue>
xmlsec1

على مستوى الكود، الثغرة موجودة في sigver.py (دالة check_signature) في pysaml2. قائمة أوامر xmlsec1 تفتقر إلى خيار --enabled-key-data raw-x509-cert، مما يسمح لـ xmlsec1 باستخدام مفاتيح مدمجة غير موثوقة:

root@kitploit:~
com_list = [
    self.xmlsec, '--verify', '--enabled-reference-uris', 'empty,same-doc',
    '--pubkey-cert-pem', cert_file_name,
    '--id-attr:%s' % id_attr, node_name,
    '--node-id', nodeid, '--output', output_file_name, xml_file_name
]

يسمح هذا بهجمات حيث يقوم المهاجم بتعديل البريد الإلكتروني في <saml:NameID> لانتحال شخصية أي مستخدم، مستفيدًا من التوفير الفوري.

الإعداد لاختبار الاستغلال

لاختبار الاستغلال، يتم تشغيل مثيل محلي لـ Redash (الإصدار v10.1.0 أو أقدم) باستخدام Docker Compose. يتضمن الإعداد تكوين SAML SSO مع موفر هوية Google:

  • تثبيت Redash عبر Docker Compose: استنساخ مستودع Redash، والتحقق من العلامة الضعيفة (مثل v10.1.0)، وتشغيل docker-compose up.
  • تكوين SAML في متغيرات بيئة Redash (مثل REDASH_SAML_LOGIN_ENABLED=true، REDASH_SAML_METADATA_URL=... من موفر هوية Google).
  • استخدام موفر هوية SAML من Google للاختبار: إعداد تطبيق SAML في Google Workspace مع عنوان رد الاتصال الخاص بـ Redash.
  • كشف مثيل Redash المحلي لموفر هوية Google باستخدام Ngrok.

يسمح هذا الإعداد باختبار استجابة SAML المزورة المرسلة عبر سكريبت Python أو Burp Suite، مع التحقق من تصعيد الصلاحيات.

الشرح التقني والإصلاح

تنشأ الثغرة لأن استدعاء pysaml2 لـ xmlsec1 يسمح باستخدام المفاتيح المدمجة للتحقق، متجاوزًا شهادة موفر الهوية الموثوقة. يقوم المهاجم بتوليد زوج مفاتيح RSA، وصياغة استجابة SAML بالمفتاح العام في <ds:RSAKeyValue>، وتعديل السمات (مثل البريد الإلكتروني إلى بريد المسؤول)، وتوقيع التأكيد. xmlsec1 يتحقق باستخدام المفتاح المدمج، معتبرًا إياه صحيحًا. تم تنفيذ الإصلاح في pysaml2 v6.5.0 (الالتزام الأولي في 17 يناير 2021) في src/saml2/sigver.py. تم تحديث قائمة أوامر xmlsec1 لتتضمن --enabled-key-data raw-x509-cert، مما يقيد التحقق بشهادة موفر الهوية المكونة:

root@kitploit:~
com_list = [
    self.xmlsec, '--verify', '--enabled-reference-uris', 'empty,same-doc',
    '--pubkey-cert-pem', cert_file_name,
    '--enabled-key-data', 'raw-x509-cert',
    '--id-attr:%s' % id_attr, node_name,
    '--node-id', nodeid, '--output', output_file_name, xml_file_name
]

يفرض هذا التحقق من سلسلة الثقة، مما يمنع استخدام المفاتيح المدمجة. قامت Redash بإصلاح ذلك عن طريق ترقية pysaml2 في الإصدارات اللاحقة (مثل v11+). الإصدارات الضعيفة لم تستخدم --insecure؛ كان الخلل هو عدم وجود خيار التقييد.

كود الاستغلال

كود الاستغلال منفذ في cve-2021-21239.py. هذا السكريبت بلغة Python يقوم بأتمتة عملية تزوير استجابة SAML لاستغلال CVE-2021-21239 في Redash <=10.1.0، مما يمكن من انتحال شخصية المستخدم وتصعيد الصلاحيات عبر التوفير الفوري. يستهدف الاستغلال موفر هوية SAML من Google Workspace ولكن تم اختبار الهجوم مع موفري هوية آخرين (keycloak). يقوم السكريبت بالخطوات التالية:

  1. تحليل وسائط سطر الأوامر: يقبل إدخالات لملف قالب SAML، وعنوان Redash، ومعرف IdP، ومعرف التأكيد، والبريد الإلكتروني، والاسم الأول، والاسم الأخير، مع قيم افتراضية للاختبار (مثل email="[email protected]").
  2. حل معرف IdP: يجلب idpid من نقطة نهاية تسجيل الدخول SAML لـ Redash إذا لم يتم توفيره، لضمان التوافق مع تكوين الهدف.
  3. ملء قالب XML: يستخدم قالبًا (SAMLResponseTempalte.xml) يحتوي على حوامل للبريد الإلكتروني والأسماء والطوابع الزمنية ومعرف التأكيد. يتم توليد طوابع زمنية ديناميكية بتوقيت UTC مع نافذة صلاحية مدتها 5 دقائق لاجتياز التحقق من صحة Redash.
  4. توليد زوج مفاتيح RSA: ينشئ مفتاحًا خاصًا RSA بحجم 2048 بت لتوقيع تأكيد SAML.
  5. توقيع XML: يستخدم مكتبة Python xmlsec لتوقيع عنصر <saml:Assertion> بـ RSA-SHA256، مع دمج المفتاح العام في <ds:RSAKeyValue> لاستغلال الثغرة.
  6. التحقق من التوقيع: يتحقق من صحة التوقيع، لضمان أن استجابة SAML المزورة صالحة هيكليًا.
  7. إرسال استجابة SAML: يشفر XML الموقع بـ Base64 و URL-encode، ويرسله إلى نقطة نهاية رد الاتصال SAML لـ Redash (/saml/callback?org_slug=default).
  8. استخراج ملف تعريف الجلسة: يسترجع ملف تعريف الجلسة من الاستجابة، مما يسمح للمهاجم بانتحال شخصية المستخدم الهدف.
  9. سرد المستخدمين: يجلب قائمة مستخدمي Redash مع عضوية المجموعات لكل مستخدم. يسمح هذا بتحديد واستهداف مستخدمي المسؤولين.

صعوبات في الاستغلال وتجاوزها

تطلب استغلال CVE-2021-21239 صياغة استجابة SAML مزورة يقبلها Redash عبر التوفير الفوري. الصعوبات الرئيسية وطرق تجاوزها:

  • تجاوز التحقق من التوقيع: سمحت pysaml2 باستخدام المفاتيح المدمجة، تم تجاوزها بتوليد زوج مفاتيح RSA ودمج المفتاح العام في <ds:RSAKeyValue>، والتوقيع بالمفتاح الخاص.
  • تحديات توقيع XML: نجحت المحاولات الأولية باستخدام أداة xmlsec1 الثنائية، لكن مكتبة Python xmlsec تسببت في عدم تطابق الملخص بسبب مشاكل المسافات/tسوية المتعارف عليها. تم تجاوزها بتسلسل XML في سطر واحد (etree.tostring(..., pretty_print=False)) قبل التوقيع.
  • التحقق من الطابع الزمني: تسبب NotOnOrAfter البعيد في المستقبل في الرفض؛ تم تجاوزه باستخدام طوابع زمنية ديناميكية بتوقيت UTC مع نافذة صلاحية مدتها 5 دقائق.
  • عدم تطابق رأس HTTP: قامت مكتبة Requests بتشفير SAMLResponse مزدوجًا، مما تسبب في فشل التحليل؛ تم تجاوزه بإرسال بيانات النموذج الخام.
  • إعداد Redash: تطلب Redash المحلي استخدام Ngrok لموفر هوية Google؛ تم تجاوزه باستخدام نفق مع Ngrok وتكوين SAML وفقًا لذلك.

تسلط هذه التحديات الضوء على الحاجة إلى معالجة دقيقة لـ XML وإعداد البيئة لاستغلال الثغرة بفعالية. يوضح كود الاستغلال المقدم ذلك بنجاح، مزورًا استجابة SAML لانتحال شخصية المستخدمين والحصول على الوصول.

تنزيل الأداة