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

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:

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 (bez belog prostora), koji lako odgovaraju ne-sistemskim putanjama u lokacijama zapisivim od strane korisnika:

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:]]*}
  • 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

  1. Stage a binary in a path matching one of the permissive regexes, e.g. /tmp/httpd or ./nginx
  2. Run it as a low-privileged user and ensure it opens any listening socket
  3. 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)

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č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:

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: 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

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

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