macOS TCC Bypasses
Według funkcjonalności
Bypass zapisu
To nie jest bypass, to po prostu sposób działania TCC: Nie chroni przed zapisem. Jeśli Terminal nie ma dostępu do odczytu Pulpitu użytkownika, nadal może w niego zapisywać:
Rozszerzony atrybut com.apple.macl
jest dodawany do nowego pliku, aby umożliwić aplikacji twórcy dostęp do odczytu.
TCC ClickJacking
Możliwe jest umieszczenie okna nad monitem TCC, aby użytkownik zaakceptował je niezauważenie. Możesz znaleźć PoC w TCC-ClickJacking.
TCC Żądanie pod dowolną nazwą
Atakujący może tworzyć aplikacje o dowolnej nazwie (np. Finder, Google Chrome...) w pliku Info.plist
i sprawić, że będzie ona żądać dostępu do chronionego obszaru TCC. Użytkownik będzie myślał, że to legitymacyjna aplikacja prosi o ten dostęp.
Co więcej, możliwe jest usunięcie legitymacyjnej aplikacji z Docka i umieszczenie fałszywej na nim, więc gdy użytkownik kliknie na fałszywą (która może używać tego samego symbolu), może ona wywołać legitymacyjną, poprosić o uprawnienia TCC i uruchomić złośliwe oprogramowanie, sprawiając, że użytkownik uwierzy, że to legitymacyjna aplikacja prosiła o dostęp.
Więcej informacji i PoC znajdziesz tutaj:
pagemacOS Privilege EscalationSSH Bypass
Domyślnie dostęp przez SSH miał "Pełny dostęp do dysku". Aby to wyłączyć, musisz mieć to wymienione, ale wyłączone (usunięcie go z listy nie usunie tych uprawnień):
Tutaj znajdziesz przykłady, jak niektóre złośliwe oprogramowania były w stanie ominąć tę ochronę:
Zauważ, że teraz, aby móc włączyć SSH, potrzebujesz Pełnego dostępu do dysku
Obsługa rozszerzeń - CVE-2022-26767
Atrybut com.apple.macl
jest nadawany plikom, aby dać pewnej aplikacji uprawnienia do odczytu. Ten atrybut jest ustawiany, gdy przeciągniesz i upuścisz plik na aplikację lub gdy użytkownik podwójnie kliknie plik, aby otworzyć go za pomocą domyślnej aplikacji.
Dlatego użytkownik mógłby zarejestrować złośliwą aplikację, aby obsługiwała wszystkie rozszerzenia i wywołać usługi uruchamiania do otwarcia dowolnego pliku (dzięki czemu złośliwy plik otrzyma dostęp do odczytu).
iCloud
Uprawnienie com.apple.private.icloud-account-access
pozwala na komunikację z usługą XPC com.apple.iCloudHelper
, która udostępnia tokeny iCloud.
iMovie i Garageband miały to uprawnienie i inne.
Aby uzyskać więcej informacji na temat wykorzystania do uzyskania tokenów iCloud z tego uprawnienia, sprawdź prezentację: #OBTS v5.0: "What Happens on your Mac, Stays on Apple's iCloud?!" - Wojciech Regula
kTCCServiceAppleEvents / Automatyzacja
Aplikacja z uprawnieniem kTCCServiceAppleEvents
będzie mogła kontrolować inne aplikacje. Oznacza to, że może być w stanie nadużyć przyznanych uprawnień innym aplikacjom.
Aby uzyskać więcej informacji na temat skryptów Apple, sprawdź:
pagemacOS Apple ScriptsNa przykład, jeśli aplikacja ma uprawnienie Automatyzacji nad iTerm
, na przykład w tym przykładzie Terminal
ma dostęp do iTerm:
Nad iTerm
Terminal, który nie ma FDA, może wywołać iTerm, który ją ma, i użyć go do wykonywania działań:
Nad Finderem
Jeśli aplikacja ma dostęp nad Finderem, może wykonać skrypt, taki jak ten:
Według zachowania aplikacji
CVE-2020–9934 - TCC
Demon tccd w przestrzeni użytkownika używa zmiennej środowiskowej HOME
do dostępu do bazy danych użytkowników TCC z lokalizacji: $HOME/Library/Application Support/com.apple.TCC/TCC.db
Zgodnie z tym postem na Stack Exchange i ponieważ demon TCC działa za pośrednictwem launchd
w dziedzinie bieżącego użytkownika, możliwe jest kontrolowanie wszystkich zmiennych środowiskowych przekazywanych do niego.
W związku z tym atakujący mógłby ustawić zmienną środowiskową $HOME
w launchctl
tak, aby wskazywała na kontrolowany katalog, ponownie uruchomić demona TCC, a następnie bezpośrednio modyfikować bazę danych TCC, aby nadać sobie wszystkie dostępne uprawnienia TCC bez konieczności pytania końcowego użytkownika.
PoC:
CVE-2021-30761 - Notatki
Notatki miały dostęp do chronionych lokalizacji TCC, ale gdy notatka jest tworzona, jest to tworzone w lokalizacji niechronionej. Dlatego można było poprosić o skopiowanie chronionego pliku do notatki (czyli do lokalizacji niechronionej) i następnie uzyskać dostęp do pliku:
CVE-2021-30782 - Translokacja
Binarny plik /usr/libexec/lsd
z biblioteką libsecurity_translocate
miał uprawnienie com.apple.private.nullfs_allow
, które pozwalało na utworzenie montowania nullfs oraz uprawnienie com.apple.private.tcc.allow
z kTCCServiceSystemPolicyAllFiles
do uzyskania dostępu do każdego pliku.
Było możliwe dodanie atrybutu kwarantanny do "Library", wywołanie usługi XPC com.apple.security.translocation
i w rezultacie zmapowanie Library na $TMPDIR/AppTranslocation/d/d/Library
, gdzie wszystkie dokumenty wewnątrz Library mogły być uzyskane.
CVE-2023-38571 - Muzyka & TV
Muzyka
ma ciekawą funkcję: Kiedy jest uruchomiona, importuje pliki upuszczone do ~/Music/Music/Media.localized/Automatically Add to Music.localized
do "biblioteki multimedialnej" użytkownika. Ponadto, wywołuje coś w stylu: rename(a, b);
gdzie a
i b
to:
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
To zachowanie rename(a, b);
jest podatne na Race Condition, ponieważ było możliwe umieszczenie w folderze Automatically Add to Music.localized
fałszywego pliku TCC.db, a następnie, gdy zostanie utworzony nowy folder(b), skopiować plik, usunąć go i skierować go do ~/Library/Application Support/com.apple.TCC
/.
SQLITE_SQLLOG_DIR - CVE-2023-32422
Jeśli SQLITE_SQLLOG_DIR="ścieżka/folder"
, oznacza to w zasadzie, że każda otwarta baza danych jest kopiowana do tej ścieżki. W tej CVE to sterowanie zostało nadużyte do zapisania wewnątrz bazy danych SQLite, która ma być otwarta przez proces z bazą danych TCC, a następnie nadużyć SQLITE_SQLLOG_DIR
z symlinkiem w nazwie pliku, więc gdy ta baza danych jest otwarta, plik użytkownika TCC.db jest nadpisywany otwartym plikiem.
Więcej informacji w opisie i w prezentacji.
SQLITE_AUTO_TRACE
Jeśli zmienna środowiskowa SQLITE_AUTO_TRACE
jest ustawiona, biblioteka libsqlite3.dylib
zacznie logować wszystkie zapytania SQL. Wiele aplikacji używało tej biblioteki, więc było możliwe zalogowanie wszystkich ich zapytań SQLite.
Kilka aplikacji Apple używało tej biblioteki do uzyskiwania dostępu do chronionych informacji TCC.
MTL_DUMP_PIPELINES_TO_JSON_FILE - CVE-2023-32407
Ta zmienna środowiskowa jest używana przez framework Metal
, który jest zależnością różnych programów, w tym głównie Music
, który ma FDA.
Ustawienie następującego: MTL_DUMP_PIPELINES_TO_JSON_FILE="ścieżka/nazwa"
. Jeśli ścieżka
jest poprawnym katalogiem, błąd zostanie wywołany i możemy użyć fs_usage
, aby zobaczyć, co dzieje się w programie:
zostanie otwarty plik o nazwie
path/.dat.nosyncXXXX.XXXXXX
(X to losowa wartość)jedno lub więcej operacji
write()
zapisze zawartość do pliku (nie mamy nad tym kontroli)path/.dat.nosyncXXXX.XXXXXX
zostanie zmienione nazwę napath/nazwa
Jest to tymczasowa operacja zapisu pliku, po której następuje rename(stary, nowy)
która nie jest bezpieczna.
Nie jest to bezpieczne, ponieważ musi rozwiązać osobno stare i nowe ścieżki, co może zająć trochę czasu i być podatne na Warunki Wyścigu. Aby uzyskać więcej informacji, można sprawdzić funkcję xnu
renameat_internal()
.
Więc, w skrócie, jeśli uprzywilejowany proces zmienia nazwę z folderu, który kontrolujesz, możesz zdobyć RCE i sprawić, że uzyska dostęp do innego pliku lub, jak w tym CVE, otworzyć plik utworzony przez uprzywilejowaną aplikację i przechować FD.
Jeśli zmiana nazwy dotyczy folderu, który kontrolujesz, podczas gdy zmodyfikowałeś plik źródłowy lub masz do niego FD, zmieniasz plik (lub folder) docelowy na symlink, dzięki czemu możesz pisać kiedy chcesz.
To był atak w CVE: Na przykład, aby nadpisać bazę danych użytkownika TCC.db
, możemy:
utwórz
/Users/hacker/ourlink
, aby wskazywał na/Users/hacker/Library/Application Support/com.apple.TCC/
utwórz katalog
/Users/hacker/tmp/
ustaw
MTL_DUMP_PIPELINES_TO_JSON_FILE=/Users/hacker/tmp/TCC.db
wywołaj błąd, uruchamiając
Music
z tą zmienną środowiskowązłap
open()
/Users/hacker/tmp/.dat.nosyncXXXX.XXXXXX
(X to losowa wartość)tutaj również
open()
ten plik do zapisu i zachowaj deskryptor plikuatomowo zamień
/Users/hacker/tmp
na/Users/hacker/ourlink
w pętlirobimy to, aby zwiększyć szanse na sukces, ponieważ okno wyścigu jest dość wąskie, ale przegrana w wyścigu ma znikome konsekwencje
poczekaj chwilę
sprawdź, czy udało się
jeśli nie, uruchom ponownie od początku
Więcej informacji na stronie https://gergelykalman.com/lateralus-CVE-2023-32407-a-macos-tcc-bypass.html
Teraz, jeśli spróbujesz użyć zmiennej środowiskowej MTL_DUMP_PIPELINES_TO_JSON_FILE
, aplikacje nie uruchomią się
Apple Remote Desktop
Jako root możesz włączyć tę usługę, a agent ARD będzie miał pełny dostęp do dysku, co użytkownik może wykorzystać, aby skopiować nową bazę danych użytkownika TCC.
Przez NFSHomeDirectory
TCC używa bazy danych w folderze HOME użytkownika do kontrolowania dostępu do zasobów specyficznych dla użytkownika w $HOME/Library/Application Support/com.apple.TCC/TCC.db. Dlatego jeśli użytkownikowi uda się zrestartować TCC z zmienną środowiskową $HOME wskazującą na inny folder, użytkownik mógłby utworzyć nową bazę danych TCC w /Library/Application Support/com.apple.TCC/TCC.db i oszukać TCC, aby przyznał dowolne uprawnienia TCC dowolnej aplikacji.
Należy zauważyć, że Apple używa ustawienia przechowywanego w profilu użytkownika w atrybucie NFSHomeDirectory
jako wartość $HOME
, więc jeśli skompromitujesz aplikację z uprawnieniami do modyfikowania tej wartości (kTCCServiceSystemPolicySysAdminFiles
), możesz uzbroić tę opcję w celu ominięcia TCC.
CVE-2021-30970 - Powerdir
Pierwszy POC używa dsexport i dsimport do modyfikacji folderu HOME użytkownika.
Uzyskaj blok csreq dla docelowej aplikacji.
Wsadź fałszywy plik TCC.db z wymaganym dostępem i blokiem csreq.
Wyeksportuj wpis usług katalogowych użytkownika za pomocą dsexport.
Zmodyfikuj wpis usług katalogowych, aby zmienić katalog domowy użytkownika.
Zaimportuj zmodyfikowany wpis usług katalogowych za pomocą dsimport.
Zatrzymaj tccd użytkownika i zrestartuj proces.
Drugi POC użył /usr/libexec/configd
, który miał com.apple.private.tcc.allow
z wartością kTCCServiceSystemPolicySysAdminFiles
.
Było możliwe uruchomienie configd
z opcją -t
, co pozwalało atakującemu określić niestandardowy pakiet do załadowania. Dlatego eksploit zastąpił metodę dsexport
i dsimport
zmiany katalogu domowego użytkownika z wstrzyknięciem kodu configd.
Aby uzyskać więcej informacji, sprawdź oryginalny raport.
Przez wstrzykiwanie procesu
Istnieją różne techniki wstrzykiwania kodu do procesu i nadużywania jego uprawnień TCC:
pagemacOS Process AbuseCo więcej, najczęstszym sposobem wstrzykiwania procesu do ominięcia TCC jest poprzez wtyczki (ładowanie bibliotek). Wtyczki to dodatkowy kod zazwyczaj w postaci bibliotek lub plist, który będzie ładowany przez główną aplikację i będzie wykonywany w jej kontekście. Dlatego jeśli główna aplikacja miała dostęp do plików objętych restrykcjami TCC (poprzez udzielone uprawnienia lub entitlements), niestandardowy kod również go będzie miał.
CVE-2020-27937 - Directory Utility
Aplikacja /System/Library/CoreServices/Applications/Directory Utility.app
miała entitlement kTCCServiceSystemPolicySysAdminFiles
, ładowała wtyczki z rozszerzeniem .daplug
i nie miała zabezpieczonej wersji uruchomieniowej.
Aby uzbroić to CVE, NFSHomeDirectory
jest zmieniany (nadużywając poprzedniego entitlementu), aby móc przejąć bazę danych TCC użytkowników w celu ominięcia TCC.
Aby uzyskać więcej informacji, sprawdź oryginalny raport.
CVE-2020-29621 - Coreaudiod
Binarny /usr/sbin/coreaudiod
miał uprawnienia com.apple.security.cs.disable-library-validation
oraz com.apple.private.tcc.manager
. Pierwsze pozwalające na wstrzyknięcie kodu, a drugie dające dostęp do zarządzania TCC.
Ten binarny pozwalał na ładowanie wtyczek firm trzecich z folderu /Library/Audio/Plug-Ins/HAL
. Dlatego było możliwe załadowanie wtyczki i nadużycie uprawnień TCC za pomocą tego PoC:
Aby uzyskać więcej informacji, sprawdź oryginalny raport.
Wtyczki warstwy abstrakcji urządzenia (DAL)
Aplikacje systemowe, które otwierają strumień kamery za pomocą Core Media I/O (aplikacje z kTCCServiceCamera
) wczytują w procesie te wtyczki znajdujące się w /Library/CoreMediaIO/Plug-Ins/DAL
(nieograniczone przez SIP).
Wystarczy przechowywać tam bibliotekę z konstruktorem ogólnym, aby móc wstrzyknąć kod.
Kilka aplikacji Apple było podatnych na to.
Firefox
Aplikacja Firefox miała uprawnienia com.apple.security.cs.disable-library-validation
i com.apple.security.cs.allow-dyld-environment-variables
:
Dla dalszych informacji na temat łatwego wykorzystania tego sprawdź oryginalny raport.
CVE-2020-10006
Binarny plik /system/Library/Filesystems/acfs.fs/Contents/bin/xsanctl
miał uprawnienia com.apple.private.tcc.allow
i com.apple.security.get-task-allow
, co pozwalało na wstrzyknięcie kodu do procesu i użycie uprawnień TCC.
CVE-2023-26818 - Telegram
Telegram miał uprawnienia com.apple.security.cs.allow-dyld-environment-variables
i com.apple.security.cs.disable-library-validation
, więc było możliwe nadużycie go do uzyskania dostępu do swoich uprawnień, takich jak nagrywanie za pomocą kamery. Możesz znaleźć ładunek w opisie.
Zauważ, jak użyć zmiennej środowiskowej do załadowania biblioteki, aby utworzyć niestandardowy plist do wstrzyknięcia tej biblioteki i użyć launchctl
do jej uruchomienia:
Poprzez otwieranie wywołań
Możliwe jest wywołanie open
nawet podczas działania w piaskownicy.
Skrypty terminala
Jest dość powszechne, aby nadać terminalowi Pełny dostęp do dysku (FDA), przynajmniej na komputerach używanych przez osoby techniczne. I możliwe jest wywołanie skryptów .terminal
z jego użyciem.
Skrypty .terminal
to pliki plist, takie jak ten z poleceniem do wykonania w kluczu CommandString
:
Aplikacja mogłaby zapisać skrypt terminala w lokalizacji takiej jak /tmp i uruchomić go za pomocą komendy:
Poprzez montowanie
CVE-2020-9771 - mount_apfs - obejście TCC i eskalacja uprawnień
Dowolny użytkownik (nawet nieuprzywilejowany) może utworzyć i zamontować migawkę Time Machine i uzyskać dostęp do WSZYSTKICH plików z tej migawki.
Jedynym wymaganym uprawnieniem jest, aby aplikacja używana (np. Terminal
) miała dostęp Pełnego Dostępu do Dysku (FDA) (kTCCServiceSystemPolicyAllfiles
), które muszą zostać udzielone przez administratora.
Więcej szczegółów można znaleźć w oryginalnym raporcie.
CVE-2021-1784 & CVE-2021-30808 - Montowanie nad plikiem TCC
Nawet jeśli plik bazy danych TCC jest chroniony, było możliwe zamontowanie nad katalogiem nowego pliku TCC.db:
Sprawdź pełne wykorzystanie w oryginalnym opisie.
asr
Narzędzie /usr/sbin/asr
pozwalało skopiować cały dysk i zamontować go w innym miejscu omijając zabezpieczenia TCC.
Usługi lokalizacyjne
Istnieje trzecia baza danych TCC w /var/db/locationd/clients.plist
wskazująca klientów uprawnionych do dostępu do usług lokalizacyjnych.
Folder /var/db/locationd/
nie był chroniony przed montowaniem DMG, więc było możliwe zamontowanie naszego własnego plist.
Przez aplikacje uruchamiane przy starcie
pagemacOS Auto StartPrzez grep
W kilku przypadkach pliki przechowują wrażliwe informacje, takie jak emaile, numery telefonów, wiadomości... w niechronionych lokalizacjach (co stanowi lukę w zabezpieczeniach Apple).
Kliknięcia syntetyczne
To już nie działa, ale działało w przeszłości:
Inny sposób korzystając z zdarzeń CoreGraphics:
Odnośniki
Last updated