Skip to content
KitploitKITPLOIT
OutilsExploitsBlog
Log in
Soumettre
OutilsExploitsBlog
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é.

FluxContactConfidentialité© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
moodle-grades-gradeitems — Moodle 5.2.3 - Élevée - À distance - IDOR - core_grades_get_gradeitems liste les éléments de note masqués | Kitploit
Outils/GitHubGitHub/abraxas/moodle-grades-gradeitems
Analyse des VulnérabilitésExploitation d'Applications WebTests de Sécurité des APICollecte d'InformationsSécurité WebTests d'IntrusionApprentissage et ÉducationLabs et Pratique
GitHubabraxas/moodle-grades-gradeitems

moodle-grades-gradeitems

Moodle 5.2.3 - Élevée - À distance - IDOR - core_grades_get_gradeitems liste les éléments de note masqués

27il y a 8 joursPas encore vérifié
Voir le dépôt

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

Abraxas Labs - moodle-grades-gradeitems

abraxaslabs.tech  ·  github.com/abraxas  ·  @abraxas_null  ·  [email protected]  ·  moodle-grades-gradeitems

Write-up : https://abraxaslabs.tech/research/moodle-grades-gradeitems

moodle-grades-gradeitems

Moodle LMS 5.2.3 - Moodle

Classe : IDOR Portée : Distante

core_grades_get_gradeitems est un service ajax ainsi que le service mobile officiel, sans clé capabilities dans services.php. validate_context est la seule barrière. Ensuite, grade_item::fetch_all extrait tous les éléments du cours. Le array_filter écarte GRADE_TYPE_NONE, les éléments de catégorie et l'élément du cours. Le masquage (hidden) ne figure pas dans ce filtre. Le service frère core_grades_get_grade_tree exige déjà moodle/grade:viewall.

Un étudiant inscrit envoie en POST {courseid} et obtient les noms des éléments de notation masqués que l'interface du carnet de notes de l'étudiant masque encore.

IDpas encore de CVE
CWECWE-862 / CWE-200
CVSSMoyen : 4.3 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:N/A:N
ProduitMoodle
Affecté5.2.3 tag v5.2.3 (344232c15336c71b80f9aca8359ce0e0a9f3d116)
Authétudiant inscrit (moodle/grade:view ; sans viewall / viewhidden)
LicenceGNU Affero GPL v3.0
Lab127.0.0.1 uniquement

Ce qu'un attaquant peut faire

Auteur : un étudiant inscrit au cours. Il envoie en POST le service AJAX avec {courseid}. La réponse contient des noms, des identifiants et des catégories. Le schéma de retour ne contient aucune note. Pas de RCE. Pas de LPE. Pas d'écriture de note.

PrivilègeMéthode / sinkReconnaissance / intégrité / disponibilitéProuvé en lab ou déduit
Lire le nom, l'id et la catégorie d'un élément de notation masquéPOST /lib/ajax/service.php?sesskey= core_grades_get_gradeitems {courseid}ReconnaissanceProuvé en lab. HTTP 200, les noms incluent MOODLE-GRADES-GRADEITEMS-WITNESS
Lire le nom, l'id et la catégorie d'un élément de notation visibleMême réponseReconnaissance (prévu pour les enseignants)Prouvé en lab. les noms incluent Visible Lab Assignment
Même catalogue via le service mobile officielMême classe, services inclut MOODLE_OFFICIAL_MOBILE_SERVICEReconnaissanceDéduit de services.php. Le lab a utilisé AJAX.
Parcourir des valeurs courseid séquentielles pour les cours auxquels l'étudiant peut accéderMême méthode, ids devinésReconnaissanceDéduit. Le lab a utilisé l'id de cours préchargé 2
Voir l'élément masqué dans l'interface du carnet de notes de l'étudiantGET /grade/report/user/index.php?id=n/aProuvé en lab fermé. hidden-in-ui=False, visible-in-ui=True
Appeler sans sessionAJAX avec une sesskey facticen/aProuvé en lab fermé. servicerequireslogin
Appeler en tant qu'utilisateur connecté non inscritAJAX d'un tiers, même courseidn/aProuvé en lab fermé. requireloginerror
Lire les notes d'autres étudiants ou écrire des notesn/an/aFermé. Les clés de retour sont id, itemname, category
RCE PHP / LPE OSn/an/aFermé. Ce résidu est une lecture de catalogue

Un enseignant ou un gestionnaire disposant déjà de moodle/grade:viewall voit déjà le catalogue. Les appelants invités / non authentifiés ont toujours besoin d'un contexte de cours.

Mêmes restes d'épinglage : lecture de fichier img Blackboard, injection SQL enrol_database, IDOR sur les retours de notes.

Comment je l'ai trouvé

J'ai épinglé moodle/moodle v5.2.3 après MSA-26-0042/0043. Les services web de notes se trouvaient dans cette fenêtre MSA. get_gradeitems.php n'a toujours pas de require_capability. L'interface étudiant masquait déjà l'élément. Le catalogue AJAX, lui, ne le faisait pas.

Fausses pistes déjà consignées : considérer un AJAX non authentifié renvoyant 200 comme la fuite (le corps est servicerequireslogin) ; qualifier cela d'IDOR de score parce que le nom de la méthode contient grade (le schéma ne contient que des noms) ; s'attendre à ce que get_grade_tree soit le même reste (il exige déjà viewall). Un reverse shell. Du théâtre.

Labo

Moodle v5.2.3 en direct sur php:8.3-apache + MariaDB 11.4. Le seed inscrit labstudent, laisse laboutsider hors du cours, et crée un élément manuel visible ainsi qu'un élément masqué dont le nom est le témoin. run.sh copie un épinglage local ou exécute git clone --depth 1 --branch v5.2.3. L'arborescence Moodle n'est pas incluse dans ce pack.

python3 moodle-grades-gradeitems-Abraxas-Labs.py

ou

cd lab
./run.sh

Ciblez uniquement http://127.0.0.1:19590. Composez le projet moodle-grades-gradeitems. La stack est démontée après l'exécution.

SUCCESS moodle-grades-gradeitems student-ajax=200 hidden-in-ajax=yes hidden-in-ui=no visible-in-ajax=yes visible-in-ui=yes outsider-error=yes unauth-error=yes MOODLE-GRADES-GRADEITEMS-WITNESS

Le correctif

Après validate_context, exiger la même restriction que get_grade_tree : require_capability('moodle/grade:viewall', $context). Supprimer également les éléments masqués, sauf si l'appelant dispose de moodle/grade:viewhidden. Ajouter un cas Behat/PHPUnit : étudiant inscrit, élément manuel masqué, core_grades_get_gradeitems doit omettre cet élément (ou renvoyer 403). L'interface du carnet de notes de l'étudiant le masque déjà.

Références

  • github.com/moodle/moodle tag v5.2.3
  • get_gradeitems.php
  • Le fichier frère exige déjà la capacité : get_grade_tree.php
  • Enregistrement du service : services.php (core_grades_get_gradeitems, pas de capabilities)
  • Même version épinglée : moodle-blackboard-img · moodle-enrol-database-sqli · moodle-grades-feedback-idor
  • CWE-862

Licence

Télécharger l’outil