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

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

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

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

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

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
CVE-2025-55182-analysis | Kitploit
उपकरण/GitHubGitHub/santihabib/cve-2025-55182-analysis
भेद्यता विश्लेषणशोषणवेब एप्लिकेशन शोषणवेब सुरक्षापेनिट्रेशन टेस्टिंगलर्निंग और शिक्षा
GitHubsantihabib/cve-2025-55182-analysis

CVE-2025-55182-analysis

रिपॉजिटरी देखें
48 महीने पहलेअभी तक समीक्षित नहीं

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

सभी देखें →

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

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

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

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

तकनीकी विश्लेषण CVE-2025-55182: मेरी शोध यात्रा

⚠️ महत्वपूर्ण अस्वीकरण

यह दस्तावेज़ CVE-2025-55182 में मेरी व्यक्तिगत शोध प्रक्रिया का वर्णन करता है, जिसमें पुष्टि किए गए निष्कर्ष और मेरे द्वारा किए गए प्रयोग शामिल हैं। यह मेरी जाँच का एक ईमानदार विवरण है, जिसमें प्रारंभिक गलत धारणाएँ और अंतिम सफलता दोनों शामिल हैं।


कार्यकारी सारांश

CVE-2025-55182 (CVSS 10.0) में व्यापक जाँच के बाद, मेरा प्रारंभिक निष्कर्ष यह था कि स्वचालित RCE का सार्वजनिक रूप से प्रदर्शन नहीं किया गया था और शोषण के लिए एप्लिकेशन-विशिष्ट gadgets की आवश्यकता होती थी। यह निष्कर्ष गलत था।

5 दिसंबर 2025 को, X पर एक अन्य स्वतंत्र शोधकर्ता (@maple3142) से अतिरिक्त जानकारी प्राप्त करने के बाद, मैंने बिना किसी एप्लिकेशन-विशिष्ट कोड भेद्यता की आवश्यकता के, सादे (vanilla) Next.js पर पूर्ण unauthenticated RCE सफलतापूर्वक दोहराया।


शोध पद्धति

चरण 1: पैच विश्लेषण (प्रारंभिक गलत धारणा)

मेरा प्रारंभिक ध्यान React 19.0.1 पैच में पहले बदलाव पर था:

कमजोर (19.0.0):

root@kitploit:~
return fn.bind.apply(fn, [null].concat(_ref));

पैच किया गया (19.0.1):

root@kitploit:~
if (Array.isArray(promiseValue)) {
  promiseValue = promiseValue.slice(0);
} else {
  promiseValue = [];
}

मैंने मान लिया कि हमले का रास्ता arrays के बजाय दुर्भावनापूर्ण objects के साथ fn.bind.apply() के माध्यम से था। मैं $ACTION_REF_ और attacker-नियंत्रित bound का उपयोग करके Server Actions में argument injection प्रदर्शित करने में सक्षम था:

root@kitploit:~
curl -X POST http://localhost:9000/ \
  -F '$ACTION_REF_0=' \
  -F '$ACTION_0:0={"id":"<ACTION_ID>","bound":["; id #","/etc/passwd"]}'

परिणाम: Arguments सफलतापूर्वक Server Action में इंजेक्ट कर दिए गए। हालाँकि, यह केवल तभी RCE की ओर ले जाता है जब लक्षित फ़ंक्शन उन arguments का असुरक्षित रूप से उपयोग करता है।


चरण 2: पैच में देखा गया असुरक्षित व्यवहार

पैच पर गहराई से नज़र डालने से getOutlinedModel() में एक और महत्वपूर्ण बदलाव सामने आया:

कमजोर:

root@kitploit:~
for (key = 1; key < reference.length; key++)
  parentObject = parentObject[reference[key]];

पैच किया गया:

root@kitploit:~
if (hasOwnProperty.call(value, name)) {
  value = value[name];
}

इस कमजोर व्यवहार ने निम्न जैसे references का उपयोग करके prototype-chain traversal की अनुमति दी:

root@kitploit:~
$1:__proto__:constructor:constructor

चरण 3: Thenable और Function.constructor के साथ प्रयोग (अंतिम छोर)

शोध के दौरान, मैंने एक thenable object का परीक्षण किया जिसमें .then property थी:

root@kitploit:~
{"then": "$1:__proto__:constructor:constructor"}

जब JavaScript इसे await के माध्यम से संसाधित करता है:

  1. JavaScript एक .then property देखता है और object को Promise के रूप में मानता है
  2. obj.then(resolve, reject) को कॉल करता है
  3. यदि then का समाधान Function.constructor से होता है, तो JavaScript Function(resolve, reject) को निष्पादित करने का प्रयास करता है

देखा गया परिणाम:

root@kitploit:~
SyntaxError: Unexpected token 'function'
    at Object.Function [as then] (<anonymous>)

चरण 4: Argument Binding सीमा (दीवार)

जब Function.constructor को निम्न रूप में बुलाया जाता है:

root@kitploit:~
Function(resolve, reject)
// resolve.toString() = "function () { [native code] }"
// Function इस कोड को पार्स करने का प्रयास करता है → SyntaxError

Arguments resolve और reject हमेशा मूल native Promise functions होते हैं। Function पहले argument को source code के रूप में व्याख्या करने का प्रयास करता है, जो अमान्य JavaScript है।

यहीं पर मेरा शोध रुक गया। मैंने निष्कर्ष निकाला कि एप्लिकेशन-विशिष्ट gadget के बिना Function.constructor के arguments को नियंत्रित करना असंभव था।


चरण 5: सफलता — Blob Deserialization (5 दिसंबर 2025)

अपने प्रारंभिक निष्कर्षों को प्रकाशित करने के बाद, एक अन्य स्वतंत्र शोधकर्ता ने मुझे उस महत्वपूर्ण टुकड़े की ओर इंगित किया जिसे मैं चूक गया था: $B (Blob) deserialization sink।

छूटा हुआ टुकड़ा

संकलित React Flight server code में (TypeScript स्रोतों में दिखाई नहीं देता), निम्न मौजूद है:

root@kitploit:~
case "B":
  return response._formData.get(response._prefix + id);

स्थान:

  • पैकेज: [email protected]
  • फ़ाइल: cjs/react-server-dom-webpack-server.node.unbundled.development.js
  • इसमें भी: [email protected]/dist/compiled/react-server-dom-webpack/

यह कोड React को attacker-नियंत्रित इनपुट से प्राप्त मानों के साथ response._formData.get() कॉल करने की अनुमति देता है, बिना किसी सत्यापन के।

यह सब कुछ क्यों बदल देता है

दृष्टिकोणFunction.constructor के Argumentsपरिणाम
Thenable (चरण 3)resolve, reject (native functions)❌ SyntaxError
Blob + Poisoned Response_prefix (attacker-नियंत्रित स्ट्रिंग)✅ RCE

निम्न को संयोजित करके:

  1. Prototype traversal ($1:__proto__:then → Chunk.prototype.then)
  2. एक poisoned _response object जिसमें:
    • _formData.get को Function.constructor पर सेट किया गया
    • _prefix को मनमाना JavaScript कोड पर सेट किया गया
  3. एक आंतरिक model जिसमें $B reference शामिल है

case "B": handler निष्पादित करता है:

root@kitploit:~
Function.constructor("<attacker कोड>" + id)

यह argument binding सीमा को पूरी तरह से बायपास कर देता है।


सार्वजनिक PoCs: विश्लेषण

RCE का दावा करने वाले लोकप्रिय GitHub PoCs निम्न Action IDs का उपयोग करते हैं:

  • "child_process#execSync"
  • "vm#runInThisContext"

ये नकली हैं। Next.js केवल एप्लिकेशन द्वारा परिभाषित Action IDs को स्वीकार करता है। अमान्य IDs निम्न उत्पन्न करती हैं:

root@kitploit:~
TypeError: Cannot read properties of undefined (reading 'workers')

हालाँकि, वास्तविक exploit के लिए नकली Action IDs की आवश्यकता नहीं होती। कोई भी मान्य Server Action ID काम करती है।


सत्यापन और प्रभाव

मैंने इस exploitation श्रृंखला का परीक्षण एक न्यूनतम Next.js 15.0.3 + React 19.0.0 एप्लिकेशन पर केवल निम्न के साथ किया:

root@kitploit:~
async function myAction(data) {
  "use server";
  console.log("Server Action called with:", data);
  return { success: true, received: data };
}

परिणाम: पूर्ण RCE की पुष्टि हुई। एप्लिकेशन में कोई असुरक्षित कोड, कोई eval, कोई execSync, कोई gadgets नहीं थे।

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


महत्वपूर्ण खोज: पैच स्थिति

5 दिसंबर 2025 तक, $B sink अभी भी Next.js 15.0.5 (कथित रूप से पैच किया गया संस्करण) में मौजूद है।

सत्यापन:

root@kitploit:~
$ npm pack [email protected]
$ tar -xzf next-15.0.5.tgz
$ grep -A5 'case "B":' package/dist/compiled/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.development.js

परिणाम:

root@kitploit:~
case "B":
  return response._formData.get(response._prefix + obj);

कोड कमजोर संस्करण के समान है।


जिम्मेदार प्रकटीकरण नोट

इस खोज के कारण कि भेद्यता "ठीक" किए गए दावे वाले संस्करणों में पूरी तरह से पैच नहीं की गई हो सकती है, मैं Vercel और Meta की सुरक्षा टीमों के साथ सत्यापन होने तक पूर्ण proof-of-concept payload को रोक रहा हूँ।

इस दस्तावेज़ में दिए गए तकनीकी विवरण भेद्यता तंत्र को समझने के लिए पर्याप्त हैं लेकिन तत्काल शोषण को रोकने के लिए जानबूझकर अपूर्ण हैं।


अद्यतन निष्कर्ष

मुझे क्या मिला (चरण 1-4)

तकनीकस्थिति
bound के माध्यम से Argument injection✅ पुष्टि (सीमित प्रभाव)
Prototype traversal

प्रारंभ में मैं क्या चूक गया

मुद्दाप्रभाव
$B (Blob) deserialization sink❌ महत्वपूर्ण - argument नियंत्रण सक्षम करता है
संकलित बनाम स्रोत कोड की जाँच❌ sink केवल संकलित आउटपुट में मौजूद है
Response object poisoning तंत्र❌ सभी सुरक्षाओं को बायपास करने की अनुमति देता है

अंतिम मूल्यांकन

CVE-2025-55182 सादे (vanilla) Next.js एप्लिकेशन पर पूर्ण unauthenticated RCE के लिए exploitable है।

  • ✅ कोई एप्लिकेशन-विशिष्ट gadget आवश्यक नहीं
  • ✅ एक single HTTP POST के साथ काम करता है
  • ✅ "gadget" React की deserialization लॉजिक में निर्मित है
  • ⚠️ दावा किए गए ठीक किए गए संस्करणों में पूरी तरह से पैच नहीं हो सकता है

समयरेखा

  • 3 दिसंबर 2025: Prototype traversal और thenable दृष्टिकोण का विश्लेषण (अंतिम छोर)
  • 4 दिसंबर 2025: स्वतंत्र शोधकर्ता से $B deserialization के बारे में जानकारी प्राप्त हुई
  • 5 दिसंबर 2025: पूर्ण RCE प्रतिकृति की पुष्टि हुई
  • 5 दिसंबर 2025: पता चला कि भेद्यता "पैच किए गए" संस्करणों में बनी रह सकती है
  • 5 दिसंबर 2025: यह रिपोर्ट प्रकाशित हुई (PoC विवरण रोके गए)

सिफारिशें

  1. तुरंत अपडेट करें React और Next.js के नवीनतम संस्करणों में
  2. पैच सत्यापित करें - परीक्षण करें कि क्या $B deserialization अभी भी मनमाने _response objects स्वीकार करता है
  3. शोषण प्रयासों के लिए निगरानी करें - निम्न की तलाश करें:
    • असामान्य Next-Action headers
    • $@, __proto__, $B पैटर्न वाले जटिल multipart payloads
  4. WAF नियमों पर विचार करें Server Action अनुरोधों में संदिग्ध पैटर्न को ब्लॉक करने के लिए
  5. सुरक्षा टीमों से संपर्क करें यदि आप उत्पादन में प्रभावित संस्करण चला रहे हैं

आभार

  • $B deserialization के संबंध में सफलता की जानकारी X पर एक शोधकर्ता (@maple3142) द्वारा प्रदान की गई
  • पैच पर उनके काम के लिए React और Next.js सुरक्षा टीमें (निरंतर सत्यापन जारी)
  • सहयोगात्मक जाँच के लिए सुरक्षा अनुसंधान समुदाय

सीखे गए पाठ

  1. केवल स्रोत नहीं, संकलित कोड की जाँच करें - महत्वपूर्ण भेद्यताएँ bundled आउटपुट में छिप सकती हैं
  2. धारणाओं पर पुनर्विचार करें जब नई जानकारी सामने आए
  3. सहयोगात्मक शोध जटिल भेद्यताओं के लिए आवश्यक है
  4. यात्रा का दस्तावेजीकरण करें - पूरी तस्वीर समझने के लिए अंतिम छोर (dead ends) मूल्यवान हैं
  5. जिम्मेदार प्रकटीकरण सार्वजनिक मान्यता से पहले आता है

अंतिम अद्यतन: 5 दिसंबर 2025

टूल डाउनलोड करें
पहलूनिष्कर्ष
प्रमाणीकरण आवश्यक?❌ नहीं
एप्लिकेशन gadget आवश्यक?❌ नहीं
सादे (vanilla) Next.js पर काम करता है?✅ हाँ
आवश्यक अनुरोधों की संख्या1 POST
प्रभावित संस्करणNext.js ≤15.0.4 + React 19.0.0
CVSS स्कोर10.0 (उचित)
✅ पुष्टि
Thenable के माध्यम से Function.constructor तक पहुँच✅ पुष्टि (लेकिन अकेले exploitable नहीं)
कमजोर संस्करणों का पता लगाना✅ पुष्टि