Skip to main content
Live Webinar with SANS (June 25)— Agentic CTI Automation for Fun & ProfitRegister Free
Mallory
CriticalPublic exploit

Node.js Permission Model Unix Domain Socket Network Restriction Bypass

IdentifiersCVE-2026-21636CWE-284· Improper Access Control

CVE-2026-21636 is a medium-severity flaw in the experimental Node.js permission model affecting Node.js v25. When Node.js is started with --permission, Unix Domain Socket (UDS) connections are not properly constrained by network permission checks. As a result, even when --allow-net is not granted, attacker-controlled inputs such as URLs or socketPath options can cause APIs including net, tls, and undici/fetch to connect to arbitrary local Unix sockets. This creates a gap in the intended permission boundary by treating local socket access as effectively outside the enforced network restrictions.

Share:
For your environment

Are you exposed to this one?

Mallory correlates every CVE against your assets, your vendors, and active adversary campaigns. Know which vulnerabilities matter for you, not just which ones are loud.

ANALYST BRIEF

Impact, mitigation & remediation

What it means. What to do now. Patch path, mitigations, and the assume-compromise checklist.

Impact

What an attacker gets, and what they’ve been doing with it.

Successful exploitation allows bypass of the intended network isolation provided by the Node.js permission model. An attacker able to influence connection targets can reach privileged or otherwise sensitive local services exposed over Unix sockets, which may result in unauthorized access to local IPC endpoints, disclosure of sensitive data, privilege escalation, or local code execution depending on the capabilities of the reachable service.

Mitigation

If you can’t patch tonight, do this now.

Do not rely on the experimental Node.js v25 permission model as the sole control for network isolation against Unix Domain Socket access. Prevent untrusted input from controlling URL or socketPath values used by net, tls, undici, or fetch. Where untrusted code must run, enforce isolation with OS- or container-level controls such as filesystem permissions on socket files, service hardening, containers, seccomp, AppArmor, or SELinux, and restrict access to sensitive local Unix sockets.

Remediation

Patch, then assume compromise.

Upgrade Node.js v25 to a release containing the fix for CVE-2026-21636. The provided content does not identify the exact fixed version. In addition, review application code that passes untrusted input into net, tls, undici, or fetch connection parameters, especially socketPath and URL-derived targets, and remove assumptions that the experimental permission model alone will block local socket access.
PUBLIC EXPLOITS

Exploits

1 valid exploit after Mallory filtered fakes, detection scripts, and README-only repos (1 hidden).

VALID 1 / 2 TOTALView more in app
CVE-2026-21636MaturityPoCVerified exploit

This repository is a working proof-of-concept exploit for CVE-2026-21636, a Node.js permission model bypass affecting local TCP/UDS connectivity. The repo contains a Python exploit client (exploit.py) and a self-contained vulnerable lab under vuln_server/. The lab launches two Node.js processes under supervisord: a sandboxed Express server (server.mjs) started with --permission --allow-fs-read=/ and no --allow-net, and an unsandboxed helper process (target.cjs). The vulnerable web server exposes GET /pid, which returns the helper PID from /tmp/target.pid, and POST /language, which dynamically imports attacker-controlled input. The exploit abuses the import sink with a data:text/javascript payload to achieve arbitrary JavaScript execution inside the sandboxed process. It then sends SIGUSR1 to the unsandboxed helper process to enable the V8 inspector on 127.0.0.1:9229, uses fetch('http://127.0.0.1:9229/json') and a WebSocket connection to ws://127.0.0.1:9229/<id> from inside the sandboxed process, and leverages the Chrome DevTools Protocol Runtime.evaluate method to run process.mainModule.require('child_process').execSync('cat /app/secret.txt').toString() in the unsandboxed process. This demonstrates that localhost network access succeeds despite the absence of --allow-net, allowing a sandbox escape/pivot to arbitrary command execution. The repository is not part of a known exploit framework, is not merely a detector, and is best classified as an operational PoC with a hardcoded payload and a reproducible Docker environment.

PauldechasseyDisclosed Apr 27, 2026markdownpythonwebnetworklocal
EXPOSURE SURFACE

Affected products & vendors

Products and vendors Mallory has correlated with this vulnerability. Open in Mallory to drill down to specific CPE configurations and version ranges.

VendorProductType
NodejsNodejsapplication

Vendor-confirmed product mapping. Mallory continuously reconciles this list against your asset inventory.

What this page doesn’t show

The version that knows your environment.

This page is what’s public. Mallory adds the parts that aren’t: which of your assets are affected, which adversaries are exploiting it right now, which detections to deploy, and what to do tonight.
Exposure mapping

Query your assets running an affected version, and investigate the blast radius.

Threat actor evidence

Every observed campaign linking this CVE to a named adversary.

Associated malware

Malware families riding this exploit, with evidence and IOCs.

Detection signatures

YARA, Sigma, Snort, and vendor rules, auto-deployed to your SIEM.

Vendor-by-vendor mapping

Cross-references every affected SKU, including bundled OEM variants.

Social activity4

Community discussion across Reddit, Mastodon, and other social sources.