
CVE-2024-34832
Dans le panneau d'administration, des paramètres tels que _g et node sont utilisés pour construire le chemin d'inclusion de fichiers .inc.php et exécuter du code PHP. Un utilisateur malveillant capable de télécharger des fichiers .inc.php n'importe où sur le serveur peut exploiter une vulnérabilité de traversée de répertoire pour les inclure et exécuter du code malveillant.
.inc.php n'importe où sur le serveur (par exemple, accès FTP, une autre application sur le même serveur permettant le téléchargement de fichiers, de nouvelles vulnérabilités dans les fonctionnalités de téléchargement de CubeCart, etc).Supposons qu'un serveur FTP fonctionne sur le même serveur que CubeCart et qu'un utilisateur puisse télécharger des fichiers vers un emplacement spécifique. Dans notre cas, disons que tout ce qui est téléchargé via FTP se retrouve dans /opt/FTP_Example.
Supposons également que cet utilisateur a téléchargé un fichier nommé path_traversal.inc.php via FTP et que son contenu est le code PHP suivant <?php system('whoami;id;hostname;ls') ?>.

Initialement, il n'y a aucun danger à télécharger un tel fichier car il ne sera pas exécuté et ne se trouve pas dans le répertoire d'un serveur web - comme Apache - qui pourrait l'exécuter.
Ce même utilisateur peut avoir des privilèges très limités, voire aucun privilège sur le panneau d'administration de CubeCart, mais il peut toujours s'y connecter. Par exemple, nous avons créé un utilisateur nommé julio qui n'a aucun privilège.

Après nous être connectés à l'application en tant que julio, nous avons commencé à tester les paramètres _g et node. Nous avons remarqué que ces paramètres ajoutaient automatiquement .inc.php à la fin d'un chemin et semblaient utiliser include() sur ce fichier pour exécuter du code PHP.
Comme vu ci-dessous, lorsque le fichier n'est pas trouvé, le message d'erreur suivant est renvoyé.

Nous avons commencé à nous demander si nous pouvions parcourir le chemin et atteindre un fichier .inc.php dans un répertoire ailleurs sur le serveur - comme notre dossier FTP.
Comme nous avions un fichier nommé path_traversal.inc.php dans le dossier /opt/FTP_Example, nous avons essayé d'ajouter beaucoup de /../../../ jusqu'à atteindre le répertoire racine, puis nous avons ajouté /opt/FTP_Example/path_traversal et l'application a automatiquement ajouté .inc.php à la fin du chemin.
Comme vu ci-dessous, le code a été exécuté avec succès.

Nous avons remarqué que le paramètre node échappe en fait les barres obliques (/), mais _g ne le fait pas. Tous les paramètres utilisés pour construire des chemins devraient échapper les barres obliques pour prévenir les vulnérabilités de traversée de répertoire.
Bien qu'il existe des prérequis pour une exploitation réussie de cette vulnérabilité - ce qui réduit considérablement le risque - elle bénéficie néanmoins d'un correctif. Vous pouvez consulter dans les références comment les auteurs de CubeCart ont corrigé cette vulnérabilité et appliquer les correctifs à votre propre instance de CubeCart jusqu'à ce qu'une version officielle soit publiée avec le correctif intégré.