macOS FS Tricks
Kombinacje uprawnień POSIX
Uprawnienia w katalogu:
odczyt - możesz wyświetlać wpisy katalogu
zapis - możesz usunąć/pisać pliki w katalogu oraz usunąć puste foldery.
Ale nie możesz usunąć/modyfikować niepustych folderów chyba że masz uprawnienia do zapisu nad nimi.
Nie możesz zmienić nazwy folderu, chyba że jesteś jego właścicielem.
wykonanie - masz prawo do przeglądania katalogu - jeśli nie masz tego prawa, nie możesz uzyskać dostępu do żadnych plików wewnątrz niego ani w żadnych podkatalogach.
Niebezpieczne kombinacje
Jak nadpisać plik/folder należący do roota, ale:
Jeden właściciel katalogu nadrzędnego w ścieżce to użytkownik
Jeden właściciel katalogu nadrzędnego w ścieżce to grupa użytkowników z uprawnieniami do zapisu
Grupa użytkowników ma uprawnienia do zapisu do pliku
Z dowolną z powyższych kombinacji atakujący mógłby wstrzyknąć link symboliczny/link twardy do oczekiwanej ścieżki, aby uzyskać uprzywilejowany dowolny zapis.
Specjalny przypadek R+X katalogu nadrzędnego
Jeśli w katalogu są pliki, do których tylko root ma dostęp do R+X, to nie są one dostępne dla nikogo innego. Więc podatność pozwalająca na przeniesienie pliku czytanego przez użytkownika, który nie może go odczytać z powodu tej restrykcji, z tego katalogu do innego, może być wykorzystana do odczytania tych plików.
Przykład w: https://theevilbit.github.io/posts/exploiting_directory_permissions_on_macos/#nix-directory-permissions
Link symboliczny / Link twardy
Jeśli uprzywilejowany proces zapisuje dane w pliku, który może być kontrolowany przez mniej uprzywilejowanego użytkownika, lub który mógł być wcześniej utworzony przez mniej uprzywilejowanego użytkownika. Użytkownik mógłby po prostu skierować go do innego pliku za pomocą linku symbolicznego lub twardego, a uprzywilejowany proces zapisze w tym pliku.
Sprawdź w innych sekcjach, gdzie atakujący mógłby wykorzystać dowolny zapis do eskalacji uprawnień.
.fileloc
Pliki z rozszerzeniem .fileloc
mogą wskazywać na inne aplikacje lub binaria, więc gdy są otwierane, aplikacja/binarny zostanie uruchomiony.
Przykład:
Dowolny FD
Jeśli możesz sprawić, że proces otworzy plik lub folder z wysokimi uprawnieniami, możesz nadużyć crontab
, aby otworzyć plik w /etc/sudoers.d
z EDITOR=exploit.py
, dzięki czemu exploit.py
uzyska dostęp do FD pliku wewnątrz /etc/sudoers
i go nadużyje.
Na przykład: https://youtu.be/f1HA5QhLQ7Y?t=21098
Unikanie sztuczek z atrybutami xattrs kwarantanny
Usuń to
Flaga uchg / uchange / uimmutable
Jeśli plik/folder ma ten atrybut niemożliwe będzie dodanie xattr do niego.
Montowanie defvfs
Montowanie devfs nie obsługuje xattr, więcej informacji znajdziesz w CVE-2023-32364
writeextattr ACL
Ta ACL zapobiega dodawaniu xattrs
do pliku
com.apple.acl.text xattr + AppleDouble
Format pliku AppleDouble kopiuje plik wraz z jego ACE.
W kodzie źródłowym można zobaczyć, że reprezentacja tekstu ACL przechowywana wewnątrz xattr o nazwie com.apple.acl.text
zostanie ustawiona jako ACL w zdekompresowanym pliku. Dlatego jeśli spakowano aplikację do pliku zip w formacie AppleDouble z ACL uniemożliwiającym zapisywanie innych xattr... xattr kwarantanny nie został ustawiony w aplikacji:
Sprawdź oryginalny raport po więcej informacji.
Aby odtworzyć to, najpierw musimy uzyskać poprawny ciąg acl:
(Note that even if this works the sandbox write the quarantine xattr before)
Nie jest to naprawdę konieczne, ale zostawiam to tutaj na wszelki wypadek:
pagemacOS xattr-acls extra stuffOminięcie podpisów kodu
Paczki zawierają plik _CodeSignature/CodeResources
, który zawiera skrót każdego pojedynczego pliku w paczce. Należy zauważyć, że skrót CodeResources jest również osadzony w pliku wykonywalnym, więc nie możemy tego zmienić.
Jednak istnieją pewne pliki, których sygnatura nie będzie sprawdzana, posiadają one klucz omit w pliku plist, na przykład:
Możliwe jest obliczenie sygnatury zasobu z wiersza poleceń za pomocą:
Zazwyczaj macOS montuje dysk, komunikując się z usługą Mach com.apple.DiskArbitrarion.diskarbitrariond
(dostarczaną przez /usr/libexec/diskarbitrationd
). Jeśli dodamy parametr -d
do pliku plist LaunchDaemons i zrestartujemy system, zapisze on logi w /var/log/diskarbitrationd.log
.
Jednakże możliwe jest użycie narzędzi takich jak hdik
i hdiutil
do bezpośredniej komunikacji z rozszerzeniem jądra com.apple.driver.DiskImages
.
Arbitrary Writes
Skrypty sh okresowe
Jeśli twój skrypt może zostać zinterpretowany jako skrypt powłoki, możesz nadpisać skrypt powłoki /etc/periodic/daily/999.local
, który zostanie uruchomiony codziennie.
Możesz symulować wykonanie tego skryptu za pomocą: sudo periodic daily
Daemony
Napisz dowolny LaunchDaemon jak /Library/LaunchDaemons/xyz.hacktricks.privesc.plist
z plikiem plist wykonującym dowolny skrypt, na przykład:
Plik sudoers
Jeśli masz dowolne uprawnienia do zapisu, możesz utworzyć plik w folderze /etc/sudoers.d/
nadając sobie uprawnienia sudo.
Pliki ścieżki
Plik /etc/paths
jest jednym z głównych miejsc, które uzupełniają zmienną środowiskową PATH. Musisz być rootem, aby go nadpisać, ale jeśli skrypt z procesu uprzywilejowanego wykonuje polecenie bez pełnej ścieżki, możesz próbować go przechwycić, modyfikując ten plik.
Możesz również pisać pliki w /etc/paths.d
aby załadować nowe foldery do zmiennej PATH
.
Generowanie plików z możliwością zapisu jako inne użytkowniki
To spowoduje wygenerowanie pliku należącego do roota, który jest zapisywalny przeze mnie (kod stąd). To również może działać jako eskalacja uprawnień:
POSIX Pamięć współdzielona
Pamięć współdzielona POSIX pozwala procesom w systemach operacyjnych zgodnych z POSIX na dostęp do wspólnej przestrzeni pamięci, ułatwiając szybszą komunikację w porównaniu z innymi metodami komunikacji międzyprocesowej. Polega ona na tworzeniu lub otwieraniu obiektu pamięci współdzielonej za pomocą shm_open()
, ustawianiu jego rozmiaru za pomocą ftruncate()
, a następnie mapowaniu go do przestrzeni adresowej procesu za pomocą mmap()
. Procesy mogą następnie bezpośrednio czytać z tej przestrzeni pamięci i zapisywać do niej. Aby zarządzać równoczesnym dostępem i zapobiegać korupcji danych, często używane są mechanizmy synchronizacji, takie jak mutexy lub semafory. Na koniec procesy odmapowują i zamykają pamięć współdzieloną za pomocą munmap()
i close()
, a opcjonalnie usuwają obiekt pamięci za pomocą shm_unlink()
. Ten system jest szczególnie skuteczny w efektywnej, szybkiej komunikacji międzyprocesowej w środowiskach, w których wiele procesów musi szybko uzyskiwać dostęp do wspólnych danych.
Zabezpieczone deskryptory macOS
Zabezpieczone deskryptory macOS to funkcja bezpieczeństwa wprowadzona w systemie macOS, mająca na celu zwiększenie bezpieczeństwa i niezawodności operacji na deskryptorach plików w aplikacjach użytkownika. Te zabezpieczone deskryptory umożliwiają powiązanie określonych ograniczeń lub "strażników" z deskryptorami plików, które są egzekwowane przez jądro systemu.
Ta funkcja jest szczególnie przydatna do zapobiegania pewnym klasom podatności bezpieczeństwa, takim jak nieautoryzowany dostęp do plików lub warunki wyścigu. Te podatności występują na przykład wtedy, gdy wątek uzyskuje dostęp do deskryptora pliku, dając innemu podatnemu wątkowi dostęp do niego lub gdy deskryptor pliku jest dziedziczony przez podatny proces potomny. Niektóre funkcje związane z tą funkcjonalnością to:
guarded_open_np
: Otwiera FD z ochronąguarded_close_np
: Zamyka gochange_fdguard_np
: Zmienia flagi ochrony na deskryptorze (nawet usuwając ochronę strażnika)
Odnośniki
Last updated