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
ccd436957c
commit
e7fbcde542
@ -110,6 +110,7 @@
|
||||
- [Checklist - Linux Privilege Escalation](linux-hardening/linux-privilege-escalation-checklist.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)
|
||||
- [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)
|
||||
- [Cisco - vmanage](linux-hardening/privilege-escalation/cisco-vmanage.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) μέσω ανίχνευσης δυαδικών αρχείων βασισμένης σε regex (CVE-2025-41244)
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
Αυτή η τεχνική καταχράται pipelines ανίχνευσης υπηρεσιών που καθοδηγούνται από regex και αναλύουν τις γραμμές εντολών των διεργασιών για να υπολογίσουν εκδόσεις υπηρεσιών και στη συνέχεια εκτελούν ένα υποψήφιο binary με ένα flag "version". Όταν επιτρεπτικά patterns αποδέχονται μη αξιόπιστες, ελεγχόμενες από τον attacker διαδρομές (π.χ. /tmp/httpd), ο privileged collector εκτελεί οποιοδήποτε δυαδικό από μη αξιόπιστη τοποθεσία, οδηγώντας σε τοπική κλιμάκωση προνομίων. NVISO τεκμηρίωσε αυτό στο VMware Tools/Aria Operations Service Discovery ως CVE-2025-41244.
|
||||
|
||||
- Επιπτώσεις: Τοπική κλιμάκωση προνομίων σε root (ή στον privileged discovery account)
|
||||
- Αιτία ρίζας: Untrusted Search Path (CWE-426) + permissive regex matching των γραμμών εντολών διεργασιών
|
||||
- Επηρεαζόμενα: open-vm-tools/VMware Tools σε Linux (credential-less discovery), VMware Aria Operations SDMP (credential-based discovery μέσω Tools/proxy)
|
||||
|
||||
## Πώς λειτουργεί η ανίχνευση υπηρεσιών VMware (σε υψηλό επίπεδο)
|
||||
|
||||
- Credential-based (legacy): Aria εκτελεί discovery scripts μέσα στο guest μέσω VMware Tools χρησιμοποιώντας διαμορφωμένα privileged credentials.
|
||||
- Credential-less (modern): Η λογική ανακάλυψης τρέχει εντός του VMware Tools, ήδη privileged μέσα στο guest.
|
||||
|
||||
Και οι δύο λειτουργίες τελικά τρέχουν shell λογική που σαρώνει διεργασίες με listening sockets, εξάγει ένα matching command path μέσω regex, και εκτελεί το πρώτο argv token με ένα version flag.
|
||||
|
||||
## Root cause and vulnerable pattern (open-vm-tools)
|
||||
|
||||
Στο open-vm-tools, το serviceDiscovery plugin script get-versions.sh ταιριάζει υποψήφια binaries χρησιμοποιώντας ευρείες regular expressions και εκτελεί το πρώτο token χωρίς καμία trusted-path validation:
|
||||
```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
|
||||
}
|
||||
```
|
||||
Καλείται με επιτρεπτικά πρότυπα που περιέχουν \S (μη-διάστημα) και που θα ταιριάξουν άνετα με μη-συστημικές διαδρομές σε τοποθεσίες εγγράψιμες από τον χρήστη:
|
||||
```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
|
||||
```
|
||||
- Η εξαγωγή χρησιμοποιεί grep -Eo και παίρνει το πρώτο token: ${COMMAND%%[[:space:]]*}
|
||||
- Δεν υπάρχει whitelist/allowlist trusted system paths· οποιοσδήποτε discovered listener με matching name εκτελείται με -v/--version
|
||||
|
||||
Αυτό δημιουργεί ένα untrusted search path execution primitive: arbitrary binaries που βρίσκονται σε world-writable directories (π.χ. /tmp/httpd) εκτελούνται από ένα privileged component.
|
||||
|
||||
## Εκμετάλλευση (και στις δύο λειτουργίες credential-less και credential-based)
|
||||
|
||||
Προϋποθέσεις
|
||||
- Μπορείτε να τρέξετε μια unprivileged διαδικασία που ανοίγει ένα listening socket στο guest.
|
||||
- Το discovery job είναι ενεργοποιημένο και τρέχει περιοδικά (ιστορικά ~5 λεπτά).
|
||||
|
||||
Βήματα
|
||||
1) Τοποθετήστε/stage ένα binary σε ένα path που ταιριάζει με ένα από τα permissive regexes, π.χ. /tmp/httpd ή ./nginx
|
||||
2) Τρέξτε το ως low-privileged user και βεβαιωθείτε ότι ανοίγει κάποιο listening socket
|
||||
3) Περιμένετε τον discovery cycle· ο privileged collector θα εκτελέσει αυτόματα: /tmp/httpd -v (ή παρόμοιο), τρέχοντας το πρόγραμμά σας ως root
|
||||
|
||||
Ελάχιστο demo (using 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
|
||||
```
|
||||
Τυπική ακολουθία διεργασιών
|
||||
- Με διαπιστευτήρια: /usr/bin/vmtoolsd -> /bin/sh /tmp/VMware-SDMP-Scripts-.../script_...sh -> /tmp/httpd -v -> /bin/sh -i
|
||||
- Χωρίς διαπιστευτήρια: /bin/sh .../get-versions.sh -> /tmp/httpd -v -> /bin/sh -i
|
||||
|
||||
Τεκμήρια (με διαπιστευτήρια)
|
||||
Ανακτημένα SDMP wrapper scripts κάτω από /tmp/VMware-SDMP-Scripts-{UUID}/ μπορεί να δείχνουν άμεση εκτέλεση της κακόβουλης διαδρομής:
|
||||
```bash
|
||||
/tmp/httpd -v >"/tmp/VMware-SDMP-Scripts-{UUID}/script_-{ID}_0.stdout" 2>"/tmp/VMware-SDMP-Scripts-{UUID}/script_-{ID}_0.stderr"
|
||||
```
|
||||
## Γενικεύοντας την τεχνική: regex-driven discovery abuse (portable pattern)
|
||||
|
||||
Many agents and monitoring suites implement version/service discovery by:
|
||||
- Enumerating processes with listening sockets
|
||||
- Grepping argv/command lines with permissive regexes (e.g., patterns containing \S)
|
||||
- Executing the matched path with a benign flag like -v, --version, -V, -h
|
||||
|
||||
Αν το regex αποδέχεται μη αξιόπιστα paths και το path εκτελείται από περιβάλλον με προνόμια, προκύπτει CWE-426 Untrusted Search Path execution.
|
||||
|
||||
Abuse recipe
|
||||
- Ονομάστε το binary σας όπως συνήθεις daemons που το regex πιθανότατα θα ταιριάξει: httpd, nginx, mysqld, dataserver
|
||||
- Τοποθετήστε το σε writable directory: /tmp/httpd, ./nginx
|
||||
- Βεβαιωθείτε ότι ταιριάζει στο regex και ανοίγει οποιαδήποτε port για να εντοπιστεί
|
||||
- Περιμένετε τον scheduled collector· θα λάβετε μια αυτόματη privileged invocation του <path> -v
|
||||
|
||||
Masquerading note: Αυτό ευθυγραμμίζεται με MITRE ATT&CK T1036.005 (Match Legitimate Name or Location) για να αυξήσει την πιθανότητα ταύτισης και τη stealth.
|
||||
|
||||
Επαναχρησιμοποιήσιμο κόλπο privileged I/O relay
|
||||
- Κατασκευάστε τον helper σας έτσι ώστε κατά την privileged invocation (-v/--version) να συνδέεται σε γνωστό rendezvous (π.χ. ένα Linux abstract UNIX socket όπως @cve) και να γεφυρώνει stdio σε /bin/sh -i. Αυτό αποφεύγει on-disk artifacts και δουλεύει σε πολλά περιβάλλοντα όπου το ίδιο binary επανεκκινείται με flag.
|
||||
|
||||
## Detection and DFIR guidance
|
||||
|
||||
Ερωτήματα αναζήτησης
|
||||
- Μη συνηθισμένα children του vmtoolsd ή get-versions.sh όπως /tmp/httpd, ./nginx, /tmp/mysqld
|
||||
- Οποιαδήποτε εκτέλεση μη-system absolute paths από discovery scripts (ψάξτε για spaces σε ${COMMAND%%...} expansions)
|
||||
- ps -ef --forest για οπτικοποίηση δέντρων καταγωγής: vmtoolsd -> get-versions.sh -> <non-system path>
|
||||
|
||||
On Aria SDMP (credential-based)
|
||||
- Εξετάστε /tmp/VMware-SDMP-Scripts-{UUID}/ για transient scripts και stdout/stderr artifacts που δείχνουν εκτέλεση attacker paths
|
||||
|
||||
Πολιτική/τηλεμετρία
|
||||
- Ειδοποιήστε όταν privileged collectors εκτελούνται από μη-system prefixes: ^/(tmp|home|var/tmp|dev/shm)/
|
||||
- File integrity monitoring για get-versions.sh και VMware Tools plugins
|
||||
|
||||
## Mitigations
|
||||
|
||||
- Patch: Εφαρμόστε Broadcom/VMware updates για CVE-2025-41244 (Tools and Aria Operations SDMP)
|
||||
- Απενεργοποιήστε ή περιορίστε credential-less discovery όπου είναι εφικτό
|
||||
- Επικυρώστε trusted paths: περιορίστε την εκτέλεση σε allowlisted directories (/usr/sbin, /usr/bin, /sbin, /bin) και μόνο σε ακριβή γνωστά binaries
|
||||
- Αποφύγετε permissive regexes με \S; προτιμήστε anchored, explicit absolute paths και exact command names
|
||||
- Χαμηλώστε προνόμια για discovery helpers όπου είναι δυνατό· sandbox (seccomp/AppArmor) για μείωση επιπτώσεων
|
||||
- Παρακολουθήστε και ειδοποιήστε για vmtoolsd/get-versions.sh που εκτελούν non-system paths
|
||||
|
||||
## Σημειώσεις για υπερασπιστές και υλοποιητές
|
||||
|
||||
Πιο ασφαλές μοτίβο matching και execution
|
||||
```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
|
||||
```
|
||||
## Αναφορές
|
||||
|
||||
- [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,28 @@
|
||||
# VMware ESX / vCenter Pentesting
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
|
||||
# Απαρίθμηση
|
||||
## Απογραφή
|
||||
```bash
|
||||
nmap -sV --script "http-vmware-path-vuln or vmware-version" -p <PORT> <IP>
|
||||
msf> use auxiliary/scanner/vmware/esx_fingerprint
|
||||
msf> use auxiliary/scanner/http/ms15_034_http_sys_memory_dump
|
||||
```
|
||||
# Βία κατά βούληση
|
||||
## Bruteforce
|
||||
```bash
|
||||
msf> auxiliary/scanner/vmware/vmware_http_login
|
||||
```
|
||||
Αν βρείτε έγκυρα διαπιστευτήρια, μπορείτε να χρησιμοποιήσετε περισσότερα modules σαρωτή του metasploit για να αποκτήσετε πληροφορίες.
|
||||
Αν βρείτε έγκυρα credentials, μπορείτε να χρησιμοποιήσετε περισσότερα metasploit scanner modules για να αποκτήσετε πληροφορίες.
|
||||
|
||||
|
||||
|
||||
### Δείτε επίσης
|
||||
|
||||
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}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user