macOS TCC Bypasses
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Hii si bypass, ni jinsi TCC inavyofanya kazi: Haipati ulinzi dhidi ya kuandika. Ikiwa Terminal haina ufikiaji wa kusoma Desktop ya mtumiaji inaweza bado kuandika ndani yake:
The extended attribute com.apple.macl
inatolewa kwa file mpya ili kutoa access kwa creators app kuisoma.
Inawezekana kueka dirisha juu ya TCC prompt ili kumfanya mtumiaji akubali bila kutambua. Unaweza kupata PoC katika TCC-ClickJacking.
Mshambuliaji anaweza kuunda apps zenye jina lolote (mfano: Finder, Google Chrome...) katika Info.plist
na kufanya iweze kuomba access kwa eneo fulani lililohifadhiwa na TCC. Mtumiaji atadhani kwamba programu halali ndiyo inayoomba access hii.
Zaidi ya hayo, inawezekana kuondoa app halali kutoka kwenye Dock na kuweka ile bandia juu yake, hivyo wakati mtumiaji anabofya ile bandia (ambayo inaweza kutumia ikoni ile ile) inaweza kuita ile halali, kuomba ruhusa za TCC na kutekeleza malware, ikimfanya mtumiaji kuamini kwamba app halali iliiomba access.
Maelezo zaidi na PoC katika:
Kwa kawaida, access kupitia SSH ilikuwa na "Full Disk Access". Ili kuondoa hii unahitaji kuwa na orodha lakini imezuiliwa (kuiondoa kwenye orodha hakutafuta hizo ruhusa):
Hapa unaweza kupata mifano ya jinsi baadhi ya malwares zilivyoweza kupita ulinzi huu:
Kumbuka kwamba sasa, ili uweze kuwezesha SSH unahitaji Full Disk Access
Attribute com.apple.macl
inatolewa kwa files ili kutoa program fulani ruhusa ya kuisoma. Attribute hii inawekwa wakati wa drag&drop file juu ya app, au wakati mtumiaji anabofya mara mbili file ili kuifungua na program ya kawaida.
Hivyo, mtumiaji anaweza kujiandikisha app mbaya kushughulikia extensions zote na kuita Launch Services ili kuifungua file yoyote (hivyo file mbaya itapata access ya kuisoma).
Ruhusa com.apple.private.icloud-account-access
inawezesha kuwasiliana na com.apple.iCloudHelper
XPC service ambayo itatoa iCloud tokens.
iMovie na Garageband walikuwa na ruhusa hii na nyingine ambazo ziliruhusu.
Kwa maelezo zaidi kuhusu exploit ya kupata iCloud tokens kutoka kwa ruhusa hiyo angalia mazungumzo: #OBTS v5.0: "What Happens on your Mac, Stays on Apple's iCloud?!" - Wojciech Regula
App yenye ruhusa kTCCServiceAppleEvents
itakuwa na uwezo wa kudhibiti Apps nyingine. Hii inamaanisha kwamba inaweza kuwa na uwezo wa kuitumia vibaya ruhusa zilizotolewa kwa Apps nyingine.
Kwa maelezo zaidi kuhusu Apple Scripts angalia:
Kwa mfano, ikiwa App ina ruhusa ya Automation juu ya iTerm
, kwa mfano katika mfano huu Terminal
ina access juu ya iTerm:
Terminal, ambaye hana FDA, anaweza kuita iTerm, ambayo ina, na kuitumia kufanya vitendo:
Au ikiwa programu ina ufikiaji juu ya Finder, inaweza kuwa skripti kama hii:
tccd daemon ya mtumiaji ilikuwa ikitumia HOME
env variable kufikia hifadhidata ya watumiaji wa TCC kutoka: $HOME/Library/Application Support/com.apple.TCC/TCC.db
Kulingana na hii posti ya Stack Exchange na kwa sababu TCC daemon inafanya kazi kupitia launchd
ndani ya eneo la mtumiaji wa sasa, inawezekana kudhibiti kila variable ya mazingira inayopitishwa kwake.
Hivyo, mshambuliaji anaweza kuweka variable ya mazingira ya $HOME
katika launchctl
kuashiria directory iliyo dhibitiwa, kuanzisha upya TCC daemon, na kisha kurekebisha moja kwa moja hifadhidata ya TCC ili kujipa haki zote za TCC zinazopatikana bila kumwuliza mtumiaji wa mwisho.
PoC:
Maelezo yalikuwa na ufikiaji wa maeneo yaliyo na ulinzi wa TCC lakini wakati noti inaundwa hii inaundwa katika eneo lisilo na ulinzi. Hivyo, unaweza kuomba maelezo ya nakala faili iliyo na ulinzi katika noti (hivyo katika eneo lisilo na ulinzi) na kisha kufikia faili hiyo:
Binary /usr/libexec/lsd
pamoja na maktaba libsecurity_translocate
ilikuwa na haki com.apple.private.nullfs_allow
ambayo iliruhusu kuunda nullfs mount na ilikuwa na haki com.apple.private.tcc.allow
na kTCCServiceSystemPolicyAllFiles
kufikia kila faili.
Ilikuwa inawezekana kuongeza sifa ya karantini kwa "Library", kuita huduma ya com.apple.security.translocation
XPC na kisha itachora Library kwa $TMPDIR/AppTranslocation/d/d/Library
ambapo nyaraka zote ndani ya Library zinaweza kufikiwa.
Music
ina kipengele cha kuvutia: Wakati inafanya kazi, itafanya kuagiza faili zilizotupwa kwenye ~/Music/Music/Media.localized/Automatically Add to Music.localized
katika "maktaba ya media" ya mtumiaji. Zaidi ya hayo, inaita kitu kama: rename(a, b);
ambapo a
na b
ni:
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
Hii rename(a, b);
tabia ni dhaifu kwa Race Condition, kwani inawezekana kuweka ndani ya folda Automatically Add to Music.localized
faili bandia ya TCC.db na kisha wakati folda mpya (b) inaundwa ili kunakili faili, ifutwe, na kuelekezwe kwa ~/Library/Application Support/com.apple.TCC
/.
Ikiwa SQLITE_SQLLOG_DIR="path/folder"
inamaanisha kwamba db yoyote iliyo wazi inakopiwa kwenye njia hiyo. Katika CVE hii udhibiti huu ulitumiwa vibaya ili kuandika ndani ya SQLite database ambayo itafunguliwa na mchakato wenye FDA wa TCC database, na kisha kutumia SQLITE_SQLLOG_DIR
na symlink katika jina la faili hivyo wakati hiyo database inafunguliwa, mtumiaji TCC.db inafutwa na ile iliyo wazi.
Maelezo zaidi katika andiko na katika mazungumzo.
Ikiwa variable ya mazingira SQLITE_AUTO_TRACE
imewekwa, maktaba libsqlite3.dylib
itaanza kurekodi maswali yote ya SQL. Programu nyingi zilitumie maktaba hii, hivyo ilikuwa inawezekana kurekodi maswali yao yote ya SQLite.
Programu kadhaa za Apple zilitumie maktaba hii kufikia taarifa zilizo na ulinzi wa TCC.
Hii env variable inatumika na Metal
framework ambayo ni utegemezi wa programu mbalimbali, hasa Music
, ambayo ina FDA.
Kuweka yafuatayo: MTL_DUMP_PIPELINES_TO_JSON_FILE="path/name"
. Ikiwa path
ni directory halali, hitilafu itasababisha na tunaweza kutumia fs_usage
kuona kinachoendelea katika programu:
faili itafunguliwa open()
inayoitwa path/.dat.nosyncXXXX.XXXXXX
(X ni nasibu)
moja au zaidi ya write()
zitaandika maudhui kwenye faili (hatudhibiti hii)
path/.dat.nosyncXXXX.XXXXXX
itakuwa renamed()
kuwa path/name
Ni uandishi wa faili wa muda, ikifuatwa na rename(old, new)
ambayo si salama.
Si salama kwa sababu inahitaji kufafanua njia za zamani na mpya tofauti, ambayo inaweza kuchukua muda na inaweza kuwa hatarini kwa Condition ya Mbio. Kwa maelezo zaidi unaweza kuangalia kazi ya xnu
renameat_internal()
.
Hivyo, kimsingi, ikiwa mchakato wenye mamlaka unabadilisha jina kutoka folda unayodhibiti, unaweza kupata RCE na kufanya iweze kufikia faili tofauti au, kama katika CVE hii, kufungua faili ambayo programu yenye mamlaka iliumba na kuhifadhi FD.
Ikiwa kubadilisha jina kunafikia folda unayodhibiti, wakati umebadilisha faili ya chanzo au una FD kwake, unabadilisha faili (au folda) ya marudio kuashiria symlink, hivyo unaweza kuandika wakati wowote unavyotaka.
Hii ilikuwa shambulio katika CVE: Kwa mfano, ili kufuta TCC.db
ya mtumiaji, tunaweza:
kuunda /Users/hacker/ourlink
kuashiria /Users/hacker/Library/Application Support/com.apple.TCC/
kuunda directory /Users/hacker/tmp/
kuweka MTL_DUMP_PIPELINES_TO_JSON_FILE=/Users/hacker/tmp/TCC.db
kusababisha hitilafu kwa kuendesha Music
na env var hii
kukamata open()
ya /Users/hacker/tmp/.dat.nosyncXXXX.XXXXXX
(X ni nasibu)
hapa pia tunafungua faili hii kwa ajili ya kuandika, na kushikilia desktopu ya faili
kubadilisha kwa atomiki /Users/hacker/tmp
na /Users/hacker/ourlink
katika mzunguko
tunafanya hivi ili kuongeza nafasi zetu za kufanikiwa kwani dirisha la mbio ni finyu sana, lakini kupoteza mbio kuna hasara ndogo
subiri kidogo
jaribu ikiwa tumepata bahati
ikiwa si, endesha tena kutoka juu
Maelezo zaidi katika https://gergelykalman.com/lateralus-CVE-2023-32407-a-macos-tcc-bypass.html
Sasa, ikiwa unajaribu kutumia env variable MTL_DUMP_PIPELINES_TO_JSON_FILE
programu hazitazinduka
Kama root unaweza kuwezesha huduma hii na ARD agent itakuwa na ufikiaji kamili wa diski ambayo inaweza kutumiwa vibaya na mtumiaji ili kufanya iweze kunakili TCC user database mpya.
TCC inatumia database katika folda ya HOME ya mtumiaji kudhibiti ufikiaji wa rasilimali maalum kwa mtumiaji katika $HOME/Library/Application Support/com.apple.TCC/TCC.db. Hivyo, ikiwa mtumiaji atafanikiwa kuanzisha upya TCC na env variable ya $HOME ikielekeza kwenye folda tofauti, mtumiaji anaweza kuunda database mpya ya TCC katika /Library/Application Support/com.apple.TCC/TCC.db na kumdanganya TCC kutoa ruhusa yoyote ya TCC kwa programu yoyote.
Kumbuka kwamba Apple inatumia mipangilio iliyohifadhiwa ndani ya wasifu wa mtumiaji katika NFSHomeDirectory
attribute kwa thamani ya $HOME
, hivyo ikiwa unaharibu programu yenye ruhusa za kubadilisha thamani hii (kTCCServiceSystemPolicySysAdminFiles
), unaweza kuweka silaha chaguo hili na bypass ya TCC.
POC ya kwanza inatumia dsexport na dsimport kubadilisha HOME folder ya mtumiaji.
Pata csreq blob kwa programu lengwa.
Pandisha faili ya uwongo TCC.db yenye ufikiaji unaohitajika na csreq blob.
Exporting entry ya Huduma za Katalogi ya mtumiaji kwa kutumia dsexport.
Badilisha entry ya Huduma za Katalogi kubadilisha folda ya nyumbani ya mtumiaji.
Ingiza entry iliyobadilishwa ya Huduma za Katalogi kwa kutumia dsimport.
Simamisha tccd ya mtumiaji na upya mchakato.
POC ya pili ilitumia /usr/libexec/configd
ambayo ilikuwa na com.apple.private.tcc.allow
yenye thamani kTCCServiceSystemPolicySysAdminFiles
.
Ilikuwa inawezekana kuendesha configd
na chaguo la -t
, mshambuliaji angeweza kubainisha Bundle maalum ya kupakia. Hivyo, exploit inabadilisha njia ya dsexport
na dsimport
ya kubadilisha folda ya nyumbani ya mtumiaji kwa configd
code injection.
Kwa maelezo zaidi angalia ripoti ya asili.
Kuna mbinu tofauti za kuingiza msimbo ndani ya mchakato na kutumia ruhusa zake za TCC:
Zaidi ya hayo, sindano ya mchakato ya kawaida zaidi ili kupita TCC iliyoonekana ni kupitia plugins (load library). Plugins ni msimbo wa ziada kawaida katika mfumo wa maktaba au plist, ambayo itakuwa imepakiwa na programu kuu na itatekelezwa chini ya muktadha wake. Hivyo, ikiwa programu kuu ilikuwa na ufikiaji wa faili zilizozuiliwa za TCC (kupitia ruhusa au haki zilizotolewa), msimbo maalum pia utakuwa nao.
Programu /System/Library/CoreServices/Applications/Directory Utility.app
ilikuwa na haki kTCCServiceSystemPolicySysAdminFiles
, ilipakia plugins zenye .daplug
upanuzi na haikuwa na runtime iliyohardened.
Ili kuweka silaha CVE hii, NFSHomeDirectory
inabadilishwa (ikifanya matumizi ya haki ya awali) ili kuwa na uwezo wa kuchukua database ya TCC ya watumiaji ili kupita TCC.
Kwa maelezo zaidi angalia ripoti ya asili.
Binary /usr/sbin/coreaudiod
ilikuwa na haki com.apple.security.cs.disable-library-validation
na com.apple.private.tcc.manager
. Ya kwanza ikitoa ruhusa ya sindano ya msimbo na ya pili ikitoa ufikiaji wa kusimamia TCC.
Binary hii iliruhusu kupakia plugins za upande wa tatu kutoka folda /Library/Audio/Plug-Ins/HAL
. Hivyo, ilikuwa inawezekana kupakia plugin na kutumia ruhusa za TCC na PoC hii:
Kwa maelezo zaidi angalia ripoti asilia.
Programu za mfumo ambazo zinafungua mtiririko wa kamera kupitia Core Media I/O (programu zenye kTCCServiceCamera
) zinapakia katika mchakato wa plugins hizi zilizoko katika /Library/CoreMediaIO/Plug-Ins/DAL
(hazijapigwa marufuku na SIP).
Kuhifadhi tu maktaba yenye mjenzi wa kawaida kutafanya kazi ili kuingiza msimbo.
Programu kadhaa za Apple zilikuwa na udhaifu huu.
Programu ya Firefox ilikuwa na haki za com.apple.security.cs.disable-library-validation
na com.apple.security.cs.allow-dyld-environment-variables
:
Kwa maelezo zaidi kuhusu jinsi ya kutumia kwa urahisi hii angalia ripoti ya asili.
Binary /system/Library/Filesystems/acfs.fs/Contents/bin/xsanctl
ilikuwa na ruhusa com.apple.private.tcc.allow
na com.apple.security.get-task-allow
, ambazo ziliruhusu kuingiza msimbo ndani ya mchakato na kutumia ruhusa za TCC.
Telegram ilikuwa na ruhusa com.apple.security.cs.allow-dyld-environment-variables
na com.apple.security.cs.disable-library-validation
, hivyo ilikuwa inawezekana kuitumia vibaya ili kupata ufikiaji wa ruhusa zake kama kurekodi kwa kutumia kamera. Unaweza kupata payload katika andiko.
Kumbuka jinsi ya kutumia variable ya env ili kupakia maktaba plist ya kawaida ili kuingiza maktaba hii na launchctl
ilitumika kuanzisha:
Inawezekana kuita open
hata wakati wa sandboxed
Ni kawaida sana kutoa Full Disk Access (FDA) kwa terminal, angalau katika kompyuta zinazotumiwa na watu wa teknolojia. Na inawezekana kuita skripti za .terminal
kwa kutumia hiyo.
Skripti za .terminal
ni faili za plist kama hii yenye amri ya kutekeleza katika ufunguo wa CommandString
:
Sifa inaweza kuandika skripti ya terminal katika eneo kama /tmp na kuizindua kwa come kama:
Mtumiaji yeyote (hata wasio na mamlaka) anaweza kuunda na kuunganisha picha ya mashine ya wakati na kufikia FAILI ZOTE za picha hiyo.
Mamlaka pekee inayohitajika ni kwa programu inayotumika (kama Terminal
) kuwa na Upatikanaji wa Diski Kamili (FDA) (kTCCServiceSystemPolicyAllfiles
) ambayo inahitaji kupewa na admin.
Maelezo ya kina zaidi yanaweza kupatikana katika ripoti ya asili.
Hata kama faili ya TCC DB inalindwa, ilikuwa inawezekana kuweka juu ya directory faili mpya ya TCC.db:
Check the full exploit in the original writeup.
The tool /usr/sbin/asr
iliruhusu nakala ya diski nzima na kuimount mahali pengine ikipita ulinzi wa TCC.
Kuna database ya tatu ya TCC katika /var/db/locationd/clients.plist
kuonyesha wateja walio ruhusiwa kupata huduma za eneo.
Folda /var/db/locationd/
haikulindwa kutokana na ku-mount DMG hivyo ilikuwa inawezekana ku-mount plist yetu wenyewe.
Katika matukio kadhaa, faili zitahifadhi taarifa nyeti kama barua pepe, nambari za simu, ujumbe... katika maeneo yasiyolindwa (ambayo yanahesabiwa kama udhaifu katika Apple).
Hii haifanyi kazi tena, lakini ilifanya hapo awali:
Njia nyingine kutumia CoreGraphics events:
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)