挖洞经验 | 利用泄露的NPM_TOKEN访问项目私有仓库
字数 1360 2025-08-15 21:31:21
NPM_TOKEN泄露漏洞利用实战教学
漏洞概述
本教学文档详细讲解如何利用泄露的NPM_TOKEN访问项目私有仓库的安全漏洞。该漏洞类型属于敏感信息泄露,可能导致未授权访问私有代码仓库,危害性较高。
漏洞发现流程
1. 目标选择与初步测试
- 选择处理效率和奖励较高的漏洞测试项目
- 先尝试常见漏洞类型:模板注入(template injection)、IDOR(不安全的直接对象引用)
- 当常规测试无果时,转向分析目标站点的JS文件
2. JS文件收集与分析
收集方法:
- 使用Burp Suite Pro提取目标站点的JS文件
- 或使用命令行工具批量下载:
若URL含参数需先处理:cat urls.txt | xargs -I{} wget "{}"cat urls.txt | cut -d"?" -f1 | xargs -I{} wget "{}"
分析工具:
- 使用Tomnomnom的
gf工具进行模式匹配 - 浏览器开发者工具(Firefox/Chrome)进行代码美化(格式化压缩代码)
3. 敏感信息发现
在JS文件中寻找:
- 内部IP地址(如
172.x.x.x) - NPM_TOKEN值
- 私有仓库链接(private registry link)
- WebSocket连接信息
- Nonce值等敏感数据
NPM_TOKEN利用详解
NPM_TOKEN基础知识
-
用途:
- 用于持续集成系统(CI/CD)如Jenkins、Travis CI等
- 自动化部署时访问NPM私有仓库
-
权限类型:
- 读+发布(Read and publish only)
- 只读(Readonly)
- 带CIDR白名单限制的访问
-
使用格式:
在.npmrc文件中配置:registry=https://registry_link_here/ //registry_link_here/:_authToken=auth_token_here
利用步骤
-
验证NPM_TOKEN有效性:
- 创建
.npmrc文件:registry=https://registry.npmjs.org/ //registry.npmjs.org/:_authToken=auth_token_here - 执行命令测试:
若有响应则TOKEN有效npm whoami
- 创建
-
针对私有仓库的利用:
- 当发现私有仓库链接时,修改
.npmrc:registry=https://private_registry_link_here/ //private_registry_link_here/:_authToken=auth_token_here - 再次执行
npm whoami验证
- 当发现私有仓库链接时,修改
-
获取私有包信息:
- 查看私有包详情:
npm view private_repo npm get private_repo - 下载私有包进行分析
- 查看私有包详情:
漏洞上报与奖励
- 漏洞分类:敏感信息泄露导致未授权访问
- 危害等级:高危
- 奖励金额:$8000
- 处理时效:当天分类,7天后发放奖励
防御措施
-
开发方:
- 避免在客户端代码中硬编码敏感信息
- 对私有仓库实施严格的访问控制
- 使用环境变量而非直接写入配置文件
- 定期轮换NPM_TOKEN
-
安全测试方:
- 全面检查JS文件中的敏感信息
- 使用代码美化工具分析压缩代码
- 尝试所有发现的TOKEN与对应服务
经验总结
-
信息收集:
- JS文件是信息泄露的重灾区
- 浏览器开发者工具功能强大,善用代码格式化
-
测试技巧:
- 保持测试工具更新
- 多种漏洞类型交叉测试可能发现意外漏洞
- 坚持不懈是关键,三天测试最终发现漏洞
-
知识储备:
- 了解现代开发工作流程(CI/CD)
- 熟悉常见开发工具的使用方式(NPM等)
参考工具清单
-
信息收集:
- Burp Suite Pro
- wget
- cut
-
模式匹配:
- gf (Tomnomnom)
-
代码分析:
- Firefox/Chrome开发者工具
- Webpack分析
-
NPM相关:
- npm whoami
- npm view
- npm get
- .npmrc配置
通过本教学,您应该掌握了从JS文件中发现NPM_TOKEN泄露到最终利用该TOKEN访问私有仓库的完整流程。这种漏洞在实际应用中较为常见,且危害性大,值得开发者和安全研究人员重点关注。