Nostromo Web Server From Path Traversal to RCE - CVE-2022-48253
Riccardo Krauter
12/01/2023
TL;DR: Vi raccontiamo una delle nostre ricerche: CVE-2022-48253 - Directory Traversal su Nostromo Web Server (nhttpd), se configurato con l'opzione "HOMEDIRS"; l'exploit può portare a Remote Command Execution.
Leggi l'articolo completo sul nostro blog
Nostromo Web Server From Path Traversal to RCE with the help of “HOMEDIRS” config - CVE-2022-48253
Introduzione
Oggi vi vogliamo parlare della ricerca svolta da Riccardo ‘p4w’ Krauter, su Nostromo Web Server che ha portato al CVE-2022-48253. La vulnerabilità è sfruttabile se il server viene configurato con l’opzione “HOMEDIRS” e si tratta di un Path Traversal che può portare a RCE. La vulnerabilità affligge le versioni di Nostromo <= 2.0.
Discovering
La ricerca è partita dall’analisi di vecchie vulnerabilità. In passato, Nostromo era vulnerabile a Path Traversal che poteva portare all’esecuzione di comandi, i CVE correlati sono CVE-2011-0751 e CVE-2019-16278. Partendo da questi risultati la domanda è stata: esiste ancora qualche flusso inesplorato di Path Traversal? La risposta a questa domanda è sì, ed è arrivata grazie alla ricerca condotta da p4w, che ha portato alla scoperta di una nuova vulnerabilità su Nostromo. Leggendo la documentazione di Nostromo, risulta curiosa l’opzione “HOMEDIRS”.
Questa opzione è interessante, in quanto intuitavamente ci si aspetta che il normale flusso del codice entri in una diramazione che eseguirà qualche sorta di manipolazione sull’input controllabile da un utente (in particolare sulla Request-URI contenuta nella richiesta HTTP). Questo perchè l’opzione sembra che in qualche modo associ una URI che inizia con il carattere ~ con una directory scelta, ma la domanda è: come lo fa? Una delle cose più importanti per la discovery della vulnerabilità è stata la comprensione del flusso del codice che gestisce le richieste HTTP. A tal proposito, l’immagine sottostante racchiude i passaggi chiave del codice che si occupa di elaborare una richiesta HTTP quando il server viene configurato per usare l’opzione “HOMEDIRS”.
Osservando il flusso, è possibile notare che il carattere ~ viene rimosso dopo il controllo di sicurezza che cerca il pattern /../ per evitare problemi di Path Traversal. Sembra quindi possibile aggirare il controllo con questo payload /~../. Facciamo un esempio e ripercorriamo il flusso. Se l’opzione HOMEDIRS punta alla directory /home del file system (come suggerito nel manuale) e l’URI richiesta fosse /~../bin/sh, allora il flusso sarà il seguente:
Consigliati da LinkedIn
Di seguito uno screenshot con un PoC di RCE su un server di test installato in locale (come è possibile osservare negli header di risposta la versione di Nostromo usata è la 2.0).
Impatti e limitazioni
Abbiamo già visto come, nel caso peggiore, la vulnerabilità può essere sfrutatta per eseguire comandi arbitrari sul server. Ora vediamo anche quali sono le limtazioni dell’exploit. La prima limitazione è che la vulnerabilità è presente solo se il server viene configurato per utilizzare l’opzione HOMEDIRS. Questa condizione riduce sicuramente il numero dei server Nostromo vulnerabili. Il Path Traversal è limitato ad una directory indietro. Di conseguenza non è possibile “traversare” più di una directory, nonostante ciò se la directory usata come configurazione risulta solo un livello sopra al punto di mount del file system, allora è possibile navigare l’intero file system come mostra lo screenshot seguente.
Un’altro impatto è la semplice lettura di file al di fuori della web-root directory come mostrato di seguito.
Anche se il server usasse più di un livello per la directory “home”, ad esempio /usr/nostromo, la vulnerabilità può essere utlizzata per ottenere la disclosure di file potenzailmente sensibili (ad esempio file di configurazione, file di sistema, chiavi ssh ecc.).
Disclosure Timeline
Reference
Grazie Gian Franco!
Bravissimi