macOS FS Tricks
Kombinacije POSIX dozvola
Dozvole u direktorijumu:
čitanje - možete izlistati unose u direktorijumu
pisanje - možete brisati/pisati fajlove u direktorijumu i možete brisati prazne foldere.
Ali ne možete brisati/modifikovati neprazne foldere osim ako imate dozvole za pisanje nad njima.
Ne možete modifikovati ime foldera osim ako ga posedujete.
izvršavanje - dozvoljeno vam je traverzovati direktorijum - ako nemate ovu dozvolu, ne možete pristupiti bilo kojim fajlovima unutra, ili u bilo kojim poddirektorijumima.
Opasne Kombinacije
Kako prebrisati fajl/folder koji je u vlasništvu root-a, ali:
Jedan roditeljski direktorijum vlasnik u putanji je korisnik
Jedan roditeljski direktorijum vlasnik u putanji je grupa korisnika sa pristupom pisanju
Grupa korisnika ima pristup pisanju fajlu
Sa bilo kojom od prethodnih kombinacija, napadač bi mogao ubaciti simbolički ili tvrdi link na očekivanu putanju kako bi dobio privilegovano proizvoljno pisanje.
Poseban slučaj Folder root R+X
Ako postoje fajlovi u direktorijumu gde samo root ima R+X pristup, ti fajlovi nisu dostupni nikome drugom. Dakle, ranjivost koja omogućava pomeranje fajla koji je čitljiv za korisnika, a koji ne može biti pročitan zbog te restrikcije, iz ovog foldera u drugi, može biti zloupotrebljena da bi se pročitali ti fajlovi.
Simbolički Link / Tvrdi Link
Ako privilegovani proces piše podatke u fajl koji bi mogao biti kontrolisan od strane korisnika sa manje privilegija, ili koji bi mogao biti prethodno kreiran od strane korisnika sa manje privilegija. Korisnik jednostavno može usmeriti na drugi fajl putem Simboličkog ili Tvrdog linka, i privilegovani proces će pisati na taj fajl.
Proverite u drugim sekcijama gde napadač može zloupotrebiti proizvoljno pisanje da bi eskalirao privilegije.
.fileloc
Fajlovi sa ekstenzijom .fileloc
mogu pokazivati na druge aplikacije ili binarne fajlove tako da kada se otvore, aplikacija/binarni fajl će biti izvršen.
Primer:
Proizvoljni FD
Ako možete naterati proces da otvori datoteku ili fasciklu sa visokim privilegijama, možete zloupotrebiti crontab
da otvori datoteku u /etc/sudoers.d
sa EDITOR=exploit.py
, tako da će exploit.py
dobiti FD ka datoteci unutar /etc/sudoers
i zloupotrebiti je.
Na primer: https://youtu.be/f1HA5QhLQ7Y?t=21098
Trikovi za izbegavanje xattrs karantina
Uklonite ga
uchg / uchange / uimmutable zastava
Ako datoteka/folder ima ovaj atribut nepromenljivosti, neće biti moguće staviti xattr na nju.
Montiranje defvfs
Devfs montiranje ne podržava xattr, više informacija na CVE-2023-32364
writeextattr ACL
Ova ACL sprečava dodavanje xattrs
datoteci.
com.apple.acl.text xattr + AppleDouble
AppleDouble format datoteke kopira datoteku zajedno sa svojim ACE-ovima.
U izvornom kodu moguće je videti da se ACL tekstualna reprezentacija čuva unutar xattr-a nazvanog com.apple.acl.text
i postavlja se kao ACL u dekompresovanoj datoteci. Dakle, ako ste kompresovali aplikaciju u zip datoteku sa AppleDouble formatom datoteke sa ACL-om koji sprečava pisanje drugih xattr-ova u nju... karantinski xattr nije postavljen u aplikaciju:
Proverite originalni izveštaj za više informacija.
Da biste replicirali ovo, prvo moramo dobiti tačan ACL string:
(Notea da čak i ako ovo funkcioniše, sandbox upisuje karantinski xattr pre)
Nije baš potrebno, ali ostavljam to tamo samo u slučaju:
pagemacOS xattr-acls extra stuffZaobilaženje Koda Potpisa
Bundles sadrže datoteku _CodeSignature/CodeResources
koja sadrži hash svake pojedinačne datoteke u bundle-u. Imajte na umu da je hash CodeResources-a takođe ugrađen u izvršnu datoteku, tako da s tim ne možemo manipulisati.
Međutim, postoje neke datoteke čji potpis neće biti proveren, one imaju ključ za izostavljanje u plist-u, kao što je:
Moguće je izračunati potpis resursa sa terminala pomoću:
Montiranje dmg datoteka
Korisnik može montirati prilagođenu dmg datoteku čak i preko nekih postojećih fascikli. Evo kako možete kreirati prilagođeni dmg paket sa prilagođenim sadržajem:
Obično macOS montira disk razgovarajući sa com.apple.DiskArbitrarion.diskarbitrariond
Mach servisom (koji pruža /usr/libexec/diskarbitrationd
). Ako dodate parametar -d
u LaunchDaemons plist fajl i ponovo pokrenete, on će čuvati logove u /var/log/diskarbitrationd.log
.
Međutim, moguće je koristiti alate poput hdik
i hdiutil
da komunicirate direktno sa com.apple.driver.DiskImages
kextom.
Proizvoljni upisi
Periodični sh skriptovi
Ako vaša skripta može biti tumačena kao shell skripta možete prebrisati /etc/periodic/daily/999.local
shell skriptu koja će biti pokrenuta svakog dana.
Možete falsifikovati izvršenje ove skripte sa: sudo periodic daily
Demoni
Napišite proizvoljni LaunchDaemon poput /Library/LaunchDaemons/xyz.hacktricks.privesc.plist
sa plist-om koji izvršava proizvoljnu skriptu kao:
Sudoers File
Ako imate proizvoljan zapis, možete kreirati fajl unutar foldera /etc/sudoers.d/
dodeljujući sebi sudo privilegije.
PATH fajlovi
Fajl /etc/paths
je jedno od glavnih mesta koje popunjava PATH env promenljivu. Morate biti root da biste ga prepisali, ali ako skripta iz privilegovanog procesa izvršava neku komandu bez punog puta, možda ćete moći da je preuzmete modifikujući ovaj fajl.
Takođe možete pisati fajlove u /etc/paths.d
da učitate nove foldere u PATH
env promenljivu.
Generišite fajlove sa dozvolom pisanja kao drugi korisnici
Ovo će generisati fajl koji pripada root-u koji je moguće pisati od strane mene (kod odavde). Ovo takođe može raditi kao privesc:
POSIX Deljena memorija
POSIX deljena memorija omogućava procesima u operativnim sistemima koji su u skladu sa POSIX standardom da pristupe zajedničkom memorijskom prostoru, olakšavajući bržu komunikaciju u poređenju sa drugim metodama međuprocesne komunikacije. Uključuje kreiranje ili otvaranje objekta deljene memorije pomoću shm_open()
, postavljanje njegove veličine pomoću ftruncate()
, i mapiranje u prostor adresa procesa pomoću mmap()
. Procesi mogu direktno čitati i pisati u ovaj memorijski prostor. Za upravljanje konkurentnim pristupom i sprečavanje korupcije podataka, često se koriste mehanizmi sinhronizacije poput meksičkih bravica ili semafora. Na kraju, procesi odjavljuju i zatvaraju deljenu memoriju pomoću munmap()
i close()
, i opciono uklanjaju objekat memorije pomoću shm_unlink()
. Ovaj sistem je posebno efikasan za efikasnu, brzu IPC u okruženjima gde više procesa treba brzo pristupiti deljenim podacima.
macOS Čuvani deskriptori
macOS čuvani deskriptori su sigurnosna funkcija uvedena u macOS-u kako bi se poboljšala sigurnost i pouzdanost operacija sa deskriptorima datoteka u korisničkim aplikacijama. Ovi čuvani deskriptori pružaju način da se povežu određena ograničenja ili "čuvari" sa deskriptorima datoteka, koje sprovodi jezgro.
Ova funkcija je posebno korisna za sprečavanje određenih klasa sigurnosnih ranjivosti kao što su neovlašćen pristup datotekama ili trke uslova. Ove ranjivosti se javljaju kada na primer jedna nit pristupa deskripciji datoteke dajući drugoj ranjivoj niti pristup nad njom ili kada deskriptor datoteke nasleđuje ranjiv deteći proces. Neke funkcije povezane sa ovom funkcionalnošću su:
guarded_open_np
: Otvori FD sa čuvaromguarded_close_np
: Zatvori gachange_fdguard_np
: Promeni čuvarske zastave na deskriptoru (čak i uklanjanje zaštite čuvara)
Reference
Last updated