macOS TCC Bypasses
कार्यक्षमता के अनुसार
लेखन बायपास
यह कोई बायपास नहीं है, यह बस TCC काम करने का तरीका है: यह लेखन से सुरक्षित नहीं है। यदि टर्मिनल किसी उपयोगकर्ता के डेस्कटॉप को पढ़ने का अधिकार नहीं है तो फिर भी उसमें लिख सकता है:
विकसितकर्ता ऐप को इसे पढ़ने की अनुमति देने के लिए नए फ़ाइल में विस्तारित विशेषता com.apple.macl
जोड़ी जाती है।
TCC ClickJacking
TCC प्रॉम्प्ट पर एक विंडो रखना संभव है ताकि उपयोगकर्ता इसे ध्यान न देकर स्वीकार करें। आप TCC-ClickJacking** में एक PoC** देख सकते हैं।
विचित्र नाम से TCC अनुरोध
हमलावर किसी भी नाम (जैसे Finder, Google Chrome...) के साथ ऐप्स बना सकता है और इसे कुछ TCC सुरक्षित स्थान की अनुमति के लिए अनुरोध करने के लिए Info.plist
में डाल सकता है। उपयोगकर्ता को लगेगा कि वैध एप्लिकेशन ही इस अनुमति का अनुरोध कर रहा है।
इसके अतिरिक्त, वैध ऐप्लिकेशन को डॉक से हटाकर नकली ऐप को डालना संभव है, ताकि जब उपयोगकर्ता नकली ऐप पर क्लिक करता है (जो समान आइकन का उपयोग कर सकता है), तो यह वैध ऐप को बुलाएगा, TCC अनुमतियाँ मांगेगा और एक मैलवेयर को क्रियान्वित करेगा, जिससे उपयोगकर्ता को यह विश्वास होगा कि वैध एप्लिकेशन ने इस अनुमति का अनुरोध किया है।
अधिक जानकारी और PoC:
pagemacOS Privilege EscalationSSH बायपास
SSH के माध्यम से डिफ़ॉल्ट रूप से "फुल डिस्क एक्सेस" होता था। इसे अक्षम करने के लिए आपको इसे सूचीबद्ध करना होगा लेकिन अक्षम करना होगा (सूची से हटाने से ये अधिकार हट नहीं जाएंगे):
यहाँ आपको दिखाया गया है कि कैसे कुछ मैलवेयर्स इस सुरक्षा को बायपास कर सकते हैं:
ध्यान दें कि अब, SSH को सक्षम करने के लिए आपको फुल डिस्क एक्सेस की आवश्यकता है।
एक्सटेंशन्स का संभालना - CVE-2022-26767
com.apple.macl
विशेषता फ़ाइलों को एक निश्चित एप्लिकेशन को पढ़ने की अनुमति देने के लिए दी जाती है। यह विशेषता जब एक ऐप पर फ़ाइल ड्रैग एंड ड्रॉप करते हैं, या जब एक उपयोगकर्ता एक फ़ाइल को डबल-क्लिक करके डिफ़ॉल्ट एप्लिकेशन के साथ खोलता है।
इसलिए, एक उपयोगकर्ता एक दुरुपयोगी ऐप को पंजीकृत कर सकता है ताकि वह सभी एक्सटेंशन्स का संभालन करे और लॉन्च सेवाओं को कॉल करने के लिए लॉन्च सेवाओं को कॉल कर सकता है किसी भी फ़ाइल को खोलें (ताकि दुरुपयोगी फ़ाइल को पढ़ने की अनुमति दी जाए)।
iCloud
com.apple.private.icloud-account-access
अधिकार से com.apple.iCloudHelper
XPC सेवा के साथ संचार करना संभव है जो iCloud टोकन प्रदान करेगा।
iMovie और Garageband में इस अधिकार था और अन्य भी थे।
उस अधिकार से iCloud टोकन प्राप्त करने के लिए उस अधिकार से अधिक जानकारी के लिए टॉक देखें: #OBTS v5.0: "What Happens on your Mac, Stays on Apple's iCloud?!" - Wojciech Regula
kTCCServiceAppleEvents / Automation
kTCCServiceAppleEvents
अनुमति वाले एक ऐप्प अन्य ऐप्स को नियंत्रित कर सकता है। इसका मतलब है कि यह अन्य ऐप्स को दी गई अनुमतियों का दुरुपयोग कर सकता है।
एप्पल स्क्रिप्ट के बारे में अधिक जानकारी के लिए देखें:
pagemacOS Apple Scriptsउदाहरण के लिए, यदि एक ऐप iTerm
पर Automation अनुमति है, उदाहरण के लिए इस उदाहरण में Terminal
के पास iTerm पर पहुंच है:
iTerm पर
जिसके पास FDA नहीं है, वह टर्मिनल, जो इसे है, को कॉल कर सकता है और क्रियाएँ करने के लिए उसका उपयोग कर सकता है:
Finder के ऊपर
या अगर किसी एप्लिकेशन को Finder के ऊपर एक्सेस है, तो यह एक स्क्रिप्ट हो सकती है जैसे यह है:
ऐप व्यवहार के अनुसार
CVE-2020–9934 - TCC
उपयोगकर्ता क्षेत्र tccd डेमन जो HOME
env चर का उपयोग कर रहा है ताकि TCC उपयोगकर्ता डेटाबेस तक पहुंच सके: $HOME/Library/Application Support/com.apple.TCC/TCC.db
इस Stack Exchange पोस्ट के अनुसार और क्योंकि TCC डेमन वर्तमान उपयोगकर्ता क्षेत्र के भीतर launchd
के माध्यम से चल रहा है, इसे सभी पर्यावरण चर को उसे पारित किया जा सकता है।
इसलिए, एक हमलावर launchctl
में $HOME
पर्यावरण चर को एक नियंत्रित निर्देशिका पर पहुंचाने के लिए सेट कर सकता है, TCC डेमन को पुनः आरंभ कर सकता है, और फिर सीधे TCC डेटाबेस को संशोधित कर सकता है ताकि यह अंत उपयोगकर्ता से कभी पूछता न हो।
PoC:
CVE-2021-30761 - नोट्स
नोट्स को TCC सुरक्षित स्थानों तक पहुंच था लेकिन जब एक नोट बनाया जाता है तो यह एक सुरक्षित स्थान में नहीं बनाया जाता है। इसलिए, आप नोट्स से कह सकते थे कि एक सुरक्षित फ़ाइल को एक नोट में कॉपी करें (इसलिए एक सुरक्षित स्थान में) और फिर फ़ाइल तक पहुंचें:
CVE-2021-30782 - स्थानांतरण
बाइनरी /usr/libexec/lsd
जिसमें पुस्तकालय libsecurity_translocate
थी, उसमें entitlement com.apple.private.nullfs_allow
था जिसने इसे nullfs माउंट बनाने की अनुमति दी और entitlement com.apple.private.tcc.allow
था जिसमें kTCCServiceSystemPolicyAllFiles
के साथ हर फ़ाइल तक पहुंचने की अनुमति थी।
"पुस्तकालय" में quarantine attribute जोड़ना संभव था, com.apple.security.translocation
XPC सेवा को कॉल करना था और फिर यह पुस्तकालय को $TMPDIR/AppTranslocation/d/d/Library
मैप कर देता था जहां पुस्तकालय के सभी दस्तावेज़ तक पहुंचा जा सकता था।
CVE-2023-38571 - संगीत और टीवी
संगीत
में एक दिलचस्प सुविधा थी: जब यह चल रहा होता था, तो यह ~/Music/Music/Media.localized/Automatically Add to Music.localized
में ड्रॉप की गई फ़ाइलों को उपयोगकर्ता के "मीडिया पुस्तकालय" में आयात कर लेता था। इसके अतिरिक्त, यह कुछ इस प्रकार कॉल करता था: rename(a, b);
जहां a
और b
थे:
a = "~/Music/Music/Media.localized/Automatically Add to Music.localized/myfile.mp3"
b = "~/Music/Music/Media.localized/Automatically Add to Music.localized/Not Added.localized/2023-09-25 11.06.28/myfile.mp3
यह rename(a, b);
व्यवहार एक रेस कंडीशन के लिए सुरक्षित नहीं था, क्योंकि संभव था कि "Automatically Add to Music.localized" फ़ोल्डर में एक नकली TCC.db फ़ाइल डाली जा सकती थी और फिर जब नया फ़ोल्डर (b) बनाया जाता था तो फ़ाइल को कॉपी करने, हटाने और इसे ~/Library/Application Support/com.apple.TCC
/ की ओर पॉइंट करने के लिए उसे दिखाया जा सकता था।
SQLITE_SQLLOG_DIR - CVE-2023-32422
यदि SQLITE_SQLLOG_DIR="path/folder"
बस यह मतलब है कि किसी भी खुली db को उस पथ में कॉपी किया जाएगा। इस CVE में इस नियंत्रण का दुरुपयोग किया गया था ताकि एक प्रक्रिया द्वारा खोली जाने वाली SQLite डेटाबेस के अंदर लिखा जा सके, और फिर SQLITE_SQLLOG_DIR
का दुरुपयोग करके फ़ाइल नाम में सिमलिंक लगाया जा सकता था ताकि जब वह डेटाबेस खोला जाता, तो उपयोगकर्ता का TCC.db ओवरराइट हो जाता था।
अधिक जानकारी लेख में और टॉक में.
SQLITE_AUTO_TRACE
यदि पर्यावरण चर SQLITE_AUTO_TRACE
सेट किया गया है, तो पुस्तकालय libsqlite3.dylib
सभी SQL क्वेरी को लॉग करना शुरू कर देगा। कई एप्लिकेशन इस पुस्तकालय का उपयोग करते थे, इसलिए उनकी सभी SQLite क्वेरी को लॉग करना संभव था।
कई Apple एप्लिकेशन ने TCC सुरक्षित जानकारी तक पहुंचने के लिए इस पुस्तकालय का उपयोग किया।
MTL_DUMP_PIPELINES_TO_JSON_FILE - CVE-2023-32407
यह एनवी वेरिएबल Metal
फ्रेमवर्क द्वारा उपयोग किया जाता है जो विभिन्न कार्यक्रमों की आवश्यकता है, जिसमें सबसे महत्वपूर्ण रूप से Music
शामिल है, जिसमें FDA है।
निम्नलिखित सेट करना: MTL_DUMP_PIPELINES_TO_JSON_FILE="पथ/नाम"
। यदि पथ
एक मान्य निर्देशिका है, तो बग ट्रिगर होगा और हम fs_usage
का उपयोग करके कार्यक्रम में क्या हो रहा है देख सकते हैं:
एक फ़ाइल
open()
होगी, जिसेपथ/.dat.nosyncXXXX.XXXXXX
(X यादृच्छिक है) कहा जाएगाएक या एक से अधिक
write()
फ़ाइल में सामग्री लिखेंगे (हम इसे नियंत्रित नहीं करते)पथ/.dat.nosyncXXXX.XXXXXX
कोrename()
किया जाएगापथ/नाम
यह एक अस्थायी फ़ाइल लेखन है, जिसे एक rename(old, new)
जो सुरक्षित नहीं है।
यह सुरक्षित नहीं है क्योंकि इसे पुराने और नए पथ को अलग-अलग समाधान करना होता है, जो कुछ समय लगा सकता है और एक रेस स्थिति के लिए विकल्प हो सकता है। अधिक जानकारी के लिए आप xnu
फ़ंक्शन renameat_internal()
की जांच कर सकते हैं।
इसलिए, मौजूदा फ़ोल्डर से रीनेम कर रहे एक विशेषाधिकारित प्रक्रिया के लिए, आप एक RCE जीत सकते हैं और इसे एक विभिन्न फ़ाइल तक पहुँचा सकते हैं या, जैसे कि इस CVE में, विशेषाधिकृत ऐप द्वारा बनाई गई फ़ाइल को खोल सकते हैं और FD स्टोर कर सकते हैं।
यदि रीनेम आपके नियंत्रण किए गए फ़ोल्डर से गुजरता है, जब आपने स्रोत फ़ाइल को संशोधित किया हो या उसके लिए एक FD हो, तो आप गंतव्य फ़ाइल (या फ़ोल्डर) को संकेतिक करने के लिए एक सिमलिंक करने के लिए इस्तेमाल कर सकते हैं, ताकि आप जब चाहें लिख सकें।
यह CVE में हमला था: उदाहरण के लिए, उपयोगकर्ता के TCC.db
को ओवरराइट करने के लिए हम सकते हैं:
/Users/hacker/ourlink
बनाएं जो/Users/hacker/Library/Application Support/com.apple.TCC/
को पॉइंट करता हैनिर्देशिका
/Users/hacker/tmp/
बनाएंMTL_DUMP_PIPELINES_TO_JSON_FILE=/Users/hacker/tmp/TCC.db
सेट करेंइस env var के साथ
Music
चलाकर बग को ट्रिगर करें/Users/hacker/tmp/.dat.nosyncXXXX.XXXXXX
काopen()
को लपेटें (X यादृच्छिक है)।यहाँ हम इस फ़ाइल को लिखने के लिए भी
open()
करते हैं, और फ़ाइल डिस्क्रिप्टर को पकड़ते हैं/Users/hacker/tmp
को/Users/hacker/ourlink
एक लूप में एटॉमिकली स्विच करेंहम इसे अधिक संभावना है कि हमारे सफल होने की अवस्था को अधिकतम करने के लिए यह करते हैं क्योंकि रेस विंडो बहुत पतली है, लेकिन हारने का रेस का खाता नजरअंदाज करने योग्य है
थोड़ी देर प्रतीक्षा करें
जांचें कि क्या हमें भाग्यशाली हो गया है
अगर नहीं, फिर से शीर्ष से चलाएं
अधिक जानकारी के लिए https://gergelykalman.com/lateralus-CVE-2023-32407-a-macos-tcc-bypass.html में देखें।
अब, यदि आप एनवी वेरिएबल MTL_DUMP_PIPELINES_TO_JSON_FILE
का उपयोग करने का प्रयास करेंगे तो ऐप्स लॉन्च नहीं होंगे
Apple Remote Desktop
रूट के रूप में आप इस सेवा को सक्षम कर सकते हैं और ARD एजेंट को पूरी डिस्क एक्सेस होगा जिसे फिर उपयोगकर्ता द्वारा दुरुपयोग किया जा सकता है ताकि वह एक नया TCC उपयोगकर्ता डेटाबेस कॉपी कर सके।
NFSHomeDirectory द्वारा
TCC उपयोगकर्ता की होम फ़ोल्डर में एक डेटाबेस का उपयोग करता है ताकि उपयोगकर्ता को विशेष संसाधनों तक पहुँच का नियंत्रण हो। $HOME/Library/Application Support/com.apple.TCC/TCC.db में। इसलिए, यदि उपयोगकर्ता $HOME env वेरिएबल के साथ TCC को पुनः आरंभ करने में सफल होता है जो एक विभिन्न फ़ोल्डर को पॉइंट करता है, तो उपयोगकर्ता /Library/Application Support/com.apple.TCC/TCC.db में एक नया TCC डेटाबेस बना सकता है और TCC को किसी भी ऐप को किसी भी TCC अनुमति को प्रदान करने के लिए धोखा दे सकता है।
ध्यान दें कि Apple उपयोगकर्ता प्रोफ़ाइल में संग्रहित सेटिंग का उपयोग करता है NFSHomeDirectory
विशेषता के लिए $HOME
के मान के लिए, इसलिए यदि आप इस मान को संशोधित करने की अनुमति वाले अनुप्रयोग को कंप्रमाइज करते हैं (kTCCServiceSystemPolicySysAdminFiles
), तो आप इस विकल्प को एक TCC बायपास के साथ आस्त्रगत कर सकते हैं।
CVE-2021-30970 - Powerdir
पहला POC dsexport और dsimport का उपयोग करता है उपयोगकर्ता के होम फ़ोल्डर के लिए कोड डालने और उसके TCC विशेषाधिकारों का दुरुपयोग करने के लिए।
लक्षित ऐप के लिए csreq ब्लॉब प्राप्त करें।
आवश्यक एक्सेस और csreq ब्लॉब के साथ एक नकली TCC.db फ़ाइल रखें।
dsexport के साथ उपयोगकर्ता के डायरेक्टरी सेवाओं एंट्री को निर्यात करें।
उपयोगकर्ता के होम डायरेक्टरी को बदलने के लिए डायरेक्टरी सेवाओं एंट्री में परिवर्तन करें।
dsimport के साथ संशोधित डायरेक्टरी सेवाओं एंट्री को आयात करें।
उपयोगकर्ता का tccd रोकें और प्रक्रिया पुनः आरंभ करें।
दूसरा POC /usr/libexec/configd
का उपयोग करता था जिसमें com.apple.private.tcc.allow
था जिसमें मान kTCCServiceSystemPolicySysAdminFiles
था।
यदि हमें configd
को -t
विकल्प के साथ चलाने की संभावना थी, तो हम एक कस्टम बंडल को लोड कर सकते थे। इसलिए, उत्पाद के होम डायरेक्टरी को बदलने के लिए configd
कोड इंजेक्शन के साथ dsexport
और dsimport
विधि की जगह बदल दी गई।
अधिक जानकारी के लिए मूल रिपोर्ट देखें।
प्रक्रिया इंजेक्शन द्वारा
प्रक्रिया में कोड डालने और इसके TCC विशेषाध
CVE-2020-29621 - Coreaudiod
बाइनरी /usr/sbin/coreaudiod
के entitlements com.apple.security.cs.disable-library-validation
और com.apple.private.tcc.manager
थे। पहला कोड इंजेक्शन की अनुमति देना और दूसरा इसे TCC को प्रबंधित करने की अनुमति देना।
यह बाइनरी /Library/Audio/Plug-Ins/HAL
फ़ोल्डर से तीसरे पक्ष के प्लग-इन्स लोड करने की अनुमति देती थी। इसलिए, इस PoC के साथ एक प्लगइन लोड करना और TCC अनुमतियों का दुरुपयोग करना संभव था:
अधिक जानकारी के लिए मूल रिपोर्ट देखें।
डिवाइस अबस्ट्रैक्शन लेयर (DAL) प्लग-इन्स
कोर मीडिया I/O के माध्यम से कैमरा स्ट्रीम खोलने वाले सिस्टम एप्लिकेशन (ऐप्स जिनमें kTCCServiceCamera
है) प्रक्रिया में इन प्लगइंस को लोड करते हैं जो /Library/CoreMediaIO/Plug-Ins/DAL
में स्थित हैं (SIP सीमित नहीं है)।
वहां एक लाइब्रेरी स्टोर करना जिसमें सामान्य कंस्ट्रक्टर है, कोड इंजेक्ट करने के लिए काम करेगा।
कई Apple एप्लिकेशन इसके लिए संक्षेपित थे।
फ़ायरफ़ॉक्स
फ़ायरफ़ॉक्स एप्लिकेशन के पास com.apple.security.cs.disable-library-validation
और com.apple.security.cs.allow-dyld-environment-variables
एंटाइटलमेंट्स थे:
CVE-2020-10006
बाइनरी /system/Library/Filesystems/acfs.fs/Contents/bin/xsanctl
में com.apple.private.tcc.allow
और com.apple.security.get-task-allow
entitlements थे, जिससे प्रक्रिया में कोड इंजेक्ट करने और TCC विशेषाधिकारों का उपयोग करने की अनुमति थी।
CVE-2023-26818 - Telegram
Telegram में com.apple.security.cs.allow-dyld-environment-variables
और com.apple.security.cs.disable-library-validation
entitlements थे, इसलिए इसका दुरुपयोग करना संभव था जैसे कैमरा के साथ रिकॉर्डिंग जैसे अनुमतियों तक पहुंचना। आप writeup में पेडलोड खोज सकते हैं।
ध्यान दें कि एक कस्टम plist इस लाइब्रेरी को इंजेक्ट करने के लिए बनाया गया था और launchctl
का उपयोग इसे लॉन्च करने के लिए किया गया था:
खुले आमंत्रण के द्वारा
सैंडबॉक्स के बीच open
को आमंत्रित करना संभव है
टर्मिनल स्क्रिप्ट्स
टेक पीपल द्वारा उपयोग किए जाने वाले कंप्यूटर में टर्मिनल को पूर्ण डिस्क एक्सेस (FDA) देना काफी सामान्य है। और इसका उपयोग .terminal
स्क्रिप्ट्स को इसके साथ उपयोग करना संभव है।
.terminal
स्क्रिप्ट्स ऐसे plist फ़ाइलें हैं जिसमें CommandString
कुंजी में निष्पादित करने के लिए कमांड होता है:
एक एप्लिकेशन एक टर्मिनल स्क्रिप्ट को /tmp जैसी स्थान पर लिख सकता है और इसे निम्नलिखित कमांड के साथ लॉन्च कर सकता है:
द्वारा माउंटिंग
CVE-2020-9771 - mount_apfs TCC बायपास और प्रिविलेज उन्नयन
कोई भी उपयोगकर्ता (यहाँ तक कि अन-विशेषाधिकृत उपयोगकर्ता) एक समय मशीन स्नैपशॉट बना सकता है और माउंट कर सकता है और उस स्नैपशॉट के सभी फ़ाइलों तक पहुँच सकता है।
केवल विशेषाधिकृत जरुरी है कि उपयोग की गई एप्लिकेशन (जैसे टर्मिनल
) को पूर्ण डिस्क एक्सेस (FDA) एक्सेस होना चाहिए (kTCCServiceSystemPolicyAllfiles
) जिसे एक व्यवस्थापक द्वारा प्रदान किया जाना चाहिए।
एक और विस्तृत व्याख्या मूल रिपोर्ट में पाई जा सकती है.
CVE-2021-1784 और CVE-2021-30808 - TCC फ़ाइल पर माउंट करें
यद्यपि TCC DB फ़ाइल सुरक्षित है, एक नई TCC.db फ़ाइल को डायरेक्टरी पर माउंट करना संभव था:
जांचें पूर्ण उत्पीड़न मूल लेख.
asr
उपकरण /usr/sbin/asr
को पूरे डिस्क की कॉपी करने और उसे दूसरी जगह माउंट करने की अनुमति देता था, TCC संरक्षण को छलकरने के लिए।
स्थान सेवाएं
/var/db/locationd/clients.plist
में तीसरा TCC डेटाबेस है जो स्थान सेवाओं तक पहुंचने की अनुमति देने वाले ग्राहकों को दर्शाता है।
फ़ोल्डर /var/db/locationd/
DMG माउंटिंग से सुरक्षित नहीं था इसलिए हमारे खुद के plist को माउंट करना संभव था।
स्टार्टअप ऐप्स द्वारा
pagemacOS Auto Startgrep द्वारा
कई अवसरों में फ़ाइलें संवेदनशील जानकारी जैसे ईमेल, फ़ोन नंबर, संदेश... को सुरक्षित स्थानों में स्टोर करेंगी (जो Apple में एक दोष के रूप में गिना जाएगा)।
सिंथेटिक क्लिक्स
यह अब काम नहीं करता, लेकिन यह पहले काम करता था:
एक और तरीका CoreGraphics इवेंट्स का उपयोग करने के लिए:
संदर्भ
Last updated