macOS FS Tricks
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Uprawnienia w katalogu:
odczyt - możesz wyliczać wpisy w katalogu
zapis - możesz usuwać/zapisywać pliki w katalogu i możesz usuwać puste foldery.
Ale nie możesz usuwać/modyfikować folderów, które nie są puste, chyba że masz nad nimi uprawnienia do zapisu.
Nie możesz zmieniać nazwy folderu, chyba że jesteś jego właścicielem.
wykonanie - masz prawo do przechodzenia przez katalog - jeśli nie masz tego prawa, nie możesz uzyskać dostępu do żadnych plików w nim ani w żadnych podkatalogach.
Jak nadpisać plik/folder należący do roota, ale:
Jeden rodzic właściciel katalogu w ścieżce to użytkownik
Jeden rodzic właściciel katalogu w ścieżce to grupa użytkowników z dostępem do zapisu
Grupa użytkowników ma dostęp do zapisu do pliku
Przy dowolnej z powyższych kombinacji, atakujący mógłby wstrzyknąć link symboliczny/twardy w oczekiwanej ścieżce, aby uzyskać uprzywilejowany, dowolny zapis.
Jeśli w katalogu znajdują się pliki, w których tylko root ma dostęp R+X, to nie są one dostępne dla nikogo innego. Zatem luka pozwalająca na przeniesienie pliku czytanego przez użytkownika, który nie może być odczytany z powodu tej ograniczenia, z tego folderu do innego, mogłaby być wykorzystana do odczytu tych plików.
Przykład w: https://theevilbit.github.io/posts/exploiting_directory_permissions_on_macos/#nix-directory-permissions
Jeśli uprzywilejowany proces zapisuje dane w pliku, który mógłby być kontrolowany przez użytkownika o niższych uprawnieniach, lub który mógłby być wcześniej utworzony przez użytkownika o niższych uprawnieniach. Użytkownik mógłby po prostu wskazać go na inny plik 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ń.
Pliki z rozszerzeniem .fileloc
mogą wskazywać na inne aplikacje lub binaria, więc gdy są otwierane, aplikacja/binary będzie tą, która zostanie uruchomiona.
Przykład:
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 FD do pliku w /etc/sudoers
i go nadużyje.
Na przykład: https://youtu.be/f1HA5QhLQ7Y?t=21098
Jeśli plik/folder ma ten atrybut niezmienności, nie będzie możliwe dodanie xattr do niego.
Montaż devfs nie obsługuje xattr, więcej informacji w CVE-2023-32364
Ten ACL zapobiega dodawaniu xattrs
do pliku
AppleDouble format pliku kopiuje plik wraz z jego ACE.
W kodzie źródłowym można zobaczyć, że tekstowa reprezentacja ACL przechowywana w xattr o nazwie com.apple.acl.text
zostanie ustawiona jako ACL w zdekompresowanym pliku. Więc, jeśli skompresujesz aplikację do pliku zip w formacie AppleDouble z ACL, który uniemożliwia zapisanie innych xattrs... xattr kwarantanny nie został ustawiony w aplikacji:
Sprawdź oryginalny raport po więcej informacji.
Aby to powtórzyć, najpierw musimy uzyskać poprawny ciąg acl:
(Note that even if this works the sandbox write the quarantine xattr before)
Nie jest to naprawdę potrzebne, ale zostawiam to na wszelki wypadek:
macOS xattr-acls extra stuffBundles zawierają plik _CodeSignature/CodeResources
, który zawiera hash każdego pojedynczego pliku w bundle. Zauważ, że hash CodeResources jest również osadzony w wykonywalnym, więc nie możemy się z tym bawić.
Jednak istnieją pewne pliki, których podpis nie będzie sprawdzany, mają one klucz omit w plist, takie jak:
Możliwe jest obliczenie podpisu zasobu z poziomu CLI za pomocą:
Użytkownik może zamontować niestandardowy dmg utworzony nawet na istniejących folderach. W ten sposób można utworzyć niestandardowy pakiet dmg z niestandardową zawartością:
Zazwyczaj macOS montuje dysk, komunikując się z usługą Mach com.apple.DiskArbitrarion.diskarbitrariond
(dostarczaną przez /usr/libexec/diskarbitrationd
). Jeśli dodasz parametr -d
do pliku plist LaunchDaemons i uruchomisz ponownie, zapisze logi w /var/log/diskarbitrationd.log
.
Jednak możliwe jest użycie narzędzi takich jak hdik
i hdiutil
, aby komunikować się bezpośrednio z kextem com.apple.driver.DiskImages
.
Jeśli twój skrypt mógłby być interpretowany jako skrypt powłoki, możesz nadpisać /etc/periodic/daily/999.local
skrypt powłoki, który będzie uruchamiany codziennie.
Możesz sfałszować wykonanie tego skryptu za pomocą: sudo periodic daily
Napisz dowolny LaunchDaemon jak /Library/LaunchDaemons/xyz.hacktricks.privesc.plist
z plikiem plist wykonującym dowolny skrypt jak:
Just generate the script /Applications/Scripts/privesc.sh
with the commands you would like to run as root.
If you have arbitrary write, you could create a file inside the folder /etc/sudoers.d/
granting yourself sudo privileges.
The file /etc/paths
is one of the main places that populates the PATH env variable. You must be root to overwrite it, but if a script from privileged process is executing some command without the full path, you might be able to hijack it modifying this file.
You can also write files in /etc/paths.d
to load new folders into the PATH
env variable.
To wygeneruje plik, który należy do roota i jest zapisywalny przez mnie (code from here). To może również działać jako privesc:
POSIX shared memory pozwala procesom w systemach operacyjnych zgodnych z POSIX na dostęp do wspólnego obszaru pamięci, co ułatwia szybszą komunikację w porównaniu do innych metod komunikacji międzyprocesowej. Polega to na tworzeniu lub otwieraniu obiektu pamięci współdzielonej za pomocą shm_open()
, ustawianiu jego rozmiaru za pomocą ftruncate()
oraz mapowaniu go do przestrzeni adresowej procesu za pomocą mmap()
. Procesy mogą następnie bezpośrednio odczytywać i zapisywać do tego obszaru pamięci. Aby zarządzać równoczesnym dostępem i zapobiegać uszkodzeniu danych, często stosuje się 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 przypadku efektywnej, szybkiej IPC w środowiskach, w których wiele procesów musi szybko uzyskiwać dostęp do wspólnych danych.
macOS guarded descriptors to funkcja zabezpieczeń wprowadzona w macOS, mająca na celu zwiększenie bezpieczeństwa i niezawodności operacji na deskryptorach plików w aplikacjach użytkownika. Te zabezpieczone deskryptory zapewniają sposób na powiązanie określonych ograniczeń lub "strażników" z deskryptorami plików, które są egzekwowane przez jądro.
Funkcja ta jest szczególnie przydatna w zapobieganiu pewnym klasom luk w zabezpieczeniach, takim jak nieautoryzowany dostęp do plików lub warunki wyścigu. Te luki występują, gdy na przykład wątek uzyskuje dostęp do opisu 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 go
change_fdguard_np
: Zmienia flagi ochrony na deskryptorze (nawet usuwając ochronę)
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)