VMware Tools service discovery LPE (CWE-426) via regex-based binary discovery (CVE-2025-41244)
Reading time: 8 minutes
tip
Učite i vežbajte AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking:
HackTricks Training GCP Red Team Expert (GRTE)
Učite i vežbajte Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.
Ova tehnika zloupotrebljava pipeline-ove za otkrivanje servisa vođene regex-ovima koji parsiraju command line-ove pokrenutih procesa da bi zaključili verzije servisa, a zatim pokreću kandidat binarni fajl sa "version" flag-om. Kada permisivni pattern-i 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: Lokalna eskalacija privilegija do root (ili do privilegovane discovery naloga)
- Root cause: Untrusted Search Path (CWE-426) + permisivno regex podudaranje command line-ova procesa
- Affected: open-vm-tools/VMware Tools na Linuxu (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 preko VMware Tools koristeći konfigurisane privilegovane kredencijale.
- Credential-less (modern): Discovery logika radi unutar VMware Tools, koji već ima privilegije u guest-u.
Oba moda na kraju pokreću shell logiku koja skenira procese sa listening socket-ovima, ekstrahuje path komande koja se poklapa putem regex-a i izvršava prvi argv token sa version flag-om.
Root cause and vulnerable pattern (open-vm-tools)
U open-vm-tools, serviceDiscovery plugin skripta get-versions.sh podudara kandidat binarnih fajlova koristeći široke regularne izraze i izvršava prvi token bez ikakve validacije trusted-path:
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 (bez belog prostora), koji lako odgovaraju ne-sistemskim putanjama u lokacijama zapisivim od strane korisnika:
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:]]*}
- No whitelist/allowlist of trusted system paths; any discovered listener with a matching name is executed with -v/--version
Ovo stvara untrusted search path execution primitive: arbitrary binaries located in world-writable directories (e.g., /tmp/httpd) get executed by a privileged component.
Exploitation (both credential-less and credential-based modes)
Preduslovi
- Možete pokrenuti neprivilegovan proces koji otvara listening socket na guest-u.
- discovery job je omogućen i radi periodično (istorijski ~5 minuta).
Koraci
- Stage a binary in a path matching one of the permissive regexes, e.g. /tmp/httpd or ./nginx
- Run it as a low-privileged user and ensure it opens any listening socket
- Wait for the discovery cycle; the privileged collector will automatically execute: /tmp/httpd -v (or similar), running your program as root
Minimalni demo (koristeći NVISO’s approach)
# 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čna linija procesa
- Sa kredencijalima: /usr/bin/vmtoolsd -> /bin/sh /tmp/VMware-SDMP-Scripts-.../script_...sh -> /tmp/httpd -v -> /bin/sh -i
- Bez kredencijala: /bin/sh .../get-versions.sh -> /tmp/httpd -v -> /bin/sh -i
Artefakti (sa kredencijalima) Pronađene SDMP wrapper skripte u /tmp/VMware-SDMP-Scripts-{UUID}/ mogu pokazati direktno izvršavanje zlonamerne putanje:
/tmp/httpd -v >"/tmp/VMware-SDMP-Scripts-{UUID}/script_-{ID}_0.stdout" 2>"/tmp/VMware-SDMP-Scripts-{UUID}/script_-{ID}_0.stderr"
Generalizacija tehnike: regex-driven discovery abuse (portable pattern)
Mnogi agenti i monitoring paketi implementiraju otkrivanje verzija/servisa na sledeći način:
- Enumerisanje procesa sa socket-ovima koji slušaju
- Pregledanje argv/command linija pomoću permisivnih regex-a (npr. patterni koji sadrže \S)
- Izvršavanje pronađenog puta sa benignim flagom kao -v, --version, -V, -h
Ako regex prihvata nepouzdane putanje i putanja se izvršava iz privilegovanog konteksta, dobija se CWE-426 Untrusted Search Path execution.
Recept za zloupotrebu
- Imenujte svoj binarni fajl kao kod uobičajenih daemon-a koje regex verovatno poklapa: httpd, nginx, mysqld, dataserver
- Postavite ga u direktorijum sa mogućnošću pisanja: /tmp/httpd, ./nginx
- Osigurajte da se poklapa sa regex-om i otvori bilo koji port koji će biti izlistan
- Sačekajte zakazani kolektor; dobićete automatsko privilegovano pokretanje
-v
Napomena o kamuflaži: Ovo je u skladu sa MITRE ATT&CK T1036.005 (Match Legitimate Name or Location) radi povećanja verovatnoće poklapanja i prikrivenosti.
Ponovo upotrebljiv trik za privilegovani I/O relay
- Napravite helper tako da pri privilegovanom pokretanju (-v/--version) uspostavi vezu sa poznatim rendezvous-om (npr. Linux abstract UNIX socket kao @cve) i poveže stdio sa /bin/sh -i. Ovo izbegava artefakte na disku i radi u mnogim okruženjima gde se isti binarni fajl ponovo pokreće sa flagom.
Detekcija i DFIR smernice
Hunting queries
- Neobični child procesi vmtoolsd ili get-versions.sh kao što su /tmp/httpd, ./nginx, /tmp/mysqld
- Bilo koje izvršavanje apsolutnih putanja van sistema od strane discovery skripti (gledajte razmake u ${COMMAND%%...} ekspanzijama)
- ps -ef --forest za vizualizaciju stabala nasledstva: vmtoolsd -> get-versions.sh ->
Na Aria SDMP (credential-based)
- Pregledajte /tmp/VMware-SDMP-Scripts-{UUID}/ za tranzijentne skripte i stdout/stderr artefakte koji pokazuju izvršavanje putanja napadača
Policy/telemetry
- Alarmirajte kada privilegovani kolektori izvršavaju iz prefiksa van sistema: ^/(tmp|home|var/tmp|dev/shm)/
- Nadzor integriteta fajlova za get-versions.sh i VMware Tools plugins
Mitigacije
- Patch: Primenite Broadcom/VMware ažuriranja za CVE-2025-41244 (Tools and Aria Operations SDMP)
- Onemogućite ili ograničite discovery bez kredencijala gde je moguće
- Validirajte pouzdane putanje: ograničite izvršavanje na direktorijume sa liste dozvoljenih (/usr/sbin, /usr/bin, /sbin, /bin) i samo na tačno poznate binarne fajlove
- Izbegavajte permisivne regex-e sa \S; preferirajte ukotvljene, eksplicitne apsolutne putanje i tačna imena komandi
- Smanjite privilegije discovery helper-a gde je moguće; sandboxujte (seccomp/AppArmor) da smanjite uticaj
- Nadzirite i alarmirajte kod vmtoolsd/get-versions.sh koji izvršavaju putanje van sistema
Napomene za odbrambene timove i implementatore
Bezbedniji model poklapanja i izvršenja
# 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)
- Broadcom advisory for CVE-2025-41244
- open-vm-tools – serviceDiscovery/get-versions.sh (stable-13.0.0)
- MITRE ATT&CK T1036.005 – Match Legitimate Name or Location
- CWE-426: Untrusted Search Path
tip
Učite i vežbajte AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking:
HackTricks Training GCP Red Team Expert (GRTE)
Učite i vežbajte Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.
HackTricks