Docker labs + fastjson रिमोट-क्लास-लोड RCE के लिए डिफेंसिव स्कैनर। fastjson 1.2.66-1.2.83: @JSONType संसाधन प्रोब (CVE-2026-16723)। fastjson2 2.0.57: हमलावर @type, पॉलीमॉर्फिक प्रकारों (@JSONType(seeAlso) / Jackson @JsonSubTypes) के माध्यम से autoType DISABLED रहने पर loadClass तक पहुँचता है। केवल-मार्कर पेलोड; safeMode + JDK17 नियंत्रण।
@JSONType रिमोट-JAR/FD-चेन लैब और डिटेक्शनयह रिपॉजिटरी अब दो अलग-अलग Fastjson अनुसंधान ट्रैक संरक्षित करती है:
modern-fd/ अनुशंसित, मार्कर-ओन्ली पुनर्निर्माण है जो Spring Boot 3, सामान्य embedded Tomcat और JDK 17 पर Fastjson 1.2.83 सिंगल-बॉडी रिमोट-JAR/फ़ाइल-डिस्क्रिप्टर चेन का है। यह AutoType बंद के साथ लिटरल फिक्स्ड-DTO सिंक JSON.parseObject(body, BoundEnvelope.class) का उपयोग करता है।scanner/ में पैसिव रिक्वेस्ट/लॉग डिटेक्शन, स्टैटिक आर्टिफैक्ट इन्वेंट्री और एक नॉन-एक्ज़ीक्यूटिंग रीचैबिलिटी प्रोब शामिल है।बग:
ParserConfig.checkAutoTypeहर@typeवैल्यू को@JSONTypeएनोटेशन के लिएgetResourceAsStream(typeName.replace('.','/') + ".class")करके प्रोब करता है। आधुनिक Linux/JDK कॉम्बिनेशन पर, एक रिमोटjar:httpप्रोब JAR को एक खुले डिस्क्रिप्टर के पीछे कैश्ड छोड़ सकता है; बाद मेंjar:file:/proc/self/fd/Nप्रोब उसी बॉडी में इसे वैध क्लास नामों के तहत फिर से खोल सकते हैं और एक एनोटेटेड क्लास को इनिशियलाइज़ कर सकते हैं। सटीक 1.2.83 कंपोज़िशन AutoType डिसेबल्ड के साथ औरList<Object>युक्त एक फिक्स्ड DTO के माध्यम से काम करता है। इसलिए अकेले बाइंडिंग एक मिटिगेशन नहीं है। पूरा वॉक-थ्रू:docs/MECHANISM.md।
साथी संपूर्ण-प्रोजेक्ट समीक्षा में सभी 193 Fastjson 1.2.83 प्रोडक्शन Java फ़ाइलों में 2,041 कॉल करने योग्य/स्टैटिक-इनिशियलाइज़र पंक्तियाँ शामिल थीं। नीचे दी गई तालिका सबसे अधिक प्रभाव वाले परिणामों को प्राथमिकता देती है; यह दावा नहीं है कि हर Fastjson डिप्लॉयमेंट प्रभावित है। यह रिपॉजिटरी सीधे F105 को रिप्रोड्यूस करती है। शेष प्रविष्टियाँ अलग से सील की गई सोर्स समीक्षा और बाउंडेड लैब साक्ष्य का सारांश देती हैं।
| प्राथमिकता | निष्कर्ष | सिद्ध परिणाम | महत्वपूर्ण सीमा |
|---|---|---|---|
| 1 | F105 — रिमोट @JSONType बाइटकोड एक्ज़ीक्यूशन | संगत Spring Boot लोडरों के माध्यम से अटैकर-सप्लाइड क्लास इनिशियलाइज़ेशन, जिसमें JDK 8 डायरेक्ट रूट और Linux/JDK 17 रिटेन्ड-JAR /proc/self/fd/N निरंतरता शामिल है | पार्सर-रीचेबल @type कैरियर, संगत Boot/TCCL लोडर, एग्रेस, SafeMode/IgnoreAutoType बंद, और एक सटीक अटैकर JAR की आवश्यकता है। आधुनिक फिक्स्ड-DTO रूट को अतिरिक्त रूप से एक जेनेरिक वैल्यू लेन (लैब List<Object> का उपयोग करती है), Linux procfs, एक रिटेन्ड डिस्क्रिप्टर और सटीक नाम संरेखण की आवश्यकता होती है; हर JDK, लोडर या OS पर सार्वभौमिक नहीं है |
| 2 | F1/F45 — TemplatesImpl कमांड एक्ज़ीक्यूशन | फिक्स्ड-DTO API के माध्यम से मार्कर कमांड एक्ज़ीक्यूशन, जिसमें एक अनदेखी बॉडी प्रॉपर्टी शामिल है | कमजोर सर्वर नीति की आवश्यकता है: क्लास एडमिशन, AutoType, और प्राइवेट-फील्ड पॉपुलेशन या समकक्ष पथ; डिफ़ॉल्ट सेटिंग्स इसे ब्लॉक करती हैं |
| 3 | F70/C016 — अनबाउंडेड बफरिंग और GZIP विस्तार | टाइप्ड byte/InputStream और एनोटेटेड DTO पथ बिना आउटपुट कैप के विस्तार या बफर करते हैं; कंस्ट्रेन्ड-हीप Java OOME रिप्रोड्यूस किया गया | एंडपॉइंट/स्कीमा और अटैकर-बाइट रीचैबिलिटी आवश्यक है; प्रोडक्शन-व्यापी आउटेज स्थापित नहीं किया गया |
| 4 | F18/C089 — पार्सर-थ्रेड स्टैक एक्सहॉशन | गहराई से नेस्टेड सामान्य ऑब्जेक्ट वैल्यू डिफ़ॉल्ट पार्सिंग के तहत StackOverflowError उत्पन्न कर सकती हैं | रिक्वेस्ट-थ्रेड उपलब्धता पर प्रभाव; अपरिवर्तनीय JVM या सर्विस-व्यापी क्रैश नहीं |
| 5 | F120/C162 — फिक्स्ड-स्कीमा HTTP SSRF/लोकल-रिसोर्स लोडिंग | बॉडी-नियंत्रित JEditorPane/JTextPane.page HTTP रिक्वेस्ट करता है और बाउंडेड file: सामग्री को Document स्थिति में लोड कर सकता है | एप्लिकेशन को Swing प्रकार घोषित करने की आवश्यकता है; कोई स्वचालित रिस्पॉन्स एक्सफिल्ट्रेशन या RCE सिद्ध नहीं हुआ |
| 6 | F118/C160 — हैश-कोलिज़न ऑथराइज़ेशन/डेटा-इंटेग्रिटी विफलता | एक विशिष्ट Unicode FNV-1a-64 कोलिज़न एक विशेषाधिकार प्राप्त enum कॉन्स्टेंट से बाइंड हो सकता है या JSONPath म्यूटेशन को गलत बीन सेटर की ओर मोड़ सकता है | एक उपयोग योग्य कोलिज़न और डाउनस्ट्रीम ट्रस्ट या एक एक्सपोज़्ड JSONPath म्यूटेशन ऑपरेशन की आवश्यकता है; कोई क्लास एडमिशन या RCE नहीं |
| 7 | F121/C163 — फिक्स्ड JdbcRowSet JNDI रीचैबिलिटी | सटीक सेटर क्रम ने एक बॉडी-सेलेक्टेड आउटबाउंड JNDI/LDAP कनेक्शन का कारण बना | साक्ष्य एक कनेक्शन पर रुक जाता है: कोई नेमिंग रिस्पॉन्स, ऑब्जेक्ट फैक्ट्री, बाइटकोड लोडिंग या RCE नहीं |
| 8 | F2/F45 — डिफ़ॉल्ट DNS रिज़ॉल्यूशन | अटैकर-नियंत्रित होस्टनाम रिज़ॉल्यूशन डिफ़ॉल्ट कॉन्फ़िगरेशन के तहत और एक अनदेखी फिक्स्ड-DTO प्रॉपर्टी के माध्यम से काम करता है | केवल DNS/OOB इंटरैक्शन, जेनेरिक HTTP SSRF या RCE नहीं |
वैलिडेशन लेबल, पूर्वापेक्षाएँ, निचले-स्तर के निष्कर्ष, रेमेडिएशन प्राथमिकताएँ और स्पष्ट नकारात्मक सीमाओं के लिए findings/FINDINGS.md देखें।
यह रिपॉजिटरी उन सिस्टमों के शिक्षा, डिफेंसिव रिसर्च और अधिकृत परीक्षण के लिए है जिनके आप मालिक हैं या जिनका परीक्षण करने की आपको स्पष्ट अनुमति है। आधुनिक लैब के आंतरिक नेटवर्क के लिए समर्थित होने पर, होस्ट प्रकाशन केवल 127.0.0.1 पर अनुरोधित है; इसकी स्क्रिप्ट परीक्षण को पूरी तरह से उस आइसोलेटेड नेटवर्क के भीतर चलाती हैं। आधुनिक लैब में कोई प्रोसेस-एक्ज़ीक्यूशन प्रिमिटिव नहीं है और यह केवल एक फिक्स्ड इन-JVM मार्कर सेट करती है।
लीगेसी JDK 8 लैब id चलाती है और उसका आउटपुट /tmp/PWNED में लिखती है; इसे आइसोलेटेड रखें। लीगेसी एक्सप्लॉइट या एक्टिव प्रोब को अनधिकृत सिस्टमों पर न लगाएँ।
scanner/ डायरेक्ट्री चार डिपेंडेंसी-फ्री Python 3 टूल्स के साथ आती है (कोई pip इंस्टॉल नहीं)।
fjdetect.py — रिमोट-JAR सीड्स और /proc/self/fd या /dev/fd सीक्वेंस के लिए डिकोडेड JSON रिक्वेस्ट बॉडीज़ या संरचित JSON लॉग्स का पैसिव रूप से निरीक्षण करें।fjscan_static.py — कमजोर कॉम्बिनेशन के लिए jars/wars/ears की इन्वेंट्री करें (कंटेंट-बैक्ड, मेटाडेटा-वेरिफाइड 1.2.83 × वास्तविक Spring Boot लोडर क्लास कंटेंट)। प्रोब-युक्त 1.2.48–1.2.82 रिलीज़ और केवल-मेटाडेटा/फ़ाइलनाम वाले उम्मीदवार समीक्षा के लिए अलग से रिपोर्ट किए जाते हैं। CI-गेट अनुकूल (EXPOSED पर एग्ज़िट 2)।fjscan_probe.py — एक्टिव, सुरक्षित रीचैबिलिटी जाँच: आपके नियंत्रण वाले कैनरी पर @type फायर करता है (बिल्ट-इन लिसनर या Burp Collaborator / interactsh) और रिसोर्स-फेच कॉलबैक को सहसंबंधित करता है। इसका बिल्ट-इन लिसनर एक खाली 404 लौटाता है; बाहरी लिसनर को समकक्ष रूप से कॉन्फ़िगर करें। एक कॉलबैक क्लास लोडिंग या RCE साबित नहीं करता है।fjpayload.py — मैनुअल परीक्षण के लिए रिमोट-रिसोर्स फेच बॉडीज़ उत्पन्न करें; जब एक्ज़ीक्यूशन इच्छित न हो तो केवल खाली/404 लिसनर का उपयोग करें।# 1) passive request/log inspection
python3 scanner/fjdetect.py --ndjson gateway.jsonl
# 2) inventory build artifacts / unpacked images (parallel)
python3 scanner/fjscan_static.py /path/to/artifacts --threads 16
# 3) active probe across many domains — simplest: --auto fires baseline + plain + escaped comparison
# DNS probes per target and prints a rollup; DNS callbacks land in your Burp Collaborator
python3 scanner/fjscan_probe.py --collaborator <sub>.oastify.com --auto --targets domains.txt --threads 50
cat domains.txt | python3 scanner/fjscan_probe.py --collaborator <sub>.oastify.com --auto --targets -
# 4) bulk fetch payloads for manual testing (one per domain, stable correlation token)
python3 scanner/fjpayload.py <collab-or-ip> --targets-file domains.txt
domains.txt = प्रति पंक्ति एक टारगेट — एक पूर्ण [METHOD ]URL या एक सीधा डोमेन (--scheme / --target-port / --path के साथ विस्तारित); # टिप्पणियाँ अनुमत हैं:
api.internal.example
POST https://svc.example/v1/ingest
10.0.0.7:8080
fjscan_probe.py (एक्टिव प्रोब)