في يونيو، اكتشف مهندسو Wiz وأبلغوا عن الأمر #أرفقني، ثغرة أمنية كبيرة في عزل السحابة في Oracle Cloud Infrastructure (OCI)، مما دفع Oracle إلى تصحيح الثغرة الأمنية خلال ساعات ودون الحاجة إلى إجراء من جانب العميل.

  • التأثير المحتمل —قبل أن يتم تصحيحه، كان من الممكن أن يكون جميع عملاء OCI مستهدفين من قبل مهاجم مع علمه بذلك #أرفقني. يمكن قراءة أي وحدة تخزين غير متصلة، أو وحدات تخزين مرفقة تسمح بمرفقات متعددة، أو الكتابة إليها طالما أن المهاجم لديه Oracle Cloud Identifier (OCID)، مما يسمح بتصفية البيانات الحساسة أو بدء هجمات أكثر تدميراً عن طريق معالجة الملفات القابلة للتنفيذ.

  • المعالجة—وفي غضون 24 ساعة من إبلاغ Wiz بذلك، قامت Oracle بتصحيح المشكلة #أرفقني لجميع عملاء OCI. لم يكن هناك حاجة لأي إجراء من جانب العميل.

  • الاستنتاجات الرئيسية — يعد عزل مستأجر السحابة عنصرًا أساسيًا في السحابة. يتوقع العملاء أن بياناتهم لا يمكن الوصول إليها من قبل عملاء آخرين. ومع ذلك، فإن نقاط الضعف في عزل السحابة تكسر الجدران بين المستأجرين. وهذا يسلط الضوء على الأهمية الحاسمة لأبحاث الثغرات السحابية الاستباقية، والإفصاح المسؤول، والتتبع العام لثغرات السحابة فيما يتعلق بأمان السحابة.

ما هو المرفق؟

#أرفقني هي واحدة من أخطر نقاط الضعف السحابية التي تم الإبلاغ عنها لأنها قد تؤثر على جميع عملاء OCI. عادةً ما تؤثر ثغرات العزل السحابي على خدمة سحابية معينة. ومع ذلك، في هذه الحالة، يرتبط التأثير بخدمة سحابية أساسية.

وجد مهندسو Wiz أن ربط قرص بجهاز افتراضي في حساب آخر لا يتطلب أي أذونات. وهذا يعني أن مهاجمًا محتملاً كان بإمكانه الوصول إلى البيانات وتعديلها من أي عميل OCI، وفي بعض الحالات كان من الممكن أن يستولي على البيئة.

كان تدفق الهجوم المحتمل بسيطًا:

  1. اكتشف المعرف (OCID) لوحدة تخزين الضحية المستهدفة من خلال البحث في الويب أو باستخدام إذن مستخدم منخفض الامتيازات لقراءة OCID لوحدة التخزين من بيئة الضحية.

  2. ابدأ مثيل حساب في مستأجر يتحكم فيه المهاجم ويقع في نفس نطاق التوفر (AD) مثل وحدة التخزين المستهدفة.

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

ومن هناك، كان من الممكن أن يقوم مهاجم محتمل بتنفيذ العديد من الإجراءات الخطيرة:

  • قم بتصفية البيانات الحساسة المخزنة على وحدة التخزين.

  • ابحث في وحدة التخزين عن أسرار النص الواضح من أجل التحرك أفقيًا عبر بيئة الضحية و/أو تصعيد الامتيازات.

  • قم بتغيير وحدات تخزين الكتل ووحدات تخزين التمهيد الموجودة — على سبيل المثال عن طريق معالجة الثنائيات — من أجل تنفيذ التعليمات البرمجية عندما يتم تركيب وحدات التخزين على مثيلات حسابية.

استجابت Oracle بسرعة غير عادية عندما كشفت Wiz بشكل مسؤول عن اكتشافها #أرفقني. بصفته شريكًا وعميلًا لشركة Oracle، يقدر Wiz تعاون Oracle واهتمامها السريع بهذه المشكلة. شكرت Oracle Wiz على اكتشاف هذه الثغرة الأمنية كجزء من الاستشارة بشأن تحديث التصحيحات المهمة في يوليو 2022.

كيف اكتشف ويز AttachMe

أثناء إنشاء موصل OCI لـ Wiz، لاحظ مهندسو البرامج لدينا أنه من الممكن إرفاق جميع وحدات تخزين الكتل ووحدات تخزين التمهيد تقريبًا بمثيل حوسبة، وفقًا لمعرف Oracle Cloud (OCID) الخاص بهم، دون ترخيص صريح. بعد المزيد من الاختبارات، أدركنا أن هذا كان ممكنًا حتى عندما كان مثيل الحجم والحوسبة موجودًا في إيجارات OCI مختلفة! وهذا يعني أنه يمكن للمهاجم الوصول إلى وحدة تخزين في مستأجر آخر (طالما أنه يعرف OCID)، وأي شخص يملك وحدة التخزين (الضحية) لن يكون على علم تمامًا بأن شخصًا آخر لديه حق الوصول للقراءة/الكتابة إلى بياناته، نظرًا لأن مثيل الحساب والمرفق سيكونان في ملكية المهاجم.

الخلفية – ما هي وحدات التخزين في OCI؟

كما هو موضح في OCI الوثائق، وحدة التخزين عبارة عن قرص افتراضي يوفر مساحة تخزين ثابتة لمثيلات الحساب. هناك نوعان من وحدات التخزين في OCI:

  • حجم الكتلة — جهاز تخزين كتلة قابل للفصل يسمح لك بتوسيع سعة تخزين المثيل ديناميكيًا.

  • وحدة تخزين التمهيد – جهاز وحدة تخزين تمهيد قابل للفصل يحتوي على الصورة المستخدمة لتشغيل مثيل حسابي ويتم إنشاؤه عادةً عند إنشاء مثيل حسابي.

يدعم OCI المرفقات المتعددة لوحدات تخزين الكتل، مما يعني أنه يمكنك إرفاق وحدة تخزين واحدة بمثيلات متعددة في نفس الوقت باستخدام قابل للمشاركة ميزة مع أذونات القراءة/الكتابة أو القراءة فقط.

يعد إرفاق وحدة تخزين التمهيد أو الكتلة بمثيل حسابي من واجهة سطر الأوامر (CLI) أمرًا مباشرًا، ولا يتطلب سوى معرفات وحدة التخزين والمثيل:

oci compute volume-attachment attach --type paravirtualized --instance-id <instance_ocid>  --volume-id <volume_ocid>  

بناء على مرجع السياسة, الأذونات المطلوبة لـ AttachVolume هي VOLUME_WRITE, VOLUME_ATTACHMENT_CREATE، و INSTANCE_ATTACH_VOLUME. لا يلزم بالضرورة أن يكون المثيل ووحدة التخزين في نفس الحجرة.

مرفق وحدة التخزين هو أحد موارد OCI الموجودة في حجرة مثيل الحساب ويصف مرفق وحدة تخزين لمثيل حساب. يتم تطبيق الأذونات على المقصورة (وشجرة المقصورة الخاصة بها). لذلك، VOLUME_ATTACHMENT_CREATE و INSTANCE_ATTACH_VOLUME مطلوبة في نطاق حجرة المثيل (في هذه الحالة، حجرة المهاجم) و VOLUME_WRITE مطلوب في نطاق حجرة المجلد (مقصورة الضحية).

ومع ذلك، كما اكتشفنا، كانت هناك فجوة في التحقق من صحة VOLUME_WRITE إذن عند إرفاق مجلد، مما جعل من الممكن إرفاق أي مجلد دون إذن. بالإضافة إلى ذلك، كان الإلحاق ممكنًا عبر إيجارات مختلفة: لقد تمكنا من إرفاق وحدة تخزين من إيجار واحد إلى مثيل حسابي في إيجار آخر.

تجريبي

عندما يحاول مستخدم غير مصرح به تنفيذ أي عملية على وحدة تخزين، تقوم الخدمة (بشكل صحيح) بإرجاع خطأ يشير إلى أن المستخدم يفتقر إلى الأذونات المطلوبة:

elad_gabay@cloudshell:~ (us-ashburn-1)$ oci bv volume get --volume-id ocid1.bootvolume.oc1.iad.abuwcljrybvvdsn*******************************************
ServiceError:
{
  "client_version": "Oracle-PythonSDK/2.69.0, Oracle-PythonCLI/3.10.0",
  "code": "NotAuthorizedOrNotFound",
  "logging_tips": "Please run the OCI CLI command using --debug flag to find more debug information.",
  "message": "Authorization failed or requested resource not found.",
  "opc-request-id": "DFB9SCC25*****",
  "operation_name": "get_volume",
  "request_endpoint": "GET https://iaas.us-ashburn-oraclecloud.com/20160918/volumes/ocid1.bootvolume.oc1.iad.abuwcljrybvvdsn*******************************************",
  "status": 404,
  "target_service": "blockstorage",
  "timestamp": "2022-06-07114:12:21.408280",
  "troubleshooting_tips": "See https://docs.oracle.com/iaas/Content/API/References/apierrors.htm#apierrors_404_404_notauthorizedornotfound for more information about resolving this error. If you are unable to resolve this issue, run this CLI command with --debug option and contact Oracle support and provide them the full error message."
}

الشكل 1: محاولة الوصول إلى وحدة تخزين باستخدام واجهة سطر الأوامر (CLI) دون أذونات كافية

ومع ذلك، قبل #أرفقني تمت معالجته، نجحت محاولة إرفاق وحدة تخزين بمثيل حسابي سواء كان لدى المستخدم أذونات كافية أم لا:

elad_gabay@cloudshell:~(us-ashburn-1)$ oci compute volume-attachment attach --instance-id ocid1.instance.oc1.iad.anuwcljrixjtluica******************************************* --volume-id ocid1.bootvolume.oc1.iad.abuwcljrybvvdsn3******************************************* --type paravirtualized
{
  "data": {
    "attachment-type": "paravirtualized",
    "availability-domain": "zSfH:US-ASHBURN-AD-1",
    "compartment-id": "ocid1.tenancy.oc1..aaaaaaaaote2dzazv**********************",
    "device": "null",
    "display-name": "volumeattachment20220607141228",
    "id": "ocid1.volumeattachment.oc1.iad.anuwcljrixjtluic***********************",
    "instance-id": "ocid1.instance-oc1.iad.anuwcljrixjtluica*********************",
    "is-multipath": null,
    "is-pv-encryption-in-transit-enabled":false,
    "is-read-only":false,
    "is-shareable": false,
    "iscsi-login-state": null,
    "lifecycle-state": "ATTACHING",
    "time-created": "2022-06-07T14:12:29.027000+00:00",
    "volume-id": "ocid1.bootvolume.oc1.iad.abuwcljrybvvdsn3***********************",
    },
    "etag": "992e06ff86b86a5fe732308092a55***********************************"
}

الشكل 2: تم بنجاح إرفاق نفس المجلد الذي لم يكن لدينا أذونات للوصول إليه

بمجرد إرفاق المجلد، تمكنا من عرض محتواه وتعديله.

المتطلبات التفصيلية للاستغلال #أرفقني كان:

  • يجب أن يعرف المهاجم OCID الخاص بالحجم المستهدف —على الرغم من أن OCIDs عمومًا خاصة، إلا أنه لا يتم التعامل معها على أنها أسرار، لذلك يمكن تحقيق ذلك بسهولة.

  • يجب أن يكون مثيل الحوسبة الخاص بالمهاجم في نفس نطاق التوفر (AD) مثل وحدة التخزين المستهدفة—يمكن استيفاء هذا الشرط بسهولة نظرًا لأن عدد مناطق التوفر صغير نسبيًا (يصل إلى ثلاث مناطق في بعض المناطق) وبالتالي يمكن تعداده.

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

تحليل المخاطر

عندما يحصل أحد المهاجمين على حق الوصول للقراءة إلى وحدات التخزين الخاصة بك، فإن الخطر الرئيسي هو اختراق البيانات. قد تحتوي المجلدات على معلومات حساسة مثل معلومات التعريف الشخصية (PII) والأسرار والمزيد.

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

تشمل مسارات الهجوم المحتملة ما يلي:

  • الوصول عبر المستأجرين —السيناريو الأكثر تأثيرًا هو إذا تمكن المهاجم من الحصول على معرفات OCID لوحدات التخزين في مستأجر بعيد. #أرفقني كان من الممكن استخدامها للوصول الأولي إلى بيئة الضحية من خلال قراءة المعلومات الحساسة والأسرار طويلة الأمد التي تم تخزينها في المجلدات المستهدفة. بالإضافة إلى ذلك، كان من الممكن أن يتلاعب المهاجم بوحدات تخزين الكتل ووحدات تخزين التمهيد الموجودة بطريقة توفر تنفيذ تعليمات برمجية للمهاجم عندما يتم تركيب وحدات التخزين على مثيلات حسابية.

نحن نعتبر كلا المسارين المحتملين للهجوم ممكنًا تمامًا نظرًا لأن معرفات OCID لا يتم التعامل معها بشكل عام على أنها أسرار. يمكن العثور على العديد من معرفات OCID لكل من وحدات تخزين الكتل وأحجام التمهيد لبيئات مختلفة، بما في ذلك تلك الخاصة بالشركات الكبرى، من خلال بحث بسيط عبر الإنترنت.

الشكل 3: تم العثور على معرف وحدة تخزين OCI (OCID) في أحد مشاريع GitHub العامة لشركة Oracle

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

الجدول الزمني للاكتشاف والكشف

عند اكتشاف #أرفقني، لقد كشفنا على الفور عن النتائج التي توصلنا إليها لشركة Oracle، التي قامت بالتحقيق في هذه المشكلة وإصلاحها في أقل من 24 ساعة. كنا سعداء بالتعاون مع هذا الفريق المحترف.

  • 6 يونيو 2022 – اكتشف Wiz الثغرة الأمنية

  • 9 يونيو 2022 – تم الإبلاغ عن الثغرات الأمنية إلى Oracle

  • 10 يونيو 2022 – تقر شركة Oracle بالتقرير

  • 10 يونيو 2022 – تم إصلاح الثغرة الأمنية

دروس لمنشئي السحابة والمدافعين عن السحابة

يعد التحقق غير الكافي من أذونات المستخدم فئة أخطاء شائعة بين موفري الخدمات السحابية. أفضل طريقة لتحديد مثل هذه المشكلات هي إجراء مراجعات صارمة للتعليمات البرمجية واختبارات شاملة لكل واجهة برمجة تطبيقات حساسة في مرحلة التطوير. شاركت Oracle معنا أنها تستخدم تقنية تحليل التعليمات البرمجية الثابتة لاكتشاف مثل هذه المشكلات قيد التطوير بالفعل والتحقيق في المشكلات المعروفة والمبلغ عنها لضمان عدم تكرار النمط الإشكالي في مكان آخر في قاعدة التعليمات البرمجية.

نوصي أيضًا بإجراء اختبارات اختراق خاصة بالخدمة والمشاركة في برامج مكافآت الأخطاء، حيث أثبتت هذه البرامج فعاليتها في حل هذه الأنواع من المشكلات.

تتبع نقاط الضعف السحابية

#أرفقني هي الأحدث في سلسلة طويلة من ثغرات العزل السحابي التي اكتشفها مجتمع البحث: وتشمل الأمثلة الحديثة “ExtraReplica” – ثغرة أمنية في قاعدة بيانات المستأجرين المشتركين في Azure PostgreSQL اكتشفه أيضًا بحث Wiz، و ثغرة أمنية عبر المستأجرين في Azure Cloud Shell اكتشفه تشين كوهين من فريق اختبار القلم في موقع eBay.

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



شاركها.
اترك تعليقاً