
Preuve de concept d'exploit pour l'injection de commandes OS (CVE-2023-33381) dans les routeurs MitraStar GPT-2741GNAC. Démontre le contournement du shell restreint via la fonctionnalité de diagnostic ping/traceroute, avec analyse de rétro-ingénierie des binaires CGI vulnérables.
Lors de la connexion via SSH, j'ai immédiatement remarqué l'ensemble limité de commandes et d'options disponibles. Il est devenu évident que j'étais confiné à un environnement shell restreint.

Après avoir exploré plusieurs vulnérabilités connues, j'ai décidé de me plonger dans la recherche de nouvelles. Pour commencer, je me suis connecté au portail administratif et j'ai commencé à tester diverses fonctionnalités qui pourraient potentiellement aboutir à une injection de commandes système. Dans le menu Diagnostic, j'ai découvert une fonctionnalité particulière qui me permettait de tester la connectivité en utilisant les commandes ping et traceroute.


J'ai donc décidé d'essayer quelque chose de sournois en ajoutant un caractère ';' à ma commande. J'ai exécuté 'cat /etc/passwd' et devinez quoi ? La commande a réussi.

J'ai poussé l'expérience plus loin et j'ai exécuté la commande 'sed' pour remplacer l'entrée du shell restreint dans le fichier '/etc/passwd' par un shell interactif complet.

Comme clairement illustré dans l'image ci-dessous, les modifications que j'ai apportées m'ont permis de me connecter et d'exécuter librement des commandes comme 'uname' et 'cat'

Comme j'avais des privilèges administrateur complets, je n'ai pas pu résister à l'envie d'approfondir pour découvrir le composant vulnérable. En inspectant les requêtes du navigateur, j'ai remarqué quelque chose d'intéressant. Deux fichiers CGI, 'ping.cgi' et 'DiagGeneral.cgi', étaient ciblés par les requêtes.

Après avoir récupéré les fichiers, je me suis amusé à faire du reverse engineering avec Ghidra. Voici la partie intéressante : dans le fichier 'ping.cgi', j'ai remarqué que le paramètre PingIPAddr était directement extrait de l'entrée utilisateur sans aucune désinfection appropriée. Le paramètre PingIPAddr extrait de l'entrée utilisateur était stocké pour une utilisation ultérieure via la fonction tcapi_set.

Enfin, dans le fichier DiagGeneral.cgi, le paramètre PingIPAddr était récupéré à l'aide de la fonction tcapi_get puis directement utilisé dans la fonction system sans désinfection. Cette faille crée une vulnérabilité d'injection de commandes, permettant l'exécution non autorisée de commandes arbitraires sur le système.
