gyubin02/cve-2026-59891-control-lab
GitHub: gyubin02/cve-2026-59891-control-lab
隔离型安全实验室,用于安全地复现并对比 @sigstore/oci CVE-2026-59891 漏洞版本与修复版本在 Registry 认证选择上的行为差异。
Stars: 0 | Forks: 0
# CVE-2026-59891 回归与控制实验室
这是一个隔离型实验项目,旨在使用相同的输入对 `@sigstore/oci` 的实际漏洞版本和修复版本进行比较,
并检查不同环境下的暴露条件。
## 验证内容
CVE-2026-59891 的核心在于选择 Registry 认证信息时发生的
hostname 混淆问题。
- `0.7.0`:仅因为 `cr.io` 存在于 `ghcr.io` 字符串中,
就可能错误选择 `ghcr.io` 的认证信息。
- `0.7.1`:在规范化 hostname 后,仅选择完全匹配的
认证信息。
本仓库会自动验证两种场景:
1. **collision**:仅有 `ghcr.io` 的认证信息,但目标却是 `cr.io`
2. **exact**:存在与目标完全匹配的 `cr.io` 认证信息
漏洞版本在第一种场景中会错误选择认证信息,而修复版本
应当拒绝选择。同时,两个版本都必须在第二种正常场景中
取得成功。
## 安全机制
- 不会读取或修改实际的 `~/.docker/config.json`。
- 仅使用本仓库内专用的 `HOME` 和无实际价值的虚假认证信息。
- 只有当 `HOME`、实验标记和虚假值全部正确时才会调用包。
- 本测试调用的 API 仅从本地文件中选择认证信息,
不会向 Registry 发送网络请求。
- 在 probe 子进程中,通过 tripwire 阻断 HTTP(S)、TCP、TLS、DNS 和 `fetch` 调用。
- 不会将当前会话的 token 和 Docker 环境变量继承给子进程。
- 测试 stdout/stderr 和审计结果中是否不会出现即使是虚假的 token。
由于本项目故意安装了包含漏洞的包,因此这是一个设置为 `"private": true` 的
教育用实验室。请勿将其作为产品代码的依赖项使用。
因此,`npm audit` 报告 0.7.0 是预期内的结果,
例外范围及其原因已记录在 [`SECURITY.md`](SECURITY.md) 中。
## 运行
环境要求:Node.js 22.22.2+、24.15.0+ 或 26 及以上版本。推荐版本
已固定在 `.nvmrc` 中。
```
npm install --ignore-scripts
npm test
npm run demo
npm run audit:fixture
npm run evidence
```
`npm run demo` 的核心预期结果:
```
0.7.0 collision credential-selected
0.7.1 collision credential-rejected
0.7.0 exact credential-selected
0.7.1 exact credential-selected
Regression result: PASS
```
## 本项目展示的能力
- 在代码层面解释实际 CVE 的触发条件并安全地进行复现
- 设计回归测试,在同等条件下对比漏洞版本与修复版本
- 除了公开的 CVSS 之外,评估真实环境中的攻击前提条件
- 涵盖 发现 → 影响分析 → 修复验证 → 控制 的漏洞管理流程
- 不触碰实际认证信息的故障安全型(fail-safe)安全测试
## 来源与范围
- [GitHub Security Advisory GHSA-pf56-329r-95rw](https://github.com/sigstore/sigstore-js/security/advisories/GHSA-pf56-329r-95rw)
- [NVD CVE-2026-59891](https://nvd.nist.gov/vuln/detail/CVE-2026-59891)
本项目是一项受限的教育性控制评估。不代表通过 CISA 资质认证、ISMS-P
认证或任何特定组织的合规性。
详细的范围、测试、风险及控制文档位于 [`docs/`](docs/) 目录中,
`npm run evidence` 可生成可重复运行的证据和 SHA-256 manifest。
标签:GNU通用公共许可证, MITM代理, Node.js, 安全控制, 暗色界面, 漏洞分析, 自定义脚本, 路径探测