macOS FS Tricks
POSIX-toestemmingskombinasies
Toestemmings in 'n gids:
lees - jy kan die gidsinskrywings opsom
skryf - jy kan lêers skryf/verwyder in die gids en jy kan leë mappe verwyder.
Maar jy kan nie nie-leë mappe verwyder/wysig tensy jy skryftoestemmings daaroor het nie.
Jy kan nie die naam van 'n map wysig tensy jy die eienaar daarvan is nie.
uitvoer - jy is toegelaat om deur die gids te beweeg - as jy nie hierdie reg het nie, kan jy nie enige lêers daarin, of in enige subdossiers, bereik nie.
Gevaarlike Kombinasies
Hoe om 'n lêer/map wat deur root besit word te oorskryf, maar:
Een ouer gids eienaar in die pad is die gebruiker
Een ouer gids eienaar in die pad is 'n gebruikersgroep met skryftoegang
'n Gebruikers groep het skryf toegang tot die lêer
Met enige van die vorige kombinasies kan 'n aanvaller 'n sym/harde skakel inspuit na die verwagte pad om 'n bevoorregte willekeurige skryf te verkry.
Gidsroet R+X Spesiale geval
As daar lêers in 'n gids is waar slegs root R+X-toegang het, is daardie lêers nie toeganklik vir enigiemand anders nie. Dus kan 'n kwesbaarheid wat toelaat om 'n lêer leesbaar deur 'n gebruiker te skuif, wat nie gelees kan word as gevolg van daardie beperking, van hierdie gids na 'n ander een, misbruik word om hierdie lêers te lees.
Voorbeeld in: https://theevilbit.github.io/posts/exploiting_directory_permissions_on_macos/#nix-directory-permissions
Simboliese Skakel / Harde Skakel
As 'n bevoorregte proses data skryf in 'n lêer wat deur 'n laer bevoorregte gebruiker beheer kan word, of wat vooraf geskep kan word deur 'n laer bevoorregte gebruiker. Die gebruiker kan dit net na 'n ander lêer wys deur 'n Simboliese of Harde skakel, en die bevoorregte proses sal op daardie lêer skryf.
Kyk na die ander afdelings waar 'n aanvaller 'n willekeurige skryf kan misbruik om voorregte te eskaleer.
.fileloc
Lêers met die .fileloc
uitbreiding kan na ander toepassings of binêre lêers wys sodat wanneer hulle oopgemaak word, die toepassing/binêre lêer die een sal wees wat uitgevoer word.
Voorbeeld:
Willekeurige FD
As jy 'n proses kan laat 'n lêer of 'n vouer met hoë voorregte oopmaak, kan jy crontab
misbruik om 'n lêer in /etc/sudoers.d
met EDITOR=exploit.py
oop te maak, sodat die exploit.py
die FD na die lêer binne /etc/sudoers
sal kry en dit kan misbruik.
Byvoorbeeld: https://youtu.be/f1HA5QhLQ7Y?t=21098
Vermy kwarantyn xattrs truuks
Verwyder dit
uchg / uchange / uimmutable vlag
Indien 'n lêer / vouer hierdie onveranderlike eienskap het, sal dit nie moontlik wees om 'n xattr daarop te plaas nie.
defvfs berg
'n devfs berg ondersteun nie xattr nie, meer inligting in CVE-2023-32364
skryfextattr ACL
Hierdie ACL voorkom dat xattrs
by die lêer gevoeg word
com.apple.acl.text xattr + AppleDouble
AppleDouble lêerformaat kopieer 'n lêer saam met sy ACEs.
In die bronkode is dit moontlik om te sien dat die ACL-teksvoorstelling wat binne die xattr genoem word com.apple.acl.text
gestoor word, as ACL in die gedekomprimeerde lêer ingestel gaan word. Dus, as jy 'n aansoek in 'n zip-lêer met die AppleDouble lêerformaat saam met 'n ACL wat voorkom dat ander xattrs daarin geskryf kan word, saamgedruk het... die karantyn xattr was nie in die aansoek ingestel nie:
Kyk na die oorspronklike verslag vir meer inligting.
Om dit te dupliseer, moet ons eers die korrekte acl-string kry:
(Note that selfs as dit werk die sandboks skryf die karantyn xattr voor)
Nie regtig nodig nie, maar ek los dit daar net in geval:
pagemacOS xattr-acls extra stuffBypass Kodehandtekeninge
Bundles bevat die lêer _CodeSignature/CodeResources
wat die hash van elke enkele lêer in die bundel bevat. Let daarop dat die hash van CodeResources ook ingebou is in die uitvoerbare lêer, so ons kan nie daarmee mors nie.
Daar is egter sommige lêers waarvan die handtekening nie nagegaan sal word nie, hierdie het die sleutel uitlaat in die plist, soos:
Dit is moontlik om die handtekening van 'n hulpbron van die opdraggelynpunt te bereken met:
Gewoonlik koppel macOS skyf deur met die com.apple.DiskArbitrarion.diskarbitrariond
Mach-diens te praat (verskaf deur /usr/libexec/diskarbitrationd
). As die parameter -d
by die LaunchDaemons plist-lêer gevoeg word en herlaai word, sal dit logboeke stoor in /var/log/diskarbitrationd.log
.
Dit is egter moontlik om gereedskap soos hdik
en hdiutil
te gebruik om direk met die com.apple.driver.DiskImages
kext te kommunikeer.
Willekeurige Skrywes
Periodieke sh-skripte
As jou skrip geïnterpreteer kan word as 'n shell-skrip, kan jy die /etc/periodic/daily/999.local
shell-skrip oorskryf wat elke dag geaktiveer sal word.
Jy kan 'n nep uitvoering van hierdie skrip maak met: sudo periodic daily
Daemons
Skryf 'n willekeurige LaunchDaemon soos /Library/LaunchDaemons/xyz.hacktricks.privesc.plist
met 'n plist wat 'n willekeurige skrip uitvoer soos:
Sudoers-lêer
Indien jy willekeurige skryfregte het, kan jy 'n lêer binne die /etc/sudoers.d/
-map skep wat jou sudo-bevoegdhede toeken.
PAD-lêers
Die lêer /etc/paths
is een van die hoofplekke wat die PAD-omgewingsveranderlike populeer. Jy moet 'n hoofgebruiker wees om dit te oorskryf, maar as 'n skriffie van 'n bevoorregte proses 'n paar opdragte sonder die volledige pad uitvoer, kan jy dit dalk kaap deur hierdie lêer te wysig.
Jy kan ook lêers skryf in /etc/paths.d
om nuwe vouers in die PAD
-omgewingsveranderlike te laai.
Skep skryfbare lêers as ander gebruikers
Dit sal 'n lêer genereer wat aan root behoort en deur my oorskryf kan word (kode vanaf hier). Dit mag ook werk vir bevoorregte eskalasie:
POSIX Gedeelde Geheue
POSIX gedeelde geheue maak dit vir prosesse in POSIX-samewerkende bedryfstelsels moontlik om 'n gemeenskaplike geheue-areas te benader, wat vinniger kommunikasie fasiliteer in vergelyking met ander interproses kommunikasiemetodes. Dit behels die skep of oopmaak van 'n gedeelde geheue-object met shm_open()
, die instelling van sy grootte met ftruncate()
, en die koppel dit in die proses se adresruimte met mmap()
. Prosesse kan dan direk van hierdie geheue-area lees en daarnaartoe skryf. Om gelyktydige toegang te bestuur en datakorrupsie te voorkom, word sinchronisasie meganismes soos mutexes of semafore dikwels gebruik. Laastens, prosesse maak die gedeelde geheue ongedaan en sluit dit met munmap()
en close()
, en verwyder opsioneel die geheue-object met shm_unlink()
. Hierdie stelsel is veral doeltreffend vir doeltreffende, vinnige IPC in omgewings waar meervoudige prosesse vinnig toegang tot gedeelde data benodig.
macOS Bewaakte Beskrywers
macOS bewaakte beskrywers is 'n veiligheidskenmerk wat in macOS ingevoer is om die veiligheid en betroubaarheid van lêerbeskrywer-operasies in gebruikersprogramme te verbeter. Hierdie bewaakte beskrywers bied 'n manier om spesifieke beperkings of "wagte" te assosieer met lêerbeskrywers, wat deur die kernel afgedwing word.
Hierdie kenmerk is veral nuttig om sekere klasse van veiligheidskwesbaarhede soos onbevoegde lêertoegang of wedloopvoorwaardes te voorkom. Hierdie kwesbaarhede kom voor wanneer byvoorbeeld 'n draad 'n lêerbeskrywing benader wat 'n ander kwesbare draad toegang daartoe gee of wanneer 'n lêerbeskrywer oorerf word deur 'n kwesbare kinderproses. Sommige funksies wat verband hou met hierdie funksionaliteit is:
guarded_open_np
: Maak 'n FD oop met 'n wagguarded_close_np
: Maak dit toechange_fdguard_np
: Verander wagvlaggies op 'n beskrywer (selfs om die wagbeskerming te verwyder)
Verwysings
Last updated