
إثبات المفهوم حول ثغرة تصعيد الامتيازات التي تم تحديدها في Osconfig من Google
عملية google_osconfig_agent هي أحد مكوّنات أدوات GoogleCloudPlatform (https://github.com/GoogleCloudPlatform/osconfig) الخاصة بها، وتعمل على كل جهاز افتراضي (VM) بشكل افتراضي. يعمل الوكيل بصلاحيات الجذر (root) وهو مسؤول عن بعض الخدمات التي يتحكم فيها المستخدم، بما في ذلك OS config (https://cloud.google.com/compute/docs/os-config-management)، وهو نوع من تنفيذ إعداد الحالة المطلوبة القائم على الاستطلاع من Google.
يستضيف هذا المستودع عرضاً توضيحياً لثغرة تصعيد صلاحيات حددتها في التنفيذ (وتم إصلاحها من قبل Google منذ ذلك الحين).
المهام التي سيتم تنفيذها تسمى recipes، وأحد أنواع recipes المدعومة هو تنفيذ سكربت شل. أثناء معالجة مثل هذا الـ recipe، يقوم الوكيل - الذي يعمل بصلاحيات الجذر بكامل الصلاحيات - بحفظ الملفات مؤقتاً في دليل /tmp، ثم يقوم بتنفيذها. يمكن اختطاف الدليل الذي ينشئه الوكيل وبالتالي يمكن استبدال السكربت الذي سيتم تنفيذه، مما يؤدي فعلياً إلى رفع الصلاحيات محلياً.
gcloud services enable osconfig.googleapis.com
gcloud compute project-info add-metadata --metadata=enable-osconfig=TRUE
# cat /tmp/poc.txt
cat: /tmp/poc.txt: No such file or directory
# pip3 install inotify_simple
# chroot --userspec=nobody:nogroup / /home/radimre83/osconfig-privesc-poc3.py
Running as 65534
calling inotify.read()
...
gcloud beta compute os-config guest-policies create test-policy-poc --file="C:\Projects\gcp-app-engine-experiments\compute-engine\osconfig-policy-poc.yaml"
Event(wd=1, mask=1073742080, cookie=0, name='recipe-runscript')
New recipe: recipe-runscript2, rename: /tmp/osconfig_software_recipes.mali1596821311/xxx-recipe-name -> /tmp/osconfig_software_recipes.mali1596821311/recipe-runscript
New rundir recipe-runscript2, rename: /tmp/osconfig_software_recipes.mali1596821311/recipe-runscript/xxx-rundir -> /tmp/osconfig_software_recipes.mali1596821311/recipe-runscript/run_1596821899000709826
# cat /tmp/poc.txt
uid=0(root) gid=0(root) groups=0(root),1000(google-sudoers)
نظام التشغيل: مثيل f1-micro من GCE مع صورة Debian 10 الافتراضية.
تحولت Google إلى استخدام دليل مؤقت عشوائي بدلاً من دليل يمكن التنبؤ به.
تم إصدار النسخة المصلحة في 2020-09-05. تحتاج إلى ترقية حزمة نظام التشغيل لديك.
هذه ثغرة تصعيد صلاحيات محلية، لذا يمكن استغلالها من قبل شخص لديه بالفعل حقوق تنفيذ أكواد على أجهزة GCE الافتراضية المتأثرة:
شخص لديه شل بصلاحيات منخفضة
مهاجم عبر خدمة شبكة تم اختراقها بالفعل
النقطة الأساسية هي السيطرة على «الدليل الأساسي» (/tmp/osconfig_software_recipes)، وهو أمر ممكن إذا لم تتم معالجة أي recipes في الجلسة الحالية بعد، مما يعني:
لم يتم تنفيذ أي recipes على الإطلاق حتى الآن (على سبيل المثال، ميزة osconfig لم تكن قيد الاستخدام، ولكنها ستُستخدم في وقت لاحق)
تمت إعادة تشغيل الجهاز الافتراضي وجميع الـ recipes موجودة في قاعدة البيانات (/var/lib/google/osconfig_recipedb)، ولكن يتم تنفيذ بعض تحديثات السياسات في وقت لاحق
في حين أن هذا المزيج الخاص يقلل بالفعل من احتمالية الاستغلال، أعتقد أن استخدام دليل عمل في /tmp ليس آمناً هنا. (وكذلك لم تعتبره Google آمناً، فقد تم إصلاح هذه المشكلة منذ ذلك الحين.)
2020-08-07: تم اكتشاف المشكلة والإبلاغ عنها
2020-08-08: تم فرز المشكلة من قبل Google، وتغيرت الأولوية إلى P1
2020-08-10: تم تأكيد المشكلة من قبل Google (🎉 Nice catch!)، وتغيرت الأولوية إلى P2، والخطورة إلى S2
2020-08-14: تحديث حول عملية VRP
2020-09-05: تم إصلاح المشكلة من قبل Google
Imre Rad
https://github.com/GoogleCloudPlatform/osconfig
https://issuetracker.google.com/issues/163147689
https://github.com/GoogleCloudPlatform/osconfig/commit/fa7e4ba5ee85be212ffbac66d96862c792bd270c