
CSRF in Eclipse Che che porta a RCE
Questo bug consente a un sito web remoto di creare e avviare un container Docker arbitrario sulle macchine che eseguono Che precedente alle versioni 7.3.0 e 7.4.1 quando un utente visita una pagina web.
Questa è una vulnerabilità CSRF che consente a un sito web remoto di creare e avviare un container Docker sulla macchina di chiunque esegua Eclipse Che in modalità standalone. Molti parametri sotto il controllo dell'attaccante consentono un livello di controllo preciso. Alcuni sviluppatori utilizzano Che in modalità standalone come modo conveniente per gestire i propri container Docker locali.
Ciò era possibile perché Che aveva CORS abilitato per impostazione predefinita. I problemi relativi a questo sono abbastanza ovvi per chi capisce cosa significa, ma in sostanza Che rispondeva alle richieste provenienti da qualsiasi origine. Sebbene i browser facciano del loro meglio per rendere difficili gli attacchi CORS, quando il server consente CORS è possibile creare una richiesta POST riuscita a un servizio Che in esecuzione locale da un sito remoto.
In sostanza, ciò significa che qualsiasi metodo API non autenticato può essere chiamato quando un computer che esegue Che in modalità standalone visita il loro sito web. Questo include la creazione e l'esecuzione di nuovi container Docker/OpenShift.
Un semplice POC è incluso in questo readme, ma una visione del JSON inviato al servizio Che locale rivela una serie di parametri piuttosto interessanti da controllare, tra cui quale immagine, quali comandi eseguire all'avvio, quali server avviare nel container e altre caratteristiche piuttosto interessanti.
Per sfruttare questa vulnerabilità, devi prendere di mira qualcuno che esegue Eclipse Che sul proprio computer. Devi convincere il tuo bersaglio a visitare una pagina che controlli su HTTP. Da lì, l'XMLHttpRequest fa il suo lavoro e puoi scatenarti. Per capire appieno come sfruttare questa vulnerabilità, dovresti dare un'occhiata al codice sorgente di Che per conoscere l'API o semplicemente giocare con il POC che ho inserito in questo repository. In sostanza, vuoi creare un container o un comando nel tuo container appena avviato che ti dia il tipo di punto d'appoggio che desideri. Potresti configurare un server a tua scelta o semplicemente far sì che il comando esegua all'avvio il download del tuo payload e inizi a operare da lì. Questo attacco si presta sia ad attacchi opportunistici che mirati.
Per una discussione più dettagliata, dai un'occhiata al bug tracciato qui. La maggior parte del contenuto è semplicemente una ripetizione di questo post.
Per eseguire con successo questo attacco, la pagina deve essere servita da un server HTTP (non HTTPS). Ciò è necessario perché un server Che locale gira su HTTP e i browser più diffusi non amano mescolare contenuti HTTP e HTTPS.
Per risolvere questo problema, il team di Che ha semplicemente disabilitato CORS per impostazione predefinita. Questo dovrebbe almeno rendere questo tipo di attacco significativamente più difficile in futuro. Se stai eseguendo Che in locale per gestire le tue immagini Docker, prendi in considerazione l'aggiornamento.