macOS Office Sandbox Bypasses
Word Sandbox bypass via Launch Agents
यह एप्लिकेशन com.apple.security.temporary-exception.sbpl
अधिकार का उपयोग करके एक कस्टम सैंडबॉक्स का उपयोग करता है और यह कस्टम सैंडबॉक्स कहीं भी फ़ाइलें लिखने की अनुमति देता है जब तक फ़ाइल का नाम ~$
से शुरू होता है: (require-any (require-all (vnode-type REGULAR-FILE) (regex #"(^|/)~$[^/]+$")))
इसलिए, बचने के लिए ~/Library/LaunchAgents/~$escape.plist
में एक plist
LaunchAgent लिखना उतना ही आसान था।
Word Sandbox bypass via Login Items and zip
याद रखें कि पहले के बचाव से, Word मनमाने फ़ाइलें लिख सकता है जिनका नाम ~$
से शुरू होता है, हालांकि पिछले कमजोरियों के पैच के बाद /Library/Application Scripts
या /Library/LaunchAgents
में लिखना संभव नहीं था।
यह पता चला कि सैंडबॉक्स के भीतर एक Login Item (ऐप्स जो उपयोगकर्ता के लॉग इन करने पर निष्पादित होंगे) बनाना संभव है। हालाँकि, ये ऐप्स तब तक निष्पादित नहीं होंगे जब तक कि वे नोटराइज्ड न हों और आर्ग्स जोड़ना संभव नहीं है (इसलिए आप केवल bash
का उपयोग करके एक रिवर्स शेल नहीं चला सकते)।
पिछले सैंडबॉक्स बायपास से, Microsoft ने ~/Library/LaunchAgents
में फ़ाइलें लिखने का विकल्प अक्षम कर दिया। हालाँकि, यह पता चला कि यदि आप एक ज़िप फ़ाइल को Login Item के रूप में रखते हैं तो Archive Utility
बस इसे उसके वर्तमान स्थान पर अनज़िप कर देगा। इसलिए, चूंकि डिफ़ॉल्ट रूप से ~/Library
से LaunchAgents
फ़ोल्डर नहीं बनाया गया है, इसलिए LaunchAgents/~$escape.plist
में एक plist को ज़िप करना और ज़िप फ़ाइल को ~/Library
में रखना संभव था ताकि जब इसे अनकंप्रेस किया जाए तो यह स्थायी गंतव्य तक पहुँच जाए।
Word Sandbox bypass via Login Items and .zshenv
(याद रखें कि पहले के बचाव से, Word मनमाने फ़ाइलें लिख सकता है जिनका नाम ~$
से शुरू होता है)।
हालाँकि, पिछले तकनीक में एक सीमा थी, यदि फ़ोल्डर ~/Library/LaunchAgents
मौजूद है क्योंकि कुछ अन्य सॉफ़्टवेयर ने इसे बनाया है, तो यह विफल हो जाएगा। इसलिए इसके लिए एक अलग Login Items श्रृंखला का पता लगाया गया।
एक हमलावर फ़ाइलें .bash_profile
और .zshenv
बना सकता है जिसमें निष्पादित करने के लिए पेलोड हो और फिर उन्हें ज़िप कर सकता है और ज़िप को पीड़ित के उपयोगकर्ता फ़ोल्डर में लिख सकता है: ~/~$escape.zip
।
फिर, ज़िप फ़ाइल को Login Items में जोड़ें और फिर Terminal
ऐप। जब उपयोगकर्ता फिर से लॉगिन करता है, तो ज़िप फ़ाइल उपयोगकर्ता फ़ाइल में अनकंप्रेस की जाएगी, .bash_profile
और .zshenv
को ओवरराइट करते हुए और इसलिए, टर्मिनल इनमें से एक फ़ाइल को निष्पादित करेगा (इस पर निर्भर करते हुए कि bash या zsh का उपयोग किया गया है)।
Word Sandbox Bypass with Open and env variables
सैंडबॉक्स किए गए प्रक्रियाओं से अन्य प्रक्रियाओं को open
उपयोगिता का उपयोग करके बुलाना अभी भी संभव है। इसके अलावा, ये प्रक्रियाएँ अपने स्वयं के सैंडबॉक्स के भीतर चलेंगी।
यह पता चला कि ओपन उपयोगिता में --env
विकल्प है जिससे एक ऐप को विशिष्ट env वेरिएबल्स के साथ चलाया जा सकता है। इसलिए, यह संभव था कि सैंडबॉक्स के भीतर एक फ़ोल्डर में .zshenv
फ़ाइल बनाई जाए और open
का उपयोग करके --env
के साथ HOME
वेरिएबल को उस फ़ोल्डर में सेट किया जाए, जिससे वह Terminal
ऐप खोले, जो .zshenv
फ़ाइल को निष्पादित करेगा (किसी कारण से __OSINSTALL_ENVIROMENT
वेरिएबल सेट करना भी आवश्यक था)।
Word Sandbox Bypass with Open and stdin
open
उपयोगिता ने --stdin
पैरामीटर का भी समर्थन किया (और पिछले बायपास के बाद --env
का उपयोग करना संभव नहीं था)।
बात यह है कि भले ही python
Apple द्वारा साइन किया गया हो, यह quarantine
विशेषता वाली स्क्रिप्ट को निष्पादित नहीं करेगा। हालाँकि, इसे stdin से एक स्क्रिप्ट पास करना संभव था ताकि यह न देखे कि यह क्वारंटाइन में था या नहीं:
एक
~$exploit.py
फ़ाइल छोड़ें जिसमें मनमाने Python कमांड हों।open
–stdin='~$exploit.py' -a Python
चलाएँ, जो Python ऐप को हमारे छोड़े गए फ़ाइल के मानक इनपुट के रूप में चलाता है। Python खुशी-खुशी हमारे कोड को चलाता है, और चूंकि यह launchd का एक चाइल्ड प्रोसेस है, यह Word के सैंडबॉक्स नियमों से बंधा नहीं है।
Last updated