future-architect/uzomuzo-oss

GitHub: future-architect/uzomuzo-oss

一款开源依赖生命周期治理 CLI,通过多信号决策树检测传统 SCA 工具遗漏的已废弃、停滞和事实停更的依赖包。

Stars: 16 | Forks: 1

# Uzomuzo [![CI](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/75bf985353152812.svg)](https://github.com/future-architect/uzomuzo-oss/actions/workflows/ci.yml) [![Go Report Card](https://goreportcard.com/badge/github.com/future-architect/uzomuzo-oss)](https://goreportcard.com/report/github.com/future-architect/uzomuzo-oss) [![Go Reference](https://pkg.go.dev/badge/github.com/future-architect/uzomuzo-oss.svg)](https://pkg.go.dev/github.com/future-architect/uzomuzo-oss) [![Release](https://img.shields.io/github/v/release/future-architect/uzomuzo-oss)](https://github.com/future-architect/uzomuzo-oss/releases/latest) [![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](LICENSE) **针对 OSS 供应链的前瞻性生命周期治理。** 能够检测被传统 SCA 工具报告为“0 个漏洞 — 安全”的已被废弃、停滞和实际死亡的依赖项。 ![uzomuzo demo](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/e4710a72db152814.gif) ## 问题所在:CVE 盲区 标准的 SCA 工具(Trivy、Syft、Snyk)擅长标记已知的 CVE。但它们无法回答:**这个软件包还在维护吗?** 一个今天拥有零个 CVE 的软件包可能已经被废弃多年——没有人在关注新的漏洞,没有人会去修补它们,也没有人会回复安全报告。这些正是供应链攻击的完美目标(xz-utils 2024、event-stream 2018)。 ### SCA 遗漏了什么 — EOL-Effective ``` 📦 Package: pkg:npm/dicer@0.3.0 ⚖️ Result: 🛑 EOL-Effective 💭 Reason: Scorecard data incomplete; open advisories (1) and no human commits > 2 yrs 📦 Latest Stable Release: 0.3.1 (2021-12-19) ↳ Stable Advisories: 1 • [GHSA] GHSA-wm7h-9275-46v2 💻 Latest Commit: 2023-07-15 ``` 没有官方的弃用声明,也没有归档的代码仓库 —— 然而 `dicer` 存在一个未修补的 ReDoS 漏洞,并且已经超过两年没有任何人工提交。SCA 工具仅仅报告“1 个 CVE”然后就会忽略它。uzomuzo 将未修补的 advisory 加上缺乏维护这种组合识别为 **事实上的生命周期终结**。该软件包位于 Express 的依赖链中(通过 busboy → multer),这意味着数以百万计的应用程序正悄无声息地依赖于废弃的代码。 ### 真实扫描示例:OWASP Juice Shop ``` trivy image --format cyclonedx bkimminich/juice-shop:v14.5.1 \ | jq -r '.components[].purl // empty' \ | ./uzomuzo analyze --only-eol ``` ``` 🏷️ LABEL SUMMARY (1,540 evaluated packages): 🟢 Active: 630 (40.9%) 🔵 Legacy-Safe: 556 (36.1%) ⚪ Stalled: 263 (17.1%) 🔴 EOL-Confirmed: 88 (5.7%) 🛑 EOL-Effective: 3 (0.2%) ``` **59% 的依赖项存在 SCA 工具无法察觉的生命周期隐患。** 请参阅[完整扫描结果](docs/assets/juice-shop-eol-result.txt)。 ## 安装说明 ### 预编译二进制文件(推荐) 从 [GitHub Releases](https://github.com/future-architect/uzomuzo-oss/releases) 下载最新版本。 ### Go install ``` go install github.com/future-architect/uzomuzo-oss@latest ``` ### 从源码构建 ``` git clone https://github.com/future-architect/uzomuzo-oss.git cd uzomuzo-oss go build -o uzomuzo main.go ``` ## 快速入门 ``` export GITHUB_TOKEN=ghp_... # optional; enables commit history and Scorecard ``` ``` # 单一 package uzomuzo analyze pkg:npm/express@4.18.2 # GitHub repository uzomuzo analyze https://github.com/expressjs/express # 审计所有项目依赖 (对 CI 友好) trivy fs . --format cyclonedx | uzomuzo audit --sbom - uzomuzo audit # auto-detect go.mod in cwd uzomuzo audit --format json # JSON output for CI integration # 从 Trivy SBOM 批量处理 (详细的逐个 package 分析) trivy image --format cyclonedx bkimminich/juice-shop:v14.5.1 \ | jq -r '.components[].purl // empty' \ | uzomuzo analyze --only-eol # 文件输入 (每行一个 PURL) uzomuzo analyze --file input_purls.txt --sample 500 ``` 请参阅[用法](docs/usage.md)获取完整的 CLI 参考,以及[集成示例](docs/integration-examples.md)了解 Trivy、Syft 和 Go module 工作流。 ## 生命周期分类 uzomuzo 使用多信号决策树(OpenSSF Scorecard、近期人工提交、发布活动、注册表 EOL 标志以及未修补的 advisory 数量)将每个软件包分类为七种生命周期状态之一: | 标签 | 含义 | 操作 | | --- | --- | --- | | **Active** | 近期有人工提交 + 发布 + 健康的维护评分 | 无需采取行动 | | **Legacy-Safe** | 无近期活动,但零漏洞 — 冻结且稳定 | 接受风险或固定版本 | | **Stalled** | 维护正在衰退:评分低或提交已停止 | 持续监控;计划迁移 | | **EOL-Confirmed** | 代码仓库已归档/禁用,或注册表明确标记为 EOL | 立即迁移 | | **EOL-Effective** | 无官方 EOL 声明,但超过 2 年无人提交且存在未修补漏洞 | 迁移;视作 EOL 处理 | | **EOL-Scheduled** | 已宣布未来的 EOL 日期(尚未到达) | 在 EOL 日期前计划迁移 | | **Review Needed** | 缺乏足够的数据进行自动分类 | 需人工调查 | ## uzomuzo 的独特之处 | 功能 | Trivy / Syft | OpenSSF Scorecard | endoflife.date | **uzomuzo** | | --- | --- | --- | --- | --- | | 已知漏洞扫描 | 是 | 部分 | 否 | 否(使用 Scorecard) | | 单仓库健康度评分 | 否 | 是(17 项检查) | 否 | 是(通过 Scorecard) | | **依赖树生命周期评估** | 否 | 否 | 否 | **是** | | **长尾 EOL 检测** | 否 | 否 | 约 400 个项目 | **启发式 + 目录** | | **Bot 与人工提交过滤** | 否 | 否 | 不适用 | **是** | | 生命周期分类粒度 | 不适用 | 不适用 | 二元(EOL/否) | **7 种可操作状态** | | 批量处理规模 | 不适用 | 1 个仓库/运行 | 不适用 | **5,000+ PURLs/运行** | ### 技术创新点 | 创新点 | 为何重要 | | --- | --- | | **人工与 Bot 提交分离** | 仅包含 Dependabot/Renovate 提交的代码仓库会伪装成仍在维护的状态。uzomuzo 过滤掉自动化提交以揭示真实的人类活动。 | | **7 状态生命周期模型** | 非黑即白的“是否 EOL”是不够的。每种状态都对应一个具体的补救措施。 | | **感知生态系统的交付模型** | Go 模块通过 VCS 直连交付;npm 通过注册表发布交付。同样是“有提交无发布”的信号,在不同的生态系统中代表着不同的含义。 | | **证据链** | 每个标签都包含原因字符串和决策追踪,以便安全团队可以审计*为什么*某个软件包被标记。 | | **渐进式精度** | 在没有 GitHub token 的情况下也能工作(仅使用 deps.dev);添加 token 后可解锁提交历史和 Scorecard 以进行高精度评估。 |
示例输出 — 所有生命周期状态 ### Active — `express` (193K 个依赖项) ``` 📦 Package: pkg:npm/express@4.22.1 ⚖️ Result: 🟢 Active 💭 Reason: Recent stable package version published with recent human commits; maintenance score ≥ 3 📊 GitHub Info: Normal (⭐ 68954 stars) 👥 Dependents: 192926 🏆 Overall Score: 8.3/10 🔧 Maintained: 10.0/10 📦 Latest Stable Release: 5.2.1 (2025-12-01) 💻 Latest Commit: 2026-03-01 ``` ### Legacy-Safe — `function-bind` (100 万+ 个依赖项) ``` 📦 Package: pkg:npm/function-bind@1.1.2 ⚖️ Result: 🔵 Legacy-Safe 💭 Reason: No known advisories; no human commits for > 2 yrs 👥 Dependents: 1061436 🏆 Overall Score: 4.5/10 🔧 Maintained: 0.0/10 📦 Latest Stable Release: 1.1.2 (2023-10-12) ↳ Stable Advisories: 0 💻 Latest Commit: 2023-10-12 ``` Scorecard 显示 Maintained 0.0 —— 但该包没有任何 advisory,并且完美地做好了一件事。uzomuzo 将其归类为 **冻结且安全**。 ### Stalled — `grunt` (12K 星) ``` 📦 Package: pkg:npm/grunt@1.6.1 ⚖️ Result: ⚪ Stalled 💭 Reason: Recent human commits, no recent package publishing, maintenance score < 3 📊 GitHub Info: Normal (⭐ 12253 stars) 🏆 Overall Score: 4.0/10 🔧 Maintained: 0.0/10 📦 Latest Stable Release: 1.6.1 (2023-01-31) 💻 Latest Commit: 2025-11-05 ``` 偶尔仍有提交,但自 2023 年以来没有任何 npm 发布。没死,也不活跃 —— 明显在衰退。 ### EOL-Confirmed — `inflight` (556K 个依赖项) ``` 📦 Package: pkg:npm/inflight@1.0.6 ⚖️ Result: 🔴 EOL-Confirmed 💭 Reason: Repository is archived or disabled on GitHub 📚 EOL Evidence: • [npmjs] Stable version is deprecated in npm registry. Message: This module is not supported, and leaks memory. Do not use it. 🔁 Successor: lru-cache 📊 GitHub Info: 📦 Archived (⭐ 76 stars) 👥 Dependents: 556304 📦 Latest Stable Release: 1.0.6 (2016-10-13) [DEPRECATED] ``` 556K 个依赖项。GitHub 已归档,npm 已弃用。最后发布于 2016 年。**立即迁移。** ### EOL-Effective — `dicer` (busboy → multer → express) ``` 📦 Package: pkg:npm/dicer@0.3.0 ⚖️ Result: 🛑 EOL-Effective 💭 Reason: Scorecard data incomplete; open advisories (1) and no human commits > 2 yrs 📊 GitHub Info: Normal (⭐ 188 stars) 👥 Dependents: 4689 🏆 Overall Score: 2.8/10 🔧 Maintained: 0.0/10 📦 Latest Stable Release: 0.3.1 (2021-12-19) ↳ Stable Advisories: 1 • [GHSA] GHSA-wm7h-9275-46v2 💻 Latest Commit: 2023-07-15 ``` 没有弃用声明,没有归档 —— 但存在未修补的 ReDoS + 零维护。**SCA 的盲区。**
## 支持的生态系统 npm / PyPI / Maven / Cargo / Go modules / NuGet / RubyGems / Packagist ## 功能特性 - **多生态系统支持**:支持 8 个生态系统,完全兼容 PURL (Package URL) 规范 - **OpenSSF Scorecard 集成**:自动化的安全成熟度指标 - **并行优化的批处理**:通过并发 API 编排实现 5,000+ PURLs/运行 - **Audit 子命令**:从 CycloneDX SBOM 或 go.mod 进行批量依赖健康检查,并带有 CI 退出代码门控 - **灵活的输入方式**:直接输入 PURL / GitHub URL / 文件列表 / 混合输入 / stdin 管道 - **CSV / CLI 报告**:全面输出指标、许可证和生命周期状态 - **可通过 AnalysisEnricher 钩子扩展**:无需修改核心即可注入自定义的 EOL 目录逻辑 — [详情](docs/library-usage.md) - **可用作 Go 嵌入库**:提供 `pkg/uzomuzo/` 外观层用于 SaaS 集成 — [详情](docs/library-usage.md) ## 架构 ``` Interfaces → Application → Domain ← Infrastructure ``` - **Domain**:纯业务逻辑 — 生命周期决策树、生态系统模型、实体定义(无外部依赖) - **Application**:用例编排,使用 `AnalysisEnricher` 钩子模式实现可插拔的 EOL 目录 - **Infrastructure**:外部 API(deps.dev、GitHub GraphQL、Scorecard)/ 并行处理 / I/O - **Interfaces**:CLI 入口点 / 输入验证(无并发逻辑) 请参阅[数据流](docs/data-flow.md)了解 API 集成图和双路径评估架构。 ## 文档 | 文档 | 概述 | | --- | --- | | [用法](docs/usage.md) | CLI 命令、批处理、过滤器、配置、日志 | | [数据流](docs/data-flow.md) | API 集成图、双路径评估架构 | | [集成示例](docs/integration-examples.md) | Trivy/SBOM 集成、容器扫描、依赖追踪 | | [全景对比](docs/landscape.md) | 问题空间、工具对比、互补使用 | | [库用法](docs/library-usage.md) | Go 库 API、Evaluator、Analysis 类型 | | [PURL 身份模型](docs/purl-identity-model.md) | OriginalPURL / EffectivePURL / CanonicalKey 三层设计 | | [许可证解析](docs/license-resolution.md) | ResolvedLicense / 规范化 / 回退 / 提升 | | [开发指南](docs/development.md) | SPDX 更新、测试、性能、故障排除 | ## 为什么叫 "Uzomuzo"? 发音为 **oo-zoh-moo-zoh** — 源自日语的 *uzōmuzō* (有象無象)。 在日本的佛教哲学中,*uzō* (有象) 意为“有形之物”,而 *muzō* (無象) 意为“无形之物”。两者结合在一起,*uzōmuzō* 最初被用来描述“宇宙万物——有形的与无形的”。 现代软件供应链正是如此:一个由可见(直接)和不可见(传递)依赖组成的庞大宇宙。**uzomuzo** 照亮了这种复杂性 —— 映射依赖树中的每一个元素,为混沌带来清晰的秩序。 ## 关于 由 kotakanbe 开发,他是 [Vuls](https://github.com/future-architect/vuls) 的创建者 —— 这是一个拥有 12,000 多个 GitHub 星标的开源漏洞扫描器。uzomuzo 将这一使命从被动漏洞扫描延伸到了**前瞻性的供应链生命周期治理**。 ## 赞助 如果您觉得 uzomuzo 有用,请考虑[赞助维护者](https://github.com/sponsors/kotakanbe)。 [![GitHub Sponsors](https://img.shields.io/github/sponsors/kotakanbe?style=for-the-badge&logo=github&label=Sponsor)](https://github.com/sponsors/kotakanbe) ## 许可证 Apache License 2.0 — 详见 [LICENSE](LICENSE)。
标签:CVE盲点, DevSecOps, EOL检测, event-stream, EVTX分析, Go语言, GPT, SCA工具, xz-utils, 上游代理, 供应链攻击防御, 依赖项检测, 停止维护依赖, 威胁情报, 安全合规, 废弃依赖, 开发者工具, 开源软件治理, 日志审计, 漏洞管理, 生命周期管理, 程序破解, 网络代理, 软件供应链安全, 远程方法调用