Stuub/SGLang-0.5.9-RCE

GitHub: Stuub/SGLang-0.5.9-RCE

演示 SGLang 0.5.9 中通过恶意 GGUF 触发未沙箱化 Jinja2 导致 RCVE-2026-5760 的 PoC 工具。

Stars: 2 | Forks: 2

# SGLang SSTI 到 RCE 的 PoC — 未沙箱化的 Jinja2 聊天模板渲染(CVE-2026-5760) 通过服务器端模板注入(SSTI)在 SGLang 的重新排序端点中实现远程代码执行。恶意 GGUF 模型文件在加载到 SGLang 并调用 `/v1/rerank` 端点时,若其包含精心构造的 `tokenizer.chat_template`,即可实现任意代码执行。 ## 功能特性 利用 [SGLang](https://github.com/sgl-project/sglang) 中的关键严重性漏洞,通过未沙箱化的 Jinja2 模板渲染。SGLang 的重新排序端点(`/v1/rerank`)使用 `jinja2.Environment()` 而非 `ImmutableSandboxedEnvironment` 来渲染模型提供的聊天模板,从而允许恶意模型在推理服务器上执行任意 Python 代码。 这与影响 llama-cpp-python 的 [CVE-2024-34359](https://github.com/advisories/GHSA-56xg-wfcc-g829)(“Llama Drama”)属于同一漏洞类别。 ## 攻击步骤 1. 攻击者创建一个带有恶意 `tokenizer.chat_template` 的 GGUF 模型文件,其中包含 Jinja2 SSTI 载荷。 2. 该模板包含 Qwen3 重新排序器触发短语,以激活 `serving_rerank.py` 中的易受攻击代码路径。 3. 受害者下载并在 SGLang 中加载该模型(例如从 HuggingFace)。 4. 当任何请求到达 `/v1/rerank` 时,SGLang 读取 `chat_template` 并使用 `jinja2.Environment()` 进行渲染 —— **无沙箱**。 5. SSTI 载荷在服务器上执行任意 Python 代码。 ## 易受攻击的代码 **文件:** `python/sglang/srt/entrypoints/openai/serving_rerank.py` ``` # serving_rerank.py 第 128-132 行 — UNSANDBOXED def _get_jinja_env(): return jinja2.Environment( # <-- Should be ImmutableSandboxedEnvironment loader=jinja2.BaseLoader(), autoescape=False, undefined=jinja2.Undefined, ) ``` ## 使用方法 该 PoC 生成一个恶意 GGUF 文件,并通过 SGLang 的未沙箱化渲染路径演示代码执行。 传递任意 shell 命令作为参数 —— 默认为 `id`。 ## SSTI 载荷 嵌入在 GGUF 文件中的恶意聊天模板: ``` MALICIOUS_TEMPLATE = ( 'The answer can only be "yes" or "no".\n' '{{ lipsum.__globals__["os"].popen("echo SGLANG_RCE_CONFIRMED").read() }}' '{% for message in messages %}{{ message["content"] }}{% endfor %}' ) ``` - 触发短语(`The answer can only be "yes" or "no"`)是激活 SGLang Qwen3 重新排序器检测所必需的,它将请求路由到易受攻击的 `_render_jinja_chat_template()` 路径。 - `lipsum.__globals__["os"].popen()` 逃逸 Jinja2 上下文以执行任意操作系统命令。 ## 参考 - [CVE-2026-5760](https://www.cve.org/CVERecord?id=CVE-2026-5760) - [CVE-2024-34359](https://github.com/advisories/GHSA-56xg-wfcc-g829) — llama-cpp-python 中相同漏洞类别 - [CVE-2025-61620](https://github.com/advisories/GHSA-6fvq-23cw-5628) — vLLM 中的聊天模板 DoS(相同攻击面) - [SGLang GitHub](https://github.com/sgl-project/sglang) - CWE-1336:模板引擎中未适当隔离特殊元素 - CWE-94:未适当控制代码生成 ## 免责声明 本工具仅供授权的安全研究与教育用途。请负责任地使用。
标签:CVE-2026-5760, GGUF, HuggingFace, Jinja2, OpenAI API, PoC, Python代码执行, RCE, rerank, SGLang, SSTI, 不可信模板, 大模型安全, 实时告警, 暴力破解, 服务器端模板注入, 模型文件注入, 编程工具, 远程代码执行, 逆向工具, 重排序端点