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)
Dit is nie 'n bypass nie, dit is net hoe TCC werk: Dit beskerm nie teen skryf nie. As Terminal nie toegang het om die Desktop van 'n gebruiker te lees nie, kan dit steeds daarin skryf:
The extended attribute com.apple.macl
is added to the new file to give the creators app access to read it.
Dit is moontlik om 'n venster oor die TCC prompt te plaas sodat die gebruiker dit kan aanvaar sonder om dit te besef. Jy kan 'n PoC vind in TCC-ClickJacking.
Die aanvaller kan apps met enige naam (bv. Finder, Google Chrome...) in die Info.plist
skep en dit laat aansoek doen om toegang tot 'n TCC-beskermde ligging. Die gebruiker sal dink dat die wettige toepassing die een is wat hierdie toegang aanvra.
Boonop is dit moontlik om die wettige app van die Dock te verwyder en die vals een daarop te plaas, sodat wanneer die gebruiker op die vals een klik (wat dieselfde ikoon kan gebruik), dit die wettige een kan bel, TCC-toestemmings kan vra en 'n malware kan uitvoer, wat die gebruiker laat glo dat die wettige app die toegang aangevra het.
More info and PoC in:
macOS Privilege EscalationStandaard het toegang via SSH "Volledige Skyf Toegang" gehad. Om dit te deaktiveer, moet jy dit gelys maar gedeaktiveer hê (om dit uit die lys te verwyder, sal nie daardie voorregte verwyder nie):
Hier kan jy voorbeelde vind van hoe sommige malware in staat was om hierdie beskerming te omseil:
Let daarop dat jy nou Volledige Skyf Toegang nodig het om SSH te kan aktiveer.
Die attribuut com.apple.macl
word aan lêers gegee om 'n sekere toepassing toestemming te gee om dit te lees. Hierdie attribuut word gestel wanneer sleep&laat 'n lêer oor 'n app, of wanneer 'n gebruiker dubbelklik op 'n lêer om dit met die standaard toepassing te open.
Daarom kan 'n gebruiker 'n kwaadwillige app registreer om al die uitbreidings te hanteer en Launch Services aanroep om enige lêer te open (sodat die kwaadwillige lêer toegang gegee sal word om dit te lees).
Die regte com.apple.private.icloud-account-access
maak dit moontlik om met die com.apple.iCloudHelper
XPC-diens te kommunikeer wat iCloud tokens sal verskaf.
iMovie en Garageband het hierdie regte gehad en ander wat dit toegelaat het.
Vir meer inligting oor die ontploffing om icloud tokens van daardie regte te verkry, kyk na die praatjie: #OBTS v5.0: "What Happens on your Mac, Stays on Apple's iCloud?!" - Wojciech Regula
'n App met die kTCCServiceAppleEvents
toestemming sal in staat wees om ander Apps te beheer. Dit beteken dat dit die toestemming wat aan die ander Apps gegee is, kan misbruik.
Vir meer inligting oor Apple Scripts, kyk:
macOS Apple ScriptsByvoorbeeld, as 'n App Automatiseringstoestemming oor iTerm
het, het Terminal
toegang oor iTerm:
Terminal, wat nie FDA het nie, kan iTerm aanroep, wat dit het, en dit gebruik om aksies uit te voer:
Of as 'n App toegang oor Finder het, kan dit 'n skrif soos hierdie wees:
Die gebruikersvlak tccd daemon wat die HOME
env veranderlike gebruik om toegang te verkry tot die TCC gebruikersdatabasis vanaf: $HOME/Library/Application Support/com.apple.TCC/TCC.db
Volgens hierdie Stack Exchange pos en omdat die TCC daemon via launchd
binne die huidige gebruiker se domein loop, is dit moontlik om alle omgewing veranderlikes wat aan dit oorgedra word te beheer.
Dus, 'n aanvaller kan die $HOME
omgewing veranderlike in launchctl
stel om na 'n gecontroleerde gids te verwys, herbegin die TCC daemon, en dan direk die TCC databasis te wysig om vir homself elke TCC regte beskikbaar te gee sonder om ooit die eindgebruiker te vra.
PoC:
Aantekeninge het toegang tot TCC beskermde plekke, maar wanneer 'n aantekening geskep word, word dit in 'n nie-beskermde plek geskep. So, jy kan aantekeninge vra om 'n beskermde lêer in 'n aantekening (so in 'n nie-beskermde plek) te kopieer en dan toegang tot die lêer te verkry:
Die binêre /usr/libexec/lsd
met die biblioteek libsecurity_translocate
het die regte com.apple.private.nullfs_allow
wat dit toegelaat het om nullfs monteer te skep en het die regte com.apple.private.tcc.allow
met kTCCServiceSystemPolicyAllFiles
om toegang tot elke lêer te verkry.
Dit was moontlik om die kwarantyn-attribuut aan "Biblioteek" toe te voeg, die com.apple.security.translocation
XPC-diens aan te roep en dan sou dit Biblioteek na $TMPDIR/AppTranslocation/d/d/Library
kaart waar al die dokumente binne Biblioteek toeganklik kon wees.
Musiek
het 'n interessante kenmerk: Wanneer dit loop, sal dit die lêers wat na ~/Music/Music/Media.localized/Automatically Add to Music.localized
gegooi word, in die gebruiker se "media biblioteek" invoer. Boonop roep dit iets soos: rename(a, b);
waar a
en b
is:
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
Hierdie rename(a, b);
gedrag is kwesbaar vir 'n Race Condition, aangesien dit moontlik is om 'n vals TCC.db lêer binne die Automatically Add to Music.localized
gids te plaas en dan wanneer die nuwe gids (b) geskep word, die lêer te kopieer, dit te verwyder, en dit na ~/Library/Application Support/com.apple.TCC
te wys.
As SQLITE_SQLLOG_DIR="pad/gids"
basies beteken dit dat enige oop db na daardie pad gekopieer word. In hierdie CVE is hierdie beheer misbruik om te skryf binne 'n SQLite-databasis wat gaan oop wees deur 'n proses met FDA die TCC-databasis, en dan SQLITE_SQLLOG_DIR
misbruik met 'n symlink in die lêernaam sodat wanneer daardie databasis oop is, die gebruiker TCC.db word oorgeskryf met die oop een.
Meer inligting in die skrywe en in die praatjie.
As die omgewing veranderlike SQLITE_AUTO_TRACE
gestel is, sal die biblioteek libsqlite3.dylib
begin log al die SQL navrae. Baie toepassings het hierdie biblioteek gebruik, so dit was moontlik om al hul SQLite navrae te log.
Verskeie Apple toepassings het hierdie biblioteek gebruik om toegang tot TCC beskermde inligting te verkry.
Hierdie omgewing veranderlike word deur die Metal
raamwerk gebruik wat 'n afhanklikheid is van verskeie programme, veral Music
, wat FDA het.
Stel die volgende in: MTL_DUMP_PIPELINES_TO_JSON_FILE="pad/naam"
. As pad
'n geldige gids is, sal die fout geaktiveer word en kan ons fs_usage
gebruik om te sien wat in die program gebeur:
'n lêer sal open()
word, genoem pad/.dat.nosyncXXXX.XXXXXX
(X is ewekansig)
een of meer write()
s sal die inhoud na die lêer skryf (ons beheer dit nie)
pad/.dat.nosyncXXXX.XXXXXX
sal renamed()
word na pad/naam
Dit is 'n tydelike lêer skrywe, gevolg deur 'n rename(old, new)
wat nie veilig is nie.
Dit is nie veilig nie omdat dit moet die ou en nuwe paaie apart oplos, wat 'n bietjie tyd kan neem en kwesbaar kan wees vir 'n Race Condition. Vir meer inligting kan jy die xnu
funksie renameat_internal()
nagaan.
So, basies, as 'n bevoorregte proses hernoem vanaf 'n gids wat jy beheer, kan jy 'n RCE wen en dit laat toegang tot 'n ander lêer of, soos in hierdie CVE, die lêer wat die bevoorregte toepassing geskep het oopmaak en 'n FD stoor.
As die hernoem toegang tot 'n gids wat jy beheer, terwyl jy die bronlêer gewysig het of 'n FD daarvoor het, verander jy die bestemmingslêer (of gids) om na 'n symlink te wys, sodat jy kan skryf wanneer jy wil.
Dit was die aanval in die CVE: Byvoorbeeld, om die gebruiker se TCC.db
te oorskryf, kan ons:
skep /Users/hacker/ourlink
om na /Users/hacker/Library/Application Support/com.apple.TCC/
te wys
skep die gids /Users/hacker/tmp/
stel MTL_DUMP_PIPELINES_TO_JSON_FILE=/Users/hacker/tmp/TCC.db
aktiveer die fout deur Music
met hierdie omgewing veranderlike te loop
vang die open()
van /Users/hacker/tmp/.dat.nosyncXXXX.XXXXXX
(X is ewekansig)
hier open ons ook hierdie lêer vir skryf, en hou aan by die lêer beskrywer
atomies ruil /Users/hacker/tmp
met /Users/hacker/ourlink
in 'n lus
ons doen dit om ons kanse op sukses te maksimeer aangesien die wedloopvenster redelik dun is, maar om die wedloop te verloor het 'n verwaarloosbare nadeel
wag 'n bietjie
toets of ons gelukkig was
as nie, loop weer van bo af
Meer inligting in https://gergelykalman.com/lateralus-CVE-2023-32407-a-macos-tcc-bypass.html
Nou, as jy probeer om die omgewing veranderlike MTL_DUMP_PIPELINES_TO_JSON_FILE
te gebruik, sal programme nie begin nie
As root kan jy hierdie diens aktiveer en die ARD agent sal volle skyf toegang hê wat dan deur 'n gebruiker misbruik kan word om dit te laat kopieer 'n nuwe TCC gebruiker databasis.
TCC gebruik 'n databasis in die gebruiker se HOME gids om toegang tot hulpbronne spesifiek vir die gebruiker te beheer by $HOME/Library/Application Support/com.apple.TCC/TCC.db. Daarom, as die gebruiker daarin slaag om TCC te herlaai met 'n $HOME omgewing veranderlike wat na 'n ander gids wys, kan die gebruiker 'n nuwe TCC databasis in /Library/Application Support/com.apple.TCC/TCC.db skep en TCC mislei om enige TCC toestemming aan enige toepassing toe te ken.
Let daarop dat Apple die instelling wat binne die gebruiker se profiel in die NFSHomeDirectory
attribuut gestoor is, gebruik vir die waarde van $HOME
, so as jy 'n toepassing met toestemmings om hierdie waarde te wysig (kTCCServiceSystemPolicySysAdminFiles
) kompromitteer, kan jy hierdie opsie wapen met 'n TCC omseiling.
Die eerste POC gebruik dsexport en dsimport om die HOME gids van die gebruiker te wysig.
Kry 'n csreq blob vir die teiken toepassing.
Plant 'n vals TCC.db lêer met vereiste toegang en die csreq blob.
Eksporteer die gebruiker se Directory Services inskrywing met dsexport.
Wysig die Directory Services inskrywing om die gebruiker se tuisgids te verander.
Importeer die gewysigde Directory Services inskrywing met dsimport.
Stop die gebruiker se tccd en herlaai die proses.
Die tweede POC het /usr/libexec/configd
gebruik wat com.apple.private.tcc.allow
met die waarde kTCCServiceSystemPolicySysAdminFiles
gehad het.
Dit was moontlik om configd
met die -t
opsie te loop, 'n aanvaller kon 'n aangepaste Bundel om te laai spesifiseer. Daarom, die uitbuiting vervang die dsexport
en dsimport
metode van die verandering van die gebruiker se tuisgids met 'n configd
kode-inspuiting.
Vir meer inligting, kyk na die oorspronklike verslag.
Daar is verskillende tegnieke om kode binne 'n proses in te spuit en sy TCC bevoegdhede te misbruik:
macOS Process AbuseBoonop is die mees algemene proses inspuiting om TCC te omseil wat gevind is via plugins (laai biblioteek). Plugins is ekstra kode gewoonlik in die vorm van biblioteke of plist, wat deur die hoofd toepassing gelaai sal word en onder sy konteks sal uitvoer. Daarom, as die hoofd toepassing toegang tot TCC beperkte lêers gehad het (via toegekende toestemmings of regte), sal die aangepaste kode dit ook hê.
Die toepassing /System/Library/CoreServices/Applications/Directory Utility.app
het die reg kTCCServiceSystemPolicySysAdminFiles
, gelaaide plugins met .daplug
uitbreiding en het nie die geharde runtime gehad nie.
Om hierdie CVE te wapen, word die NFSHomeDirectory
gewysig (misbruik van die vorige reg) om in staat te wees om die gebruiker se TCC databasis oor te neem om TCC te omseil.
Vir meer inligting, kyk na die oorspronklike verslag.
Die binêre /usr/sbin/coreaudiod
het die regte com.apple.security.cs.disable-library-validation
en com.apple.private.tcc.manager
. Die eerste toelaat kode inspuiting en die tweede een gee dit toegang om TCC te bestuur.
Hierdie binêre het toegelaat om derdeparty plugins van die gids /Library/Audio/Plug-Ins/HAL
te laai. Daarom was dit moontlik om 'n plugin te laai en die TCC toestemmings te misbruik met hierdie PoC:
For more info check the original report.
Stelsels toepassings wat kamera stroom via Core Media I/O oopmaak (toepassings met kTCCServiceCamera
) laai in die proses hierdie plugins geleë in /Library/CoreMediaIO/Plug-Ins/DAL
(nie SIP beperk nie).
Net om 'n biblioteek met die algemene konstruktors daar te stoor, sal werk om kode in te spuit.
Verskeie Apple toepassings was kwesbaar hiervoor.
Die Firefox toepassing het die com.apple.security.cs.disable-library-validation
en com.apple.security.cs.allow-dyld-environment-variables
regte gehad:
Fore more info about how to easily exploit this check the original report.
Die binêre /system/Library/Filesystems/acfs.fs/Contents/bin/xsanctl
het die regte com.apple.private.tcc.allow
en com.apple.security.get-task-allow
gehad, wat dit moontlik gemaak het om kode binne die proses in te spuit en die TCC-privileges te gebruik.
Telegram het die regte com.apple.security.cs.allow-dyld-environment-variables
en com.apple.security.cs.disable-library-validation
gehad, so dit was moontlik om dit te misbruik om toegang tot sy toestemmings te verkry soos om met die kamera op te neem. Jy kan find the payload in the writeup.
Note how to use the env variable to load a library a custom plist was created to inject this library and launchctl
was used to launch it:
Dit is moontlik om open
aan te roep selfs terwyl dit in 'n sandbox is.
Dit is redelik algemeen om terminal Volledige Skyf Toegang (FDA) te gee, ten minste op rekenaars wat deur tegnologie mense gebruik word. En dit is moontlik om .terminal
skripte hiermee aan te roep.
.terminal
skripte is plist-lêers soos hierdie een met die opdrag om uit te voer in die CommandString
sleutel:
'n Aansoek kan 'n terminalskrip in 'n ligging soos /tmp skryf en dit met 'n opdrag soos:
Enige gebruiker (selfs onprivilegieerde) kan 'n tydmasjien-snapshot skep en monteer en toegang hê tot AL die lêers van daardie snapshot.
Die enige privilige wat benodig word, is dat die toepassing wat gebruik word (soos Terminal
) Volledige Skyftoegang (FDA) toegang moet hê (kTCCServiceSystemPolicyAllfiles
) wat deur 'n admin toegestaan moet word.
'n Meer gedetailleerde verklaring kan gevind word in die oorspronklike verslag.
Selfs al is die TCC DB-lêer beskerm, was dit moontlik om 'n nuwe TCC.db-lêer oor die gids te monteer:
Check die volledige exploit in die oorspronklike skrywe.
Die hulpmiddel /usr/sbin/asr
het toegelaat om die hele skyf te kopieer en dit op 'n ander plek te monteer terwyl TCC beskermings omseil word.
Daar is 'n derde TCC databasis in /var/db/locationd/clients.plist
om kliënte aan te dui wat toegelaat word om toegang tot ligging dienste te hê.
Die gids /var/db/locationd/
was nie beskerm teen DMG-montage nie, so dit was moontlik om ons eie plist te monteer.
In verskeie gevalle sal lêers sensitiewe inligting soos e-posse, telefoonnommers, boodskappe... in nie-beskermde plekke stoor (wat as 'n kwesbaarheid in Apple tel).
Dit werk nie meer nie, maar dit het in die verlede gewerk:
Nog 'n manier om CoreGraphics gebeurtenisse te gebruik:
Leer & oefen AWS Hacking:HackTricks Opleiding AWS Red Team Expert (ARTE) Leer & oefen GCP Hacking: HackTricks Opleiding GCP Red Team Expert (GRTE)