
Node.js JSON 병합 패치 REST API에서 CVE-2026-3030 프로토타입 오염을 시연하며, 권한 상승을 위한 취약한 서버와 익스플로잇 스크립트를 포함합니다.
// server.js - Vulnerable REST API with deep merge
const express = require('express');
const app = express();
app.use(express.json());
let config = {
role: 'user',
settings: {}
};
// Insecure deep merge function (pollutable via __proto__)
function deepMerge(target, source) {
for (const key in source) {
if (source[key] && typeof source[key] === 'object' && !Array.isArray(source[key])) {
if (!target[key]) target[key] = {};
deepMerge(target[key], source[key]);
} else {
target[key] = source[key];
}
}
return target;
}
app.patch('/config', (req, res) => {
deepMerge(config, req.body);
res.json(config);
});
app.get('/admin', (req, res) => {
// Check admin via a property that could be polluted
if (config.role === 'admin' || config.isAdmin) {
res.send('Welcome Admin!');
} else {
res.status(403).send('Forbidden');
}
});
app.listen(3000, () => console.log('Server on :3000'));
Node.js API는 JSON 패치를 적용하기 위해 취약한 딥 머지(deep merge) 함수를 사용합니다. 공격자는 __proto__를 키로 전송하여 전역 객체 프로토타입을 오염시킬 수 있으며, 이를 통해 isAdmin과 같은 속성을 추가하거나 덮어써 권한 상승을 유발할 수 있습니다.
deepMerge 함수는 __proto__ 또는 constructor를 확인하지 않고 키를 복사하므로 Object.prototype에 대한 주입이 허용됩니다.npm install express
node server.js
python exploit_prototype_pollution.py