
Google के Osconfig में पहचाने गए विशेषाधिकार वृद्धि दोष के संबंध में प्रूफ ऑफ कॉन्सेप्ट।
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 कहा जाता है, और समर्थित recipe प्रकारों में से एक शेल स्क्रिप्ट निष्पादित करना है। ऐसी recipe को संसाधित करते समय, एजेंट - जो पूर्ण क्षमताओं के साथ root के रूप में चल रहा है - फ़ाइलों को अस्थायी रूप से /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)
OS: डिफ़ॉल्ट Debian 10 इमेज के साथ GCE का f1-micro इंस्टेंस।
Google ने अनुमानित निर्देशिका के बजाय यादृच्छिक अस्थायी निर्देशिका का उपयोग करना शुरू कर दिया।
फिक्स्ड संस्करण 2020-09-05 को जारी किया गया था। आपको अपने OS पैकेज को अपग्रेड करने की आवश्यकता है।
यह एक स्थानीय विशेषाधिकार-वृद्धि भेद्यता है, इसलिए इसका शोषण वह व्यक्ति कर सकता है जिसके पास पहले से प्रभावित GCE VMs पर कोड निष्पादन अधिकार हैं:
किसी के पास कम विशेषाधिकार वाला शेल हो
कोई हमलावर पहले से समझौता किए गए नेटवर्क सेवा के माध्यम से
मुख्य बिंदु "बेस डायरेक्टरी" (/tmp/osconfig_software_recipes) पर कब्ज़ा करना है, जो संभव है यदि वर्तमान सत्र में अभी तक कोई recipe संसाधित नहीं हुई है, जिसका अर्थ है:
अब तक कोई भी recipe निष्पादित नहीं हुई है (उदाहरण के लिए, osconfig सुविधा उपयोग में नहीं थी, लेकिन बाद में किसी समय होगी)
VM को रिबूट किया गया है और सभी recipes db (/var/lib/google/osconfig_recipedb) में मौजूद हैं, लेकिन कुछ पॉलिसी अपडेट बाद में किसी समय निष्पादित किए जाते हैं
हालाँकि यह विशेष संयोजन वास्तव में शोषण की संभावना को कम करता है, मुझे लगता है कि यहाँ /tmp में कार्य निर्देशिका का उपयोग करना सुरक्षित नहीं है। (Google ने भी ऐसा ही सोचा, यह समस्या तब से ठीक है।)
2020-08-07: समस्या खोजी गई और रिपोर्ट की गई
2020-08-08: समस्या का Google द्वारा ट्राइएज किया गया, प्राथमिकता P1 में बदली गई
2020-08-10: समस्या Google द्वारा पुष्टि की गई ("🎉 शाबाश!"), प्राथमिकता 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