ثغرة حرجة بتقييم 10 في SAP Cloud SDK للغة Python تسمح بسرقة بيانات OAuth2

كشفت شركة SAP عن ثغرة في Cloud SDK الخاص بها للغة Python يمكن أن ترسل بيانات اعتماد عميل OAuth2 الخاصة بأي تطبيق إلى خادم يتحكم به المهاجم. وأوضحت SAP في تنبيه أمني صادر في 13 أكتوبر أن الثغرة تؤثر على التطبيقات متعددة المستأجرين على منصة SAP Business Technology Platform التي تستخدم هذا SDK، وهو عميل Python الرسمي لخدمات المنصة. ويشترط الهجوم أن يكون المهاجم قادراً على التحكم في النطاق الفرعي للمستأجر، وهو الاسم الذي يمرره التطبيق إلى SDK لتحديد المستأجر الذي يخصه الطلب.

تُتابع الثغرة تحت المعرّف CVE-2026-89111 وتحمل تقييم SAP البالغ 10.0 من 10 على مقياس CVSS. ويحدد التنبيه الإصدار 0.45.2، الصادر في 21 أغسطس، باعتباره الإصلاح. ويتولى الـ SDK إدارة المصادقة لتلك الخدمات باستخدام بيانات اعتماد العميل الخاصة بالتطبيق، وهما معرّف العميل وسر العميل. وقد أضاف الإصدار 0.45.2 فحصاً يرفض أي نطاق فرعي للمستأجر لا يكون اسماً بسيطاً.

 ستة إصدارات لاحقة لا تطبق الفحص في كل الحالات

وجدت The Hacker News أن ستة إصدارات لاحقة لا تطبق هذا الفحص في كل الحالات. فالإصدارات من 0.53.0 إلى 0.55.0، المنشورة بين 10 و18 سبتمبر، تتخطى الفحص عندما يستدعي التطبيق وحدة خدمة Destination في الـ SDK. وقد نقل الإصدار 0.53.0 هذه الوحدة إلى شيفرة مشتركة جديدة لطلب الرموز، ولم تتضمن تلك الشيفرة الفحص. ثم أضاف الإصدار 0.55.1 الفحص هناك في 18 سبتمبر.

وتقول ملاحظات إصدار 0.55.1 إن تمرير نطاق فرعي للمستأجر يحتوي على محددات عناوين URL “يرفع الآن ValueError فوراً بدلاً من توجيه بيانات الاعتماد بصمت إلى نقطة نهاية يتحكم بها المهاجم”.

 نتائج الاختبارات المستقلة

أجرت The Hacker News اختبارات SAP الخاصة بالفحص في 13 أكتوبر على الشيفرة المصدرية لكل إصدار من 0.45.1 إلى 0.58.4 وعلى إصدارات السلسلة 0.36 الثلاثة. وقد فشلت الإصدارات الستة في 9 من 11 اختباراً أضافتها SAP مع الإصدار 0.55.1، بينما نجح ذلك الإصدار والإصدارات الأحد عشر التي تلته في جميع الاختبارات الأحد عشر.

وحتى 13 أكتوبر، لا يدرج التنبيه أي إصدار أعلى من 0.45.2 باعتباره متأثراً، ولا يذكر هو ولا ملاحظات الإصدار ما إذا كانت الإصدارات الستة تندرج تحت CVE-2026-89111.

كما تفتقر إصداران على السلسلة الأقدم 0.36 إلى الفحص. فقد صدر الإصداران 0.36.1 و0.36.2 في 4 و10 سبتمبر، بعد إصلاح أغسطس، وفشلا في الاختبارات التي كتبتها SAP له. ويقع كلاهما داخل نطاق الإصدارات الأقل من 0.45.2 الذي يغطيه التنبيه. وبحسب التنبيه واختبارات The Hacker News، فإن الإصدارات الأقل من 0.45.2 بما فيها 0.36.1 و0.36.2 تفتقر إلى الفحص، بينما الإصدارات من 0.45.2 إلى 0.52.2 تتضمنه، والإصدارات من 0.53.0 إلى 0.55.0 تفتقر إليه في استدعاءات Destination وكذلك في استدعاءات خدمة إدارة المستندات في 0.55.0، أما الإصدارات من 0.55.1 إلى 0.58.4 فتتضمنه.

 ما ينبغي فعله

تحتوي الإصدارات من 0.45.2 إلى 0.52.2 ومن 0.55.1 إلى 0.58.4 على الفحص. وكان الإصدار 0.58.4 أحدث إصدار على PyPI، فهرس حزم Python، في 13 أكتوبر. ولا تضيف الترقية داخل السلسلة 0.36 الفحص، إذ لا يحتويه أي من إصداراتها الثلاثة. وتقول SAP في تنبيهها إن التطبيقات التي لا تستطيع الترقية بعد يمكنها مقارنة كل نطاق فرعي للمستأجر بقائمة المستأجرين المسجلين لديها قبل تمريره إلى الـ SDK.

ولا تهم الثغرة إلا حيث يمرر التطبيق نطاقاً فرعياً للمستأجر إلى الـ SDK. وقد غطى إصلاح أغسطس ثلاثة وحدات هي Agent Gateway وDestination وDocument Management Service. ولا يذكر التنبيه ما إذا كان ينبغي للتطبيقات التي شغّلت إصداراً بلا الفحص أن تستبدل بيانات اعتماد عميلها.

 كيف تعمل الثغرة؟

عندما يمرر التطبيق نطاقاً فرعياً للمستأجر، يطلب الـ SDK رمز وصول لذلك المستأجر. وللقيام بذلك، يأخذ عنوان URL للرمز من تكوين التطبيق ويستبدل جزءاً منه بالنطاق الفرعي للمستأجر. وقد استخدمت الإصدارات التي تفتقر إلى الفحص أي قيمة أُعطيت لها، ثم أرسل الـ SDK معرّف العميل وسر العميل إلى العنوان الناتج لطلب الرمز. ووفقاً لـ SAP، يمكن للمهاجم الذي يتحكم في النطاق الفرعي للمستأجر أن يوجه ذلك الطلب إلى خادمه الخاص.

ولا يقبل الفحص إلا اسماً واحداً مكوناً من حروف وأرقام وشرطات، بطول يصل إلى 63 حرفاً. وأي قيمة أخرى توقف الطلب بخطأ. وتصنف SAP الثغرة على أنها تزوير طلب من جانب الخادم (SSRF)، وهو ضعف يمكن فيه جعل الخادم يرسل طلباً إلى وجهة لم يقصدها. وما يمكن للمهاجم فعله ببيانات الاعتماد يعتمد على ما يُسمح لعميل التطبيق بفعله، وهو ما لا يذكره التنبيه.

 أُصلحت في أغسطس وكُشفت في أكتوبر

كانت الشيفرة غير المفحوصة موجودة في الـ SDK منذ إصداره الأول على PyPI في 16 مارس. وتدرج ملاحظات إصدار أغسطس الإصلاح تحت بند “إصلاحات الأخطاء” ولا تذكر الأمن، إذ تقول: “سابقاً، كانت القيم غير الصالحة تُستخدم بصمت لبناء عنوان URL مشوّه”. وقد صدر التنبيه بعد 53 يوماً. وينسب التنبيه الفضل إلى مستخدم على GitHub يُدعى SunandM للإبلاغ عن الثغرة، ولا يذكر أي هجمات وقعت.

محمد وهبى
محمد وهبى
المقالات: 1512

اترك ردّاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *


The reCAPTCHA verification period has expired. Please reload the page.