Introduction
OpenCart, un système de gestion de contenu e-commerce populaire, a récemment été exposé à des vulnérabilités de code statique critique. Ces vulnérabilités, présentes dans les versions 4.0.0.0 à 4.0.2.3, permettent à des utilisateurs authentifiés du backend d’injecter des données non fiables dans les fichiers config.php et admin/config.php, conduisant à une exécution distante de code sur le serveur sous-jacent.
Détails des Vulnérabilités: Les deux failles de sécurité identifiées sont des injections de code statique dans les fonctions « common/security.storage » et « common/security.admin« . Pour exploiter ces failles, l’utilisateur doit disposer de privilèges communs/sécurité d’accès et de modification.
Injection de Code Statique dans common/security.storage
La fonction storage()
dans « upload/admin/controller/common/security.php » est vulnérable à une injection de code statique PHP. Les variables utilisateur $name et $path ne sont pas correctement échappées ou validées avant d’être concaténées dans $base_new, puis écrites dans les fichiers config.php et admin/config.php. Cela permet à un attaquant authentifié d’injecter du code PHP statique arbitraire qui sera exécuté sur chaque page, entraînant une exécution distante de code.
Détails et Causes de la Vulnérabilité
Le code vulnérable est présent dans « 4.0.2.3/upload/admin/controller/common/security.php« . Les variables $name et $path sont obtenues à partir des paramètres GET HTTP, mais la validation des caractères spéciaux est mal implémentée, permettant à un attaquant d’inclure des caractères spéciaux non autorisés.
De plus, la vérification de l’emplacement de $base_new n’est pas correctement réalisée, ce qui peut être contourné par une traversée de chemin d’accès.
Injection de Code Statique dans common/security.admin
La fonction admin()
dans « upload/admin/controller/common/security.php » est également vulnérable à une injection de code statique PHP. La variable utilisateur $name est utilisée sans échappement approprié dans $base_new, qui est ensuite écrit dans un nouveau fichier config.php, ouvrant la voie à une exécution distante de code.
Détails et Causes de la Vulnérabilité
Le code vulnérable est présent dans la même classe PHP. La variable $name est lue à partir des paramètres GET HTTP, mais la validation des caractères spéciaux est mal implémentée, permettant aux attaquants d’injecter du code PHP statique arbitraire.
Conditions d’Exploitation et Prérequis
Pour exploiter ces vulnérabilités, l’attaquant doit disposer de crédentials valides pour le tableau de bord backend avec la permission d’écriture sur common/security. De plus, pour exploiter la fonction admin(), le dossier admin/ doit être le dossier par défaut et ne doit pas avoir été renommé auparavant.
Preuve de Concept (PoC)
Actuellement, un exploit automatisé est en cours de développement et sera bientôt publié. Cependant, des PoC pour common/security.storage et common/security.admin ont été fournis.
PoC pour common/security.storage
L’exploitation de cette vulnérabilité nécessite l’envoi de deux requêtes GET. Cependant, il est important de noter que le PoC rompt complètement l’application en raison d’une discordance entre la variable DIR_STORAGE écrite dans config.php et le dossier réel créé sur le disque.
La première requête est envoyée à: route=common/security.storage&name=pwned’);phpinfo();%23&path=/home/test/Projects/OpenCart/4.0.2.3/&user_token=<user_token>
La deuxième requête est envoyée à: route=common/security.storage&name=pwned’);phpinfo();%23&path=/home/test/Projects/OpenCart/4.0.2.3/&user_token=<user_token>&page=99
PoC pour common/security.admin
L’exploitation de cette vulnérabilité nécessite également l’envoi de deux requêtes GET. Un nouveau répertoire contenant le fichier config.php empoisonné sera créé.
Conclusion
Ces vulnérabilités sérieuses dans OpenCart mettent en danger la sécurité des sites e-commerce utilisant les versions affectées. Il est impératif que les utilisateurs mettent à jour leur système vers une version corrigée dès que possible pour éviter toute exploitation malveillante. OpenCart devrait également revoir ses pratiques de sécurité pour éviter de telles vulnérabilités dans les versions futures.