Skip to content
KitploitKITPLOIT
ToolsExploitsBlog
Log in
Einreichen
ToolsExploitsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

FeedsKontaktDatenschutz© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
Tools/GitHubGitHub/abraxas/moodle-grades-gradeitems
SchwachstellenanalyseWebanwendungs-ExploitationAPI-SicherheitstestsInformationsbeschaffungWebsicherheitPenetrationstestsLernen & BildungLabs & Praxis
GitHubabraxas/moodle-grades-gradeitems

moodle-grades-gradeitems

Moodle 5.2.3 - Hoch - Remote - IDOR - core_grades_get_gradeitems listet versteckte Bewertungselemente auf

27vor 9 TagenNoch nicht geprüft
Repository anzeigen

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

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

Klasse: IDOR Reichweite: Remote

core_grades_get_gradeitems ist Ajax plus der offizielle Mobile-Service, ohne capabilities-Schlüssel in services.php. validate_context ist das einzige Gate. Dann gibt grade_item::fetch_all jedes Item im Kurs aus. Der array_filter entfernt GRADE_TYPE_NONE, Kategorie-Items und das Kurs-Item. Hidden ist nicht in diesem Filter. Das Schwester-Item core_grades_get_grade_tree erfordert bereits moodle/grade:viewall.

Ein eingeschriebener Student sendet per POST {courseid} und erhält die Namen versteckter Grade-Items, die die Studenten-Notenbuch-Oberfläche weiterhin verbirgt.

IDnoch keine CVE
CWECWE-862 / CWE-200
CVSSMedium: 4.3 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:N/A:N
ProduktMoodle
Betroffen5.2.3 Tag v5.2.3 (344232c15336c71b80f9aca8359ce0e0a9f3d116)
Autheingeschriebener Student (moodle/grade:view; fehlt viewall / viewhidden)
LizenzGNU Affero GPL v3.0
Labnur 127.0.0.1

Was ein Angreifer tun kann

Schreiber: ein eingeschriebener Student im Kurs. Er sendet per POST den AJAX-Service mit {courseid}. Die Antwort enthält Namen, IDs und Kategorien. Das Rückgabe-Schema enthält keine Punkte. Kein RCE. Kein LPE. Kein Schreiben von Punkten.

PrivilegMethode / SinkRecon / Integrität / VerfügbarkeitIm Lab bewiesen oder abgeleitet
Namen, ID und Kategorie eines versteckten Grade-Items lesenPOST /lib/ajax/service.php?sesskey= core_grades_get_gradeitems {courseid}ReconIm Lab bewiesen. HTTP 200, Namen enthalten MOODLE-GRADES-GRADEITEMS-WITNESS
Namen, ID und Kategorie eines sichtbaren Grade-Items lesenGleiche AntwortRecon (für Lehrer vorgesehen)Im Lab bewiesen. Namen enthalten Visible Lab Assignment
Derselbe Katalog über den offiziellen Mobile-ServiceGleiche Klasse, services enthält MOODLE_OFFICIAL_MOBILE_SERVICEReconAbgeleitet aus services.php. Lab verwendete AJAX.
Sequenzielle courseid-Werte für Kurse durchlaufen, die der Student betreten kannGleiche Methode, geratene IDsReconAbgeleitet. Lab verwendete die vorbelegte Kurs-ID 2
Das versteckte Item in der Studenten-Notenbuch-Oberfläche sehenGET /grade/report/user/index.php?id=n/aIm Lab bewiesen geschlossen. hidden-in-ui=False, visible-in-ui=True
Ohne Session aufrufenAJAX mit einem Dummy-sesskeyn/aIm Lab bewiesen geschlossen. servicerequireslogin
Als eingeloggter, aber nicht eingeschriebener Benutzer aufrufenOutsider-AJAX, gleiche courseidn/aIm Lab bewiesen geschlossen. requireloginerror
Punkte anderer Studenten lesen oder Noten schreibenn/an/aGeschlossen. Rückgabe-Schlüssel sind id, itemname, category
PHP-RCE / OS-LPEn/an/aGeschlossen. Dieser Überrest ist ein Katalog-Lesezugriff

Ein Lehrer oder Manager, der bereits moodle/grade:viewall besitzt, sieht den Katalog ohnehin. Gast- / nicht authentifizierte Aufrufer benötigen weiterhin einen Kurskontext.

Gleiche Pin-Überbleibsel: Blackboard img file read, enrol_database SQLi, grades feedback IDOR.

Wie ich es gefunden habe

Ich habe moodle/moodle v5.2.3 nach MSA-26-0042/0043 gepinnt. Die Grade-Webservices lagen in diesem MSA-Fenster. get_gradeitems.php hat weiterhin kein require_capability. Die Studenten-UI blendete das Element bereits aus. Der AJAX-Katalog tat es nicht.

Bereits dokumentierte Irrwege: unauth AJAX 200 als Leak zu werten (der Body ist servicerequireslogin); dies als Score-IDOR zu bezeichnen, weil der Methodenname grade enthält (das Schema enthält nur Namen); zu erwarten, dass get_grade_tree dasselbe Überbleibsel ist (es erfordert bereits viewall). Eine Reverse Shell. Theater.

Lab

Live Moodle v5.2.3 auf php:8.3-apache + MariaDB 11.4. Das Seed schreibt labstudent ein, lässt laboutsider außerhalb des Kurses und erstellt ein sichtbares manuelles Element sowie ein verstecktes Element, dessen Name der Zeuge ist. run.sh kopiert einen lokalen Pin oder git clone --depth 1 --branch v5.2.3. Der Moodle-Baum ist nicht in diesem Paket enthalten.

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

oder

cd lab
./run.sh

Ziele ausschließlich auf http://127.0.0.1:19590. Compose-Projekt moodle-grades-gradeitems. Der Stack wird nach dem Lauf abgebaut.

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

Die Behebung

Nach validate_context dieselbe Berechtigungsprüfung wie bei get_grade_tree verlangen: require_capability('moodle/grade:viewall', $context). Außerdem versteckte Einträge auslassen, es sei denn, der Aufrufer besitzt moodle/grade:viewhidden. Einen Behat/PHPUnit-Testfall hinzufügen: eingeschriebener Student, versteckter manueller Eintrag, core_grades_get_gradeitems muss diesen Eintrag auslassen (oder 403). Die Notenbuch-Oberfläche für Studierende blendet ihn bereits aus.

Referenzen

  • github.com/moodle/moodle Tag v5.2.3
  • get_gradeitems.php
  • Das Schwestermodul verlangt die Berechtigung bereits: get_grade_tree.php
  • Dienstregistrierung: services.php (core_grades_get_gradeitems, kein capabilities)
  • Gleicher Pin: moodle-blackboard-img · moodle-enrol-database-sqli · moodle-grades-feedback-idor
  • CWE-862

Lizenz

GNU Affero GPL v3.0. Siehe LICENSE. Nur für Loopback-Labore. Keine Gewährleistung.

Tool herunterladen