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.
It's possible to put a window over the TCC prompt to make the user accept it without noticing. You can find a PoC in TCC-ClickJacking.
Attacker can create apps with any name (e.g. Finder, Google Chrome...) in the Info.plist
and make it request access to some TCC protected location. The user will think that the legit application is the one requesting this access.
Moreover, it's possible to remove the legit app from the Dock and put the fake one on it, so when the user clicks on the fake one (which can use the same icon) it could call the legit one, ask for TCC permissions and execute a malware, making the user believe the legit app requested the access.
More info and PoC in:
macOS Privilege EscalationBy default an access via SSH used to have "Full Disk Access". In order to disable this you need to have it listed but disabled (removing it from the list won't remove those privileges):
Here you can find examples of how some malwares have been able to bypass this protection:
Note that now, in order to be able to enable SSH you need Full Disk Access
The attribute com.apple.macl
is given to files to give a certain application permissions to read it. This attribute is set when drag&drop a file over an app, or when a user double-clicks a file to open it with the default application.
Therefore, a user could register a malicious app to handle all the extensions and call Launch Services to open any file (so the malicious file will be granted access to read it).
The entitlement com.apple.private.icloud-account-access
it's possible to communicate with com.apple.iCloudHelper
XPC service which will provide iCloud tokens.
iMovie and Garageband had this entitlement and others that allowed.
For more information about the exploit to get icloud tokens from that entitlement check the talk: #OBTS v5.0: "What Happens on your Mac, Stays on Apple's iCloud?!" - Wojciech Regula
An app with the kTCCServiceAppleEvents
permission will be able to control other Apps. This means that it could be able to abuse the permissions granted to the other Apps.
For more info about Apple Scripts check:
macOS Apple ScriptsFor example, if an App has Automation permission over iTerm
, for example in this example Terminal
has access over iTerm:
Terminal, who doesn't have FDA, can call iTerm, which has it, and use it to perform actions:
Of as 'n App toegang oor Finder het, kan dit 'n skrif soos hierdie wees:
Die gebruikerland 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
gehad wat dit toegelaat het om nullfs monteer te skep en het die regte com.apple.private.tcc.allow
gehad 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 in 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 wees oop 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 wissel /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 verwaarloosbare nadele
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 toestemming 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 gewysig 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 voorregte 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 toestemming of regte), sal die aangepaste kode dit ook hê.
Die toepassing /System/Library/CoreServices/Applications/Directory Utility.app
het die regte 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 regte) 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 toestemming 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 konstruksie 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 in die CommandString
sleutel uit te voer:
'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 montages 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 Training AWS Red Team Expert (ARTE) Leer & oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)