
CVE-2026-47630 के लिए तकनीकी भेद्यता विश्लेषण और प्रूफ-ऑफ-कॉन्सेप्ट, जो NVIDIA Triton Inference Server में TRITON_BATCH_STRATEGY_PATH के माध्यम से एक मनमाना dlopen सक्षम करता है और नेटिव कोड निष्पादन संभव बनाता है, साथ ही पहचान और शमन हेतु मार्गदर्शन।
TRITON_BATCH_STRATEGY_PATH के माध्यम से मनमाना dlopentriton-inference-server/core के कस्टम बैचिंग-स्ट्रैटेजी लोडर में निरपेक्ष पथ ट्रैवर्सल। एक मॉडल कॉन्फ़िगरेशन पैरामीटर बिना सत्यापन के dlopen(RTLD_NOW | RTLD_LOCAL) को पास कर दिया जाता है, इसलिए मॉडल के config.pbtxt को प्रभावित करने में सक्षम कोई भी व्यक्ति मॉडल-लोड समय पर Triton सर्वर प्रक्रिया के अंदर नेटिव कोड निष्पादन प्राप्त कर लेता है।
बुलेटिन 5865 में NVIDIA की स्वीकृति शब्दशः इस प्रकार है: CVE-2026-47630: s1ko।
Triton मॉडल के config.pbtxt से एक प्रति-मॉडल TRITON_BATCH_STRATEGY_PATH पैरामीटर स्वीकार करता है। 26.05 तक इस मान को एक मनमाना फाइलसिस्टम पथ मानकर बिना किसी संशोधन के dlopen को सौंप दिया जाता था। न कोई कंटेनमेंट जाँच थी, न कोई अनुमत-सूची, और न ही किसी सिग्नेचर या हैश का सत्यापन। निरपेक्ष पथ, ट्रैवर्सल अनुक्रम और सिमलिंक — सभी स्वीकार किए जाते थे।
RTLD_NOW हर प्रतीक को तुरंत हल करता है और ऑब्जेक्ट की __attribute__((constructor)) / .init_array रूटीन को dlopen के लौटने से पहले चलाता है। इसलिए निष्पादन सफल लोड पर निर्भर नहीं होता — पेलोड को चलने के लिए TRITONBACKEND_ModelBatch* एंट्री पॉइंट्स में से किसी का मौजूद होना आवश्यक नहीं है, और यह Triton प्रक्रिया के विशेषाधिकारों के साथ चलता है (NGC कंटेनरों में प्रायः root)।
src/backend_model.cc — हमलावर का इनपुट batch_libpath तक पहुँचता है, जिसका सत्यापन केवल अस्तित्व के लिए किया जाता है:
if (model_config.parameters().contains("TRITON_BATCH_STRATEGY_PATH")) {
batch_libpath = model_config.parameters()
.at("TRITON_BATCH_STRATEGY_PATH")
.string_value();
bool exists = false;
RETURN_IF_ERROR(FileExists(batch_libpath, &exists));
if (!exists) {
return Status(
triton::common::Error::Code::NOT_FOUND,
("Batching library path not found: " + batch_libpath).c_str());
}
}
उल्लेखनीय रूप से, IsChildPathEscapingParentPath का कोई कॉल मौजूद नहीं है, जिसे Triton उसी फ़ाइल में अन्यत्र लेबल पथों और बैकेंड लाइब्रेरी पथों पर पहले से लागू कर चुका है।
src/backend_model.cc — SetBatchingStrategy इसे आगे भेजता है:
Status TritonModel::SetBatchingStrategy(const std::string& batch_libpath)
{
std::unique_ptr<SharedLibrary> slib;
RETURN_IF_ERROR(SharedLibrary::Acquire(&slib));
RETURN_IF_ERROR(slib->OpenLibraryHandle(batch_libpath, &batch_dlhandle_));
src/shared_library.cc — सिंक:
*handle = dlopen(path.c_str(), RTLD_NOW | RTLD_LOCAL);
model_config.parameters() को नियंत्रित करने के तीन व्यावहारिक रास्ते:
config.pbtxt का स्वामी है, वह अपनी निर्देशिका में एक .so रखता है और
पैरामीटर को उसकी ओर इंगित करता है। पेलोड सर्वर के विशेषाधिकारों के साथ चलता है,
जिससे हर दूसरे टेनेंट के वेट्स, रहस्य और GPU तक पहुँच मिल जाती है।TRITONSERVER_ServerLoadModelWithParameters,
दस्तावेजित file:<rel-path> पैरामीटर उपसर्ग के साथ मिलकर, मॉडल-लोड अधिकार
वाले किसी कॉलर को एक ही अनुरोध में config.pbtxt और .so प्रस्तुत करके
लोड को तुरंत ट्रिगर करने देता है। API के बाहर किसी फाइलसिस्टम पहुँच की
आवश्यकता नहीं है।dlopen करता है।poc/ में प्रिमिटिव मौजूद है, जो OpenLibraryHandle के कार्य तक सीमित है। केवल सोर्स — उन्हें स्वयं बनाएँ:
$ cd poc && ./build.sh
$ gcc -O0 -o test_dlopen test_dlopen.c -ldl
$ ./test_dlopen ./evil.so
dlopen OK, handle=0x55d1779652c0
$ cat /tmp/triton_dlopen_rce_proof.log
[triton-dlopen-rce] constructor fired @ Fri May 1 09:56:56 2026
pid=240157 uid=1000 euid=1000 cwd=/opt/poc
पेलोड निष्क्रिय है: यह pid, uid, euid और cwd रिकॉर्ड करने वाली एक पंक्ति जोड़ता है। Debian 13, GCC 14.2, x86_64 पर सत्यापित किया गया।
Triton-पक्ष ट्रिगर के लिए, निर्मित evil.so को मॉडल रिपॉज़िटरी में poc/config.pbtxt के बगल में रखें और मॉडल लोड करें — ऑटो-लोड, --load-model, या POST /v2/repository/models/evil_model/load। प्रभावित संस्करण पर कंस्ट्रक्टर किसी भी बैकेंड प्रतीक लुकअप से पहले, SetBatchingStrategy के दौरान फायर होता है।
लोड को Triton स्वयं INFO स्तर पर लॉग करता है:
Loading custom batching strategy library <path> for model <name>
सुधारित बिल्ड पर, अस्वीकृत प्रयास Batching library path escapes model repository. के रूप में सामने आता है।
कोई भी TRITON_BATCH_STRATEGY_PATH मान जो निरपेक्ष है, .. रखता है, या मॉडल निर्देशिका के बाहर हल होता है, संस्करण की परवाह किए बिना अलर्ट के योग्य है। लॉग लाइन और कॉन्फ़िग पैरामीटर दोनों को कवर करने वाला एक Sigma नियम detection/ में है।
पूरक संकेत:
config.pbtxt फ़ाइलें जिनमें TRITON_BATCH_STRATEGY_PATH पैरामीटर
मौजूद है — यह सुविधा व्यवहार में दुर्लभ है, इसलिए अकेली उपस्थिति ही एक
उपयोगी फ़िल्टर है।tritonserver प्रक्रिया द्वारा मॉडल रूट के बाहर किसी .so का
openat/mmap (auditd, eBPF, या Falco)।Triton Inference Server 26.06 या उसके बाद के संस्करण में अपग्रेड करें। यह सुधार वह कंटेनमेंट जाँच जोड़ता है जो लोडर में अनुपस्थित थी:
bool escapes{true};
RETURN_IF_ERROR(IsChildPathEscapingParentPath(
batch_libpath, localized_model_dir->Path(), &escapes));
if (escapes) {
return Status(
Status::Code::INVALID_ARG,
"Batching library path escapes model repository.");
}
जहाँ अपग्रेड तुरंत संभव न हो, वहाँ प्रतिपूरक नियंत्रण:
config.pbtxt से, मॉडल रिपॉज़िटरी तक पहुँचने से पहले,
TRITON_BATCH_STRATEGY_PATH को अस्वीकार या हटा दें।--model-control-mode को explicit
के अलावा रखकर, या रिपॉज़िटरी एंडपॉइंट्स पर प्राधिकरण लागू करके) जब तक कि
इसकी आवश्यकता न हो।tritonserver को एक अन-विशेषाधिकृत उपयोगकर्ता के रूप में, रीड-ओनली मॉडल
रिपॉज़िटरी माउंट के साथ चलाएँ, ताकि सफल लोड का विस्फोट दायरा (blast radius)
न्यूनतम संभव रहे।मैपिंग: MITRE ATT&CK T1574.006 निष्पादन प्रवाह अपहरण: डायनामिक लिंकर अपहरण और T1129 साझा मॉड्यूल; NIST SP 800-53r5 SI-7, CM-5, SC-18; CIS Controls v8 §2, §4।
triton-inference-server/core — https://github.com/triton-inference-server/coreMIT — LICENSE देखें।
| CVE | CVE-2026-47630 |
| NVIDIA बुलेटिन | 5865 (2026-08-18) |
| CWE | CWE-36 (निरपेक्ष पथ ट्रैवर्सल); CWE-114 / CWE-829 के रूप में रिपोर्ट किया गया |
| CVSS v3.1 (NVIDIA) | 5.5 MEDIUM — AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N |
| प्रभावित संस्करण | Triton Inference Server 0.0 – 26.05 (Linux) |
| सुधार संस्करण | 26.06 |
| रिपोर्टकर्ता | s1ko (github.com/s1ko, [email protected]) |
| विक्रेता ट्रैकिंग | NVIDIA PSIRT टिकट 6139742 |
| दिनांक | घटना |
|---|
| 2026-04-25 | प्राथमिक Triton पथ-प्रबंधन निष्कर्ष रिपोर्ट किया गया; NVIDIA PSIRT टिकट 6128799 खोलता है |
| 2026-05-01 | यह द्वितीयक निष्कर्ष पुष्टि कर रिपोर्ट किया गया; PSIRT टिकट 6139742 खोलता है |
| 2026-05-28 | PSIRT के साथ समन्वित प्रकटीकरण की अनुसूची पर सहमति बनी |
| 2026-06 | सुधार Triton Inference Server 26.06 के साथ जारी हुआ |
| 2026-08-18 | NVIDIA बुलेटिन 5865 प्रकाशित करता है, CVE-2026-47630 निर्धारित करता है और s1ko को श्रेय देता है |
| 2026-08-22 | यह लेख प्रकाशित हुआ |