题记与说明
综合说明:本文由两份章节文件综合而成——纵轴章《……纵轴发展史(1999–2026)》(parts/2026-10-31-软件供应链安全-SBOM-SLSA-Sigstore-vertical.md)与横轴章《……横向对比》(parts/2026-10-31-软件供应链安全实践-SBOM-SLSA-Sigstore-依赖锁定-漏洞响应-horizontal.md)。综合时做了三件事:① 修正两章间的三处差异(EO 14306 的性质与范围、CycloneDX 当前版本、SLSA v1.2 精确日期),三项均已由综合会话于 2026-10-31 通过 WebSearch 二次核实;② 合并两章各自给出的个人项目安全基线,消除重复后收敛为三层(纵轴章的 Tier 0/1/2 与横轴章的 L0/L1/L2 两套自定命名统一为 Tier A/B/C,避免与 SLSA Build L0–L3 撞名),第三方 Action 的 pin SHA 由终稿修订会话经git ls-remote实查补齐;③ 全文统一时间线与术语。终稿另按独立审读意见修订:补齐 PEP 751 的纵轴条目、CISA 新版最低元素的日期与出处、NVD 收缩的原始报道链接、NuGet 现状限定、CRA 时钟对个人开源项目的适用性答案、npm 与容器镜像的消费端验证命令,并新增可直接粘贴的security.yml/release.yml(附录 A)。凡标注"(转引)"的统计数字来自章节作者对原始报告的转引,未逐一回溯原始 PDF;全部核实与实查命令明细见文末"会话实查记录",修订取舍见"诚实的边界"。
TL;DR
软件供应链安全是同一场攻防战的五条战线:SBOM 管"装了什么"(可观测),依赖锁定管"会不会被换"(完整性),SLSA 管"怎么造出来的"(出处),Sigstore 管"怎么证明"(签名+透明日志),漏洞响应管"多快知道、多快修"(时效)。27 年的历史规律只有一条:每个机制都是事故的后视镜——left-pad 之于 lockfile,SolarWinds 之于 SBOM/SLSA,Log4Shell 之于 VEX,XZ 之于"维护者信任",Shai-Hulud 蠕虫之于默认 OIDC。站在 2026-10-31 的截面上:五个模块全部完成标准收敛(SPDX 3.0/ CycloneDX 1.7、SLSA v1.2、Cosign v3、PEP 751、OSV),竞争焦点从"要不要做"下移到"用哪套做";防线从"开发者自觉"上移到"注册机构强制 + 监管强制"——npm 吊销 classic token、EU CRA 报告时钟生效,而美国联邦却在 EO 14306 中撤回 SBOM 采购要求。对个人开发者,结论是:不需要做任何标准选型,平台原生打底 + 开源工具补缺,两小时即可搭起一条完整的 provenance 签名发布链——这条链的组成环节(npm provenance、PyPI Trusted Publishers)2023 年当年就已免费可用,当年缺的只是 GitHub 构建物的官方出处签名(GitHub Artifact Attestations 2024-06 才 GA,见阶段四);企业落地同类链路已不再难在选型,而是难在密钥托管、合规审计与多团队推广,往往需要专门团队与预算。
纵轴:发展脉络(1999–2026)
0. 一条主线,五条战线
这个课题表面上是五个名词的堆叠,实际上是同一场攻防战的五条战线。它们不是被"设计"出来的,而是被一波波事故"逼"出来的。整部历史可以概括为一条因果链:
事故(event-stream → SolarWinds → Log4Shell → XZ → Shai-Hulud)→ 政策(EO 14028 → EU CRA)→ 标准(SPDX/CycloneDX、SLSA、Sigstore、VEX)→ 生态默认值翻转(lockfile、OIDC trusted publishing、attestation)→ 响应基础设施重构(OSV、NVD 收缩、CVE 危机)
阶段一(1999–2015):史前史——漏洞编号与依赖管理的"原始积累"
- 1999 年 MITRE 启动 CVE,为漏洞建立统一编号;2005 年 NIST 上线 NVD 补上 CVSS 评分——漏洞响应的"公共地址簿"成型(公知)。
- 2004–2010 年 Maven、npm 等包管理器普及,"依赖树"成为现代软件常态,供应链攻击面在这十年悄悄成形(公知)。
- 2011 年 Linux Foundation 的 SPDX 1.0 发布——SBOM 概念最早的规范化尝试,但此后近十年停留在嵌入式/汽车合规圈(来源:SPDX Overview)。
- 2014 年 4 月 Heartbleed 爆发,催生 Core Infrastructure Initiative(OpenSSF 前身)(公知)。
此阶段的特点:有了标准和数据库,但没有攻击者的压力——供应链安全还是合规部门的纸面话题。
阶段二(2016–2020):社区自发工具期——从 left-pad 到 SolarWinds
- 2016 年 3 月 left-pad 事件:删掉一个 11 行的小包,半个 npm 生态构建失败。教会社区两件事:传递性依赖风险真实存在;必须锁定依赖(公知)。
- 锁定机制相继落地:Yarn(2016-10,首个内置 lockfile 的主流 JS 包管理器)、npm 5 的
package-lock.json(2017-05)、pip hash-checking mode、Go 1.11 的go.sum(2018-08)(公知)——Rust 的Cargo.lock更早,随 Rust 1.0 已于 2015 年落地(公知),归入阶段一。 - 2017 年 OWASP 从 Dependency-Track 拆分出 CycloneDX 1.0——比 SPDX 更"为安全而生"的第二主流规范(来源:CycloneDX 官网)。
- 2018 年 11 月 event-stream 投毒:攻击者"收养"年久失修的流行包注入窃取代码——"社会工程接管维护权"的教科书案例,比 XZ 早六年(公知)。
- 2018 年 npm 6 内置
npm audit;2019 年 5 月 GitHub 收购 Dependabot 并免费化(公知)。 - 2019–2020 年 Sigstore 孵化(Red Hat Luke Hinds、Google Dan Lorenc、普渡大学);2021-03-09 Linux Foundation 宣布 Sigstore 作为免费公共服务(Fulcio 证书 / Rekor 透明日志 / Cosign CLI)。来源:LF 新闻稿。
- 2020 年 8 月 OpenSSF 成立,Scorecard 开始给开源项目做供应链健康度打分(公知)。
- 2020-12-13 SolarWinds SUNBURST:官方构建管道被植入后门,波及约 1.8 万家客户——供应链攻击第一次以国家级规模登上头条(公知)。
阶段三(2021–2022):政策引爆——EO 14028 与"SBOM 元年"
- 2021-05-12 美国签署 EO 14028,要求 NTIA 60 天内拿出 SBOM 最低元素。来源:Federal Register。
- 2021 年 5 月 Google 联合 OpenSSF 发布 SLSA v0.1,脱胎于 Google 内部 Binary Authorization for Borg。来源:slsa.dev。
- 2021-07-12 NTIA 发布 《SBOM 最低元素》:7 个必填字段 + 三种推荐格式(SPDX/CycloneDX/SWID)。来源:NTIA 报告。
- 2021 年 8 月 SPDX 成为国际标准 ISO/IEC 5962:2021(来源:SPDX Overview)。
- 2021 年 12 月 Log4Shell(CVE-2021-44228):SBOM 第一次全民"火警演习"——有 SBOM 的组织数小时定位受影响系统,没有的靠 grep 排查数周(公知)。
- 2022 年 1 月 npm
colors/faker作者自毁式发布;同月 NTIA 发布 VEX(漏洞可利用性交换)(公知)。2022 年 2 月 NIST 发布 SP 800-218 SSDF(公知)。 - 2022-09-14 白宫 M-22-18:联邦机构采购软件时向供应商索取 SSDF 自证表单与 SBOM——买家用采购权把安全实践写进合同。来源:OMB M-22-18。
- 2022-10-25 Sigstore 宣布 GA(SigstoreCon,底特律):keyless 签名(OIDC 身份换短时证书)对所有开发者免费可用,承诺 99.5% 在线率 SLO。来源:OpenSSF 新闻稿、Google 开源博客。
- 2022 年 12 月 torchtriton 依赖混淆:攻击者在 PyPI 发布同名恶意包劫持 PyTorch nightly 构建(公知)。
阶段四(2023):provenance 落地之年——从"有规范"到"有默认值"
- 2023-04-19 SLSA v1.0:首个稳定版。放弃 v0.1 的"全等级军备竞赛",收窄为 Build Track + 可验证 provenance(基于 in-toto attestation),"我达到 SLSA L2"第一次变成可机器验证的陈述。来源:OpenSSF 新闻稿。
- 同日 npm provenance 公共测试上线(2023-09-26 GA):从 GitHub Actions 发布的包自动附带 Sigstore 签名的出处证明。来源:GitHub Blog。
- 2023-04-20 PyPI Trusted Publishers:OIDC 短时凭证取代长期 API token。来源:PyPI Blog。
- 2023 年 6 月 OMB M-23-16 给出联邦自证表单模板;上半年 OpenSSF 发布 OpenVEX,Google OSV 生态成熟、OSV-Scanner 进入 CI 常客名单(公知)。
- 2023 年 11–12 月 欧盟 CRA 达成政治协议。来源:cyberresilienceact.eu。
这一年的主题:普通开发者"发布一个包"的默认路径仍然不安全,于是各包生态做同一件事——把 provenance 和 OIDC 变成零成本的默认选项。
阶段五(2024):现实检验——XZ 后门、NVD 失能与 SBOM 的"扩科"
- 2024-02-12 NVD 富化停摆:合同到期,积压涨到 1.8 万+ 条,5 月超过 90% 新 CVE 无人分析;8 月 NIST 委托 CISA 才部分恢复。来源:VulnCheck 分析。全行业分诊能力被迫转向 OSV、商业情报与 CISA KEV。
- 2024-03-29 XZ Utils 后门(CVE-2024-3094,CVSS 10.0):代号"Jia Tan"的攻击者用约两年取得维护权,在压缩库里植入针对 sshd 的后门,被微软工程师 Andres Freund 因登录慢半秒而发现。SBOM/SLSA/Sigstore 全都防不住"维护者本人被收编"——本课题历史上最深刻的一课。来源:Dark Reading。
- SBOM 双标准同月"扩科":CycloneDX 1.6(2024-04-09,新增 AI/ML BOM,来源:CycloneDX 官方公告);SPDX 3.0(2024-04-16,从软件清单扩展为可描述硬件、AI 模型、数据集的通用图谱,来源:LF 新闻稿)。2024-07-01 CycloneDX 1.6 被接纳为 ECMA-424。
- 2024-06-25 GitHub Artifact Attestations GA:GitHub Actions 构建物自动获得基于 Sigstore 的签名出处。来源:github.blog。PyPI 侧 PEP 740(attestation 格式)定稿并陆续落地。"发布即带出处"开始成为默认路径。
- 2024 年 6 月 Polyfill.io:域名易主后向数百万网站注入恶意重定向(公知)。
- 2024-12-10 EU CRA 正式生效,SBOM 与漏洞处理进入强制监管轨道。来源:cyberresilienceact.eu。
阶段六(2025–2026):默认安全收紧与"蠕虫时代"
- 2025-03 PEP 751 接受:Python 首个标准锁文件格式
pylock.toml定案——锁文件从此不专属任何单一工具(来源:PEP 751)。 - 2025 年 4 月 CVE 资金危机:MITRE 警告联邦合同到期,全球 CVE 编号发放面临中断;CISA 定性为"合同管理问题"并争取 11 个月延期。来源:KrebsOnSecurity。
- 2025 年 SLSA 两连跳:v1.1(2025-04-21,整理修订,来源:SLSA Blog);v1.2(2025-11-24) 新增完整 Source Track,把源码管理(评审、归属、版本控制)纳入分级——补上 v0.1 画饼未兑现的"源码侧"半边,直接回应 XZ 打在"评审与构建接缝"上的盲区。来源:slsa.dev/blog 2025-11 公告(已核实)。
- 2025 年 npm 蠕虫之年:8 月 nx 包遭 s1ngularity 攻击(CI 凭证被窃);9 月 Shai-Hulud 第一波——npm 史上首个大规模自复制供应链蠕虫,窃取维护者凭证→发布带毒版本→感染下游构建环境,500+ 包沦陷(来源:Pulsedive、WIZ,转引);11 月第二波 "The Second Coming" 扩大到 1000+ 包(含 Zapier 组件),
preinstall脚本投毒(来源:techzine.eu)。 - 2025-10-08 Cosign v3 发布(来源:blog.sigstore.dev);2025-10-21 CycloneDX 1.7 发布(高级密码学支持等,预计 2025-12 成为 ECMA-424 第二版;来源:CycloneDX Specification Overview,已核实)。
- 2025-12-09 npm 永久吊销全部 classic tokens,granular token 上限 90 天,全面转向 OIDC trusted publishing——包生态第一次强制淘汰"长期凭证"。来源:GitHub Changelog、npm 文档。
- 2025 年美国政策急转(已核实):2025-06-06 EO 14306 修订 EO 14144(EO 14028 的后续令),剥离 SBOM 采购与软件安全自证相关条款;2026 年 1 月底 OMB 跟进撤销承包商自证要求,转向"基于风险"的表述(零信任/云安全部分保留)。来源:CRS IN12570、DWT 2026-02、Wiley 2026-01。注意其精确性质:修订而非整体废除 EO 14028 系列指令,但 SBOM/自证条款被移除。
- 2026 年蠕虫反扑:Q1 四起重大攻击波及 Trivy 等安全工具本身(来源:Rapidfort);4–5 月 "Mini Shai-Hulud" 第一波(TeamPCP,172 包/404 恶意版本,CVE-2026-45321);5 月中旬波及阿里巴巴 @antv 可视化生态(SafeDep 计 317 包);6 月初 @redhat-cloud-services 32 包沦陷。来源:CSA Labs、NCSC 指南(2026-06)。ReversingLabs 2026 年报:恶意开源包同比 +73%,约 90% 集中在 npm(转引)。
- 2026-04-15 NVD 收缩:只对 CISA KEV 目录及其他高优先级条目做富化——放弃"全量 CVE 分析"的国家承诺,官方漏洞数据库正式降格为"多源之一",富化覆盖面降至全部 CVE 的约 15–20%(来源:NIST 公告、Recorded Future 追踪,已核实)。
- 2026-09-11 CRA 报告义务生效(主动利用漏洞 24 小时预警 / 72 小时通报 / 14 天终报;该时钟约束的是 CRA 意义上的"制造商"——纯非商业的个人开源项目不适用,详见"常见追问");2027-12-11 全部实体义务(安全设计、SBOM、漏洞处理)适用。来源:cyberresilienceact.eu、Kirkland & Ellis。同阶段 CISA 更新 SBOM 最低元素:2025-08-22 发布新版草案(公开征求意见至 2025-10-03,在 NTIA 七字段基础上新增必填数据元素、定义 SBOM"覆盖度"口径),2026-07-29 定稿为 2026 版最低元素。来源:CISA 资源页(已核实)。
六个阶段一张表
| 阶段 | SBOM | SLSA | Sigstore | 依赖锁定 | 漏洞响应 |
|---|---|---|---|---|---|
| 1999–2015 | SPDX 1.0(2011) | — | — | Cargo.lock 随 Rust 1.0(2015) | CVE(1999)/NVD(2005) |
| 2016–2020 | CycloneDX 1.0(2017) | — | 孵化(2019–2021-03) | Yarn/npm lock/go.sum | npm audit、Dependabot |
| 2021–2022 | NTIA 最低元素、ISO 5962 | v0.1(2021-05) | LF 宣布 → GA(2022-10-25) | hash 校验普及 | VEX、SSDF、M-22-18 |
| 2023 | 进入采购合同 | v1.0(2023-04-19,移除源码要求) | npm provenance GA(2023-09) | PyPI Trusted Publishing | OSV 生态、OpenVEX |
| 2024 | CycloneDX 1.6 + ECMA-424、SPDX 3.0 | — | GitHub Artifact Attestations GA(2024-06-25) | PEP 740 定稿 | NVD 停摆、XZ 后门、CRA 生效 |
| 2025–2026 | CycloneDX 1.7(2025-10-21)、CISA 2026 版最低元素(2026-07-29 定稿) | v1.1(2025-04)、v1.2(2025-11-24,Source Track) | Cosign v3;蠕虫时代的底座 | PEP 751 接受(2025-03);npm 吊销 classic tokens(2025-12-09) | CVE 危机(2025-04)、EO 14306 撤回(2025-06)、NVD 只富化 KEV(2026-04)、CRA 报告义务(2026-09-11) |
横轴:横向对比(2026-10-31 时间截面)
0. 截面速览与三层对比地图
在当前截面上,每个模块都完成了第一轮"标准收敛",竞争从"要不要做"变成"用哪套做":
| 模块 | 本体与当前版本 | 一句话定位 | 近 18 个月关键变化 |
|---|---|---|---|
| SBOM | SPDX 3.0 vs CycloneDX 1.7 双雄并立 | "你的软件里有什么" | 双格式差距收窄,第三方建议双采 |
| SLSA | v1.2(2025-11-24),Build L0–L3 + Source Track | "怎么被造出来的" | Source Track 入正典;GitHub Attestations 成为"个人 SLSA Build L2 快捷通道" |
| Sigstore | Cosign v3(2025-10-08)+ Fulcio/Rekor | "谁在什么身份下签的字" | npm/PyPI 把 Sigstore 系凭证变成发布默认路径;Maven Central 起步 |
| 依赖锁定 | PEP 751 pylock.toml(2025-03 接受);Dependabot vs Renovate | "依赖版本由谁说了算" | Python 终于有标准锁文件;npm 经典 token 全面失效 |
| 漏洞响应 | OSV-Scanner v2 + OpenVEX;商业 SCA 阵营 | "坏了多快知道、多快修" | CRA 报告义务生效,响应从最佳实践变成合规义务 |
本课题是"实践组合"而非单一产品,横向对比分三层——每一层的"竞品"含义不同:标准层(谁的标准被采纳:SPDX vs CycloneDX、SLSA vs in-toto vs Scorecard、Sigstore vs Notary v2 vs GPG、OSV vs NVD vs GHSA、OpenVEX vs CSAF);工具层(抢同一份 CI 预算:Syft/Trivy/cdxgen、OSV-Scanner/Grype vs Snyk/Mend/Black Duck/Endor Labs、Dependabot vs Renovate);路线层(自建开源全家桶 vs 平台原生 vs 商业托管;注册机构强制 vs 自愿合规;欧盟强监管 vs 美国收缩)。
1. 标准层
SBOM:SPDX 3.0 vs CycloneDX 1.7 vs SWID。SPDX 出身许可合规、法律语义最强、ISO 国际标准身份;CycloneDX 安全起家、原生内置 VEX 与漏洞对象、安全工作流最顺;SWID 局限于设备管理场景。2026 年的共识是"差距收窄、双采为主"——CycloneDX 在 1.5→1.7 补齐许可与专利元数据,SPDX 的传统许可优势被压缩;第三方对比见 Interlynk(2026-06)、sbomify(2026-01)(转引)。OpenSSF 博客(2023)的公开口径是两大格式各自成熟、"黄金标准尚未定于一尊"(来源,转引),产出侧的通行建议因此是双格式同时交付。对个人项目:不用纠结——Syft/Trivy 同时输出两种格式,成本差为零。
构建完整性:SLSA v1.2 vs in-toto vs Scorecard。三者不是竞品而是堆叠:in-toto 是签名化 attestation 的数据底座,SLSA 是消费该格式的分级框架(Build Track 讲"构建时没被篡改":L0 无 provenance → L1 有 provenance → L2 托管构建平台 → L3 加固构建,见 levels 页),Scorecard 是"横切自查"的 20 项检查器。v1.2 把源码侧(评审、分支保护、归属)正式带回正典——xz 式攻击恰好打在 Source Track 与 Build Track 的接缝上。其上的 VSA(Verification Summary Attestation)构成"证明的证明",消费方不必重放整条验证链。对个人项目,Scorecard 的投入产出比远高于冲 SLSA 等级。
签名与证明:Sigstore/Cosign v3 vs Notary v2 vs GPG。实质是信任锚之争:Cosign 的信任锚是"OIDC 身份 + Rekor 公开透明日志"(私钥管理成本 ≈0),Notation 的信任锚是"企业 CA"(可接 KMS/HSM),GPG 是长期个人密钥(整体退潮)。2026 年选型共识:默认 Cosign,有既有 PKI/合规硬件要求选 Notation,云厂商绑定常替你做决定(来源:secure-pipelines.com、encryptionconsulting.com,转引)。注册机构是真正的分水岭:npm provenance GA 后 3800+ 项目带出处发布(转引);PyPI 走 PEP 740;Maven Central 直到 2025-01-28 才允许验证 Sigstore 签名且 PGP 仍是必需(来源:central.sonatype.org)——Java 生态在签名现代化上落后 JS/Python 约两年。Rekor 累计签名量约 1.4 亿条量级(OpenSSF 2024 年报与检查点 API 口径,均为转引)。
漏洞情报与豁免声明:OSV vs NVD vs GHSA;OpenVEX vs CSAF。OSV 的胜出点是把漏洞当"版本区间查询"而不是"CVE 文档",与锁文件天然对齐;NVD 在 2024 年断供风波后让出生态中心位;GHSA 只覆盖 GitHub 视角。VEX 侧,2026 年 CRA 排毒工作流的事实标准是 OpenVEX + 可达性分析:用 OpenVEX 文档豁免误报,配合调用链分析把"有洞"降级为"够不着"(来源:cra-decoded.com、OSV-Scanner changelog,转引)。
2. 工具层
SBOM 生成器:共识排序 Syft ≳ cdxgen > Trivy > MS SBOM Tool(TheCTOClub 2026 榜单、faun.dev 评分,第三方/转引,Anchore 系来源居多需打折)。真正的分野在"构建时 SBOM vs 源码/镜像扫描 SBOM":源码推导对 Python/Go 可能不准(cdxgen#2223,转引),发布级 SBOM 应尽量在 CI 构建产物上生成——这一条直接决定了下文基线里 SBOM 放在 release 流程。
漏洞扫描与响应:开源三件套——Syft 生成 SBOM、Grype 消费 Syft 的 SBOM 做漏洞匹配、OSV-Scanner v2 补齐容器分层感知与修复引导(v2.2.x 加 Java 可达性)——对个人项目"够用且免费";商业 SCA 的差异化只剩两点——企业许可合规(Black Duck/Sonatype)与降噪即优先级(Endor Labs 的可达性路线,厂商自述)。纯检测能力上商业与开源差距持续收窄(JetBrains Qodana 综述 + 多份对比稿交集,转引)。平台内置的 Dependabot 免费零配置,弱项是无可达性分析与策略豁免。
依赖更新:Dependabot vs Renovate——GitHub 上求省心用 Dependabot(10 行 YAML 够用),要控制力/monorepo/跨平台用 Renovate(来源:konvu.com、Renovate 官方对比页,转引)。
汇聚与策略层:Dependency-Track(SBOM 入库 + 风险面板)与 GUAC(把 SBOM、SLSA 证明、Scorecard、漏洞数据汇成可查询图,docs.guac.sh)是互补而非竞品。对个人项目两者都过重——SBOM 挂 Release + 本地 osv-scanner 即可。
3. 路线层:2026 年横轴上最大的三道分野
① 注册机构成为第一道防线(最重要的格局变化)。Shai-Hulud 两波蠕虫把"平台侧强制"从讨论变成既成事实:npm 撤销经典 token、granular token 限 90 天、Trusted Publishing 成为推荐路径、引入 staged publishing(docs.npmjs.com,转引)。Sonatype 2025 年报称全年新增恶意包 454,600+(厂商自报,转引)。个人项目供应链安全的一半,已经从"你自己做什么"变成"你发布到哪个平台、平台强制了什么"——npm/PyPI 是高水位,Maven Central(PGP 仍必需,见上文)次之;NuGet 居中:OIDC Trusted Publishing 已于 2025-09 前后上线并转正为推荐路径(Microsoft Learn,已核实),但其落后集中在现代化链路的后半段——Sigstore 系 provenance/attestation 缺位、作者签名可选,不及 npm/PyPI 的"发布即带出处"。
② 监管分野:欧盟上强度、美国踩刹车。欧盟 CRA 报告义务 2026-09-11 生效(24h/72h/14d 三段时钟,约束制造商;纯非商业个人开源不适用,见"常见追问")、2027-12-11 全面适用;美国 EO 14306(2025-06-06)剥离了 EO 14028 系的 SBOM 采购与自证条款,2026 年初 OMB 撤销承包商自证(CRS IN12570、DWT,转引;CISA 的 SBOM 最低要素作为自愿事实标准存活)。同一年里,"SBOM 是否强制"在大西洋两岸给出了相反答案。
③ 工具路线:开源自建(零许可费、自己运维)vs 平台原生(GitHub 全家桶,≈0 成本覆盖 SLSA Build L0–L2 大部分场景) vs 商业托管(降噪/合规报表/团队规模红利)。个人项目的最优解几乎是注定的:平台原生打底 + 开源工具补缺口(SBOM 生成、容器签名)。
交叉洞察:两轴结合说明了什么
洞察一:机制是事故的后视镜,而"可验证性"决定采纳速度
纵轴给出的最强规律:left-pad 之于 lockfile,SolarWinds 之于 SBOM/SLSA,Log4Shell 之于 VEX,XZ 之于"维护者信任",Shai-Hulud 之于默认 OIDC——判断一个实践会不会存活,看它回应的是哪场事故。在此基础上叠加横轴的观察:SPDX 诞生十年没出圈(阶段一),SLSA v1.0 把"等级"改成"可机器验证的 provenance"后三年内被三大包生态内置(阶段四)——"能被机器验证"是分水岭,可验证性决定采纳速度。两轴结合的推论:2026 年新冒出来的任何供应链安全提案,先问两个问题——它回应哪场事故?它能被 CI 里的机器验证吗?
洞察二:防线在持续上移,个人安全的一半已经"外包"出去
把纵轴的六个阶段排成一条线,防线的位置不断上移:仓库内自觉(lockfile、audit,2016–2020)→ 平台供给(Dependabot、Artifact Attestations,2019–2024)→ 注册机构强制(trusted publishing、token 吊销,2023–2025-12)→ 监管强制(CRA 三段时钟,2026-09 起)。横轴印证这是 2025–2026 的最大格局变化:npm/PyPI 的强制水位已经替开发者挡掉了"长期凭证"这一整类风险(2025-12-09 吊销 classic tokens),GitHub 的免费 Attestations 替开发者做掉了 SLSA Build L2 的 provenance。识别这类"外部已解决的问题",是裁剪个人基线的方法论——外部已兜底的部分不要重复建设,个人精力只投在外部不管的部分(消费端验证、SBOM 交付、秘钥卫生)。
洞察三:政策弧线在 2025 年分岔——美国四年走完"强制→撤销",欧盟接棒
纵轴的阶段三把 EO 14028 → M-22-18 讲成"采购权写进合同"的胜利,但横轴揭示了这条弧线的断点:2025-06-06 的 EO 14306 修订 EO 14144,剥离了 SBOM 采购与自证条款(已核实)。合并后的完整弧线是:EO 14028(2021-05)→ NTIA 最低元素(2021-07)→ M-22-18(2022-09)→ M-23-16(2023-06)→ EO 14306 撤回(2025-06)→ OMB 撤销自证(2026 年初)——从强制到撤回只用了四年。与此同时欧盟 CRA 用同样四个动作走完了立法流程并在 2026-09-11 启动报告时钟。对用户判断的含义:SBOM/VEX 的驱动力已从"美国政府采购"转移到"欧盟法域 + 下游企业客户的安全问卷";单押任何一个法域的合规都是脆弱策略,正确姿势是把 SBOM/VEX 当作回归"工程质量实践"的东西来做——合规是副产品,不是目标。
洞察四:单一权威源是单点故障,多源化是唯一解
纵轴连续三年的坏消息构成一个完整的论证:NVD 富化停摆(2024-02,积压 1.8 万+)→ CVE 资金危机(2025-04,编号发放险些中断)→ NVD 只富化 KEV(2026-04,放弃全量分析承诺)。横轴则展示了市场的响应:OSV 把漏洞变成"包名@版本"的区间查询并成为事实接口,GHSA、CISA KEV、商业情报各自补位。两轴合起来的选型纪律只有一条:任何漏洞响应流程不得只依赖单一数据库——个人基线里 Dependabot(GHSA 系)+ osv-scanner(OSV 系)+ 每周定时重扫的组合,本质上就是这个原则的最小实现。
洞察五:攻击面的最终答案在"人与身份",SLSA v1.2 是事故对标准的直接塑形
event-stream(2018,收养维护权)→ XZ(2024,两年社工渗透)→ Shai-Hulud(2025,蠕虫窃凭证自我复制)→ 2026 蠕虫反扑(连安全工具本身都被打)——纵轴显示攻击者早就完成了从"打代码漏洞"到"打人与凭证"的迁移;ReversingLabs 2026 年报的 +73% 恶意包、约 90% 集中在 npm(转引)说明这已进入指数传播模式。横轴展示的防御映射是一一对应的:OIDC 短时凭证消灭长期 token(npm 2025-12-09 强制)、attestation 消灭匿名发布(PEP 740、npm provenance、GitHub Attestations)、SLSA v1.2 Source Track 把评审与归属纳入分级(对 XZ 的直接回应)。特别注意 Source Track 的时点:v1.0(2023-04)曾把源码要求整体移出,社区担心"Source Track 难产",结果 2025-11 的 v1.2 把它正式带回——XZ 后门发生在 v1.0 发布一年之后,标准的"补课"就是被这场事故逼出来的。这是"机制是事故的后视镜"规律在标准演进层面最干净的一次复现。
洞察六:对个人开发者的判断与建议(合并两章基线后的统一版)
核心判断:2026 年,个人项目与企业的基线差距已缩小到"两小时"——GitHub Artifact Attestations(2024-06 GA)+ Trusted Publishing + Dependabot + osv-scanner,两小时内能搭起一条完整的 provenance 签名发布链。需要把话说准:这条链的组成环节(npm provenance、PyPI Trusted Publishers)2023 年当年就已免费可用,2023 年缺的只是 GitHub 构建物的官方出处签名(Artifact Attestations 2024-06 才 GA,见阶段四);"两小时"指的是个人开发者的配置时间,企业要落地同等链路,差距不在能力或选型,而在密钥托管、合规审计与多团队推广,往往需要专门团队与预算。不需要做任何标准选型,照抄默认值即可。
统一最小基线(三层;第三方 Action 的版本 tag 出自横轴章会话的 gh api 实查,commit SHA 出自本终稿会话的 git ls-remote 实查,均为 2026-10-31,明细见文末实查记录):
- Tier A 止血包(≤30 分钟,全零代码):① 提交 lockfile 并冻结安装(npm
package-lock.json+npm ci;pnpm--frozen-lockfile;Python 用 uv,uv lock+uv sync --locked,提交uv.lock作为事实源,PEP 751 的pylock.toml按需导出用于对外交换——两者关系与取舍见"常见追问"四;Rust 提交 Cargo.lock);② Settings → Code security 全开(Dependabot alerts、version updates、Secret scanning + Push protection、Private vulnerability reporting);③ 分支保护:main 禁直推、要求 CI 状态检查;④.github/dependabot.yml(npm/pip + github-actions 生态也要更新,Actions 投毒是真实向量;minor/patch 分组减少噪音);⑤ 写一份 5 行SECURITY.md(支持版本、报告渠道、响应时限)。 - Tier B CI 门禁(一次配置):
.github/workflows/security.yml——gitleaks(全历史扫描,gitleaks-action@v3.0.0)+ osv-scanner(复用官方 reusable workflowv2.7.0,结果走 SARIF 进 Security 面板)+ 每周 cron 定时重扫(新 CVE 是补发出来的,NVD 停摆教训);顶层permissions: {}零权限逐 job 下放;所有第三方 Action 一律 pin 到完整 commit SHA、tag 写进行尾注释——版本 tag 可被覆盖复用,按本文自己的威胁模型(下表"CI Action 被投毒"行)不足以防御,故不采纳"SHA 或 tag 二选一"的宽松写法。tag 与 SHA 对照及完整可粘贴文件见附录 A。 - Tier C 发布链(只在你对外发包时需要,半天):npm 走 Trusted Publishing +
npm publish --provenance;Python 走 PyPI Trusted Publishing(pypa/gh-action-pypi-publish@v1.14.3+id-token: write,自动生成 PEP 740 attestation)+astral-sh/setup-uv@v10.3.3;GitHub 构建物加actions/attest-build-provenance@v4.2.2(SLSA Build L2 级出处);SBOM 用anchore/sbom-action@v0.24.3以 cyclonedx-json 随 release 上传(在 CI 构建产物上生成,不要在源码上推导);容器镜像cosign sign --keyless。以上 Action 在附录 A 的 YAML 中一律写成动作名@完整commitSHA # 版本tag形式。消费端验证:Python 包gh attestation verify dist/*.whl -R <user>/<repo>;npm 包npm audit signatures;容器镜像gh attestation verify oci://…或cosign verify——完整命令见"常见追问"二。
威胁 ↔ 动作对照表(证明"最小"不是随意裁剪):
| 攻击向量 | 真实案例 | 对应动作 |
|---|---|---|
| 维护者 token 被盗→蠕虫传播 | Shai-Hulud 两波(2025-09/11) | Trusted Publishing(无长期 token)+ 90 天 granular token |
| 安装脚本投毒 | Shai-Hulud 的 preinstall | npm ci --ignore-scripts(代价:esbuild/sharp/node-gyp 系原生包会被跳过装坏;对策见"常见追问"五);不裸跑 npx <未固定包> |
| 构建时篡改 | XZ Utils(2024-03) | CI 构建而非本地发包 + attest-build-provenance |
| 依赖混淆/typosquatting | torchtriton(2022-12);常态恶意包 45 万+/年(转引) | lockfile 冻结 + 消费端 verify |
| 历史泄漏的密钥 | s1ngularity(2025-08) | Secret scanning + push protection + gitleaks 全历史 |
| CI Action 被投毒 | GitHub Actions tag 复用攻击 | Action pin 到完整 commit SHA(tag 仅作注释)+ actions 纳入 Dependabot |
| 用了含洞版本而不自知 | Log4Shell 的教训 | osv-scanner 定时重扫 + Dependabot alerts |
明确不建议个人项目做的:自建 Sigstore/Fulcio/Rekor(公共好实例已免费覆盖);追 SLSA Build L3(hermetic 构建性价比极低,L2 够用);手写 VEX 或维护正式 SBOM 分发渠道(VEX 等有下游真实消费者再说);自建私有 registry(那是企业内网问题);部署 Dependency-Track/GUAC 这类常驻服务(过重)。
常见追问
追问一:完整可粘贴的 security.yml / release.yml 在哪?
附录 A。其中所有第三方 Action 均 pin 到 2026-10-31 经 git ls-remote 实查的 commit SHA(tag 写在行尾注释),升级时先更新注释里的 tag、再取新 SHA 替换。再次强调"诚实的边界":相关会话均未实际运行过这些工作流(无对应仓库与 runner),使用前请以各官方 release 页为准。
追问二:npm 包与容器镜像的消费端验证命令?
- npm 包(校验本地已装依赖):
npm audit signatures(npm 9+ 默认可用)——对node_modules里的包逐一核对 registry ECDSA 签名与 provenance attestation,失败时以非零码退出,可直接作 CI 门禁;缺 attestation 的老包不算失败,只有"声明有 provenance 但验不过"才报错。 - 容器镜像:GitHub 出品的构建物用
gh attestation verify oci://ghcr.io/<owner>/<img>:<tag> -R <owner>/<repo>(必须用-R或--owner固定信任源;私有镜像需先docker login);自签(cosign sign)镜像用cosign verify <image> --certificate-identity-regexp='^https://github.com/<owner>/' --certificate-oidc-issuer=https://token.actions.githubusercontent.com。 - Python 包:
gh attestation verify dist/*.whl -R <user>/<repo>(见 Tier C)。
追问三:CRA 的 24h/72h/14d 时钟适用个人开源项目吗?
分三种身份:① 纯非商业 FOSS(免费分发、不收费、无付费支持/商业化捆绑)不构成 CRA 意义上"投放市场"的产品,制造商义务(含第 14 条报告时钟)不适用;② 以"开源软件管理员"(open-source software steward,第 24 条)身份持续维护项目的组织/个人只承担轻义务——安全策略、配合漏洞信息共享——不背制造商时钟;③ 一旦收费、卖付费支持/订阅、把项目捆绑进商业分发,就可能被认定为制造商,时钟适用(2026-09-11 起)。一句话:"周末发包不触发时钟,靠项目收钱要查表"。条款口径综合自第三方合规指南(转引;FOSS 豁免落在序言的条号在不同指南间有出入,故本文不引具体序言号),正式文本以 EUR-Lex 为准。
追问四:PEP 751 的 pylock.toml 与基线推荐的 uv.lock 什么关系、提交哪个?uv.lock 是 uv 的原生锁文件,保留 uv 全部能力(多平台统一解析、可编辑安装、uv 特有依赖特性);pylock.toml 是 PEP 751 定下的跨工具标准格式(2025-03 接受)。uv 支持 uv export --format pylock.toml 从 uv.lock 导出标准格式,也能直接从 pylock.toml 同步环境——但 uv 作者明确表示它尚不足以完全替代 uv.lock(缺 uv 特有特性)。建议:仓库提交 uv.lock 作单一事实源;下游或审计方需要标准格式时,在 CI 里导出 pylock.toml 随发布物交付;不要把两份锁文件同时当事实源双维护。
追问五:npm ci --ignore-scripts 会不会把东西装坏?
会——它跳过所有 install 脚本,esbuild、sharp、node-gyp 系等依赖 postinstall 下载/编译原生产物的包会装上不可用。这是"默认拒绝、按需放行"的取舍,不是免维护开关:① 对确需脚本的可信包,以 --ignore-scripts=false 单独安装或重建放行;② 或整体换 pnpm,用 onlyBuiltDependencies 白名单精确放行(名单外的脚本一律不跑);③ 该开关在 CI 与新依赖首次引入时保持开启,本地日常安装自行权衡。威胁表里它对应 Shai-Hulud 式 preinstall 投毒——宁可装坏可诊断,不可装进后门。
诚实的边界
- 本报告的关键事实来自两份章节文件的检索成果 + 综合会话的 3 次 WebSearch 核实(EO 14306、CycloneDX 1.7、SLSA v1.2)+ 终稿修订会话的补充核实(CISA 草案与定稿日期、NVD 收缩的 NIST/Recorded Future 原文、NuGet Trusted Publishing 现状、CRA 第 14/24 条与 FOSS 豁免口径、uv 的
pylock.toml导出、npm audit signatures与gh attestation verify oci://),明细见文末实查记录。标注"(转引)"的统计(Rekor 签名量、Sonatype 恶意包计数、SBOM 工具评分、npm provenance 采纳数)未回溯原始 PDF。 - 原稿"OpenSSF 的建议干脆是两个都强制采纳"一语,因未能定位到 OpenSSF 的原始条目(可查到的 OpenSSF 口径是"黄金标准尚未定于一尊"),终稿已改为可溯源的表述并删除"强制采纳"说法。
- 原稿"NuGet 是洼地"一语经查需要限定:NuGet.org 的 OIDC Trusted Publishing 已于 2025-09 前后上线并转正为推荐路径,其落后集中在 Sigstore 系 provenance/attestation 缺位与作者签名可选(见路线层①)。
- 基线 YAML 的版本 tag 由横轴章会话实查(
gh api),commit SHA 由终稿修订会话实查(git ls-remote);但完整工作流在所有会话中均未实际运行(无对应仓库与 runner),本机也未安装 osv-scanner/gitleaks/syft/cosign 二进制。使用前请以各官方 release 页为准。
附录 A:可直接粘贴的 `security.yml` 与 `release.yml`
模板状态:未实际运行(无对应仓库与 runner)。所有 Action 的 SHA 均为 2026-10-31 经git ls-remote <repo> refs/tags/<tag>实查所得(轻量 tag 即 commit 本身,附注 tag 已做脱引用^{}核对),tag 对照表见 YAML 注释与文末实查记录。官方 Action(actions/*)同样按 SHA pin——它们一样可能被 tag 复用攻击。
.github/workflows/security.yml(Tier B:密钥泄漏全历史扫描 + 依赖漏洞每周重扫,结果进 Security 面板):
name: security
on:
push:
branches: [main]
pull_request:
schedule:
- cron: "17 3 * * 1" # 每周一 UTC 03:17 定时重扫:新 CVE 是补发出来的
workflow_dispatch:
permissions: {} # 顶层零权限,逐 job 下放
jobs:
gitleaks:
runs-on: ubuntu-latest
permissions:
contents: read
pull-requests: write # PR 内评论告警用
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
fetch-depth: 0 # 全历史扫描
- uses: gitleaks/gitleaks-action@e0c47f4f8be36e29cdc102c57e68cb5cbf0e8d1e # v3.0.0
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# GITLEAKS_LICENSE: 仅组织账号需要(gitleaks.io 免费申请),个人账号无需
osv-scan:
# 官方 reusable workflow:内部完成扫描、SARIF 生成与 Code Scanning 上传
# 注意:scan-args 不能设 --format/--output,由该 workflow 自行控制
uses: google/osv-scanner-action/.github/workflows/osv-scanner-reusable.yml@b1d267aea5211fa648d9d442fa64b90dbdcbdd36 # v2.7.0
permissions:
contents: read
security-events: write
actions: read
with:
scan-args: |-
-r
./.github/workflows/release.yml(Tier C:三个独立 job,按需删减——① GitHub 构建物出处签名 + SBOM 随 release 上传,② PyPI Trusted Publishing,③ npm Trusted Publishing):
name: release
on:
release:
types: [published]
permissions: {}
jobs:
# ① 构建产物 + 出处签名(SLSA Build L2 级)+ SBOM 随 release 上传
build-attest:
runs-on: ubuntu-latest
permissions:
contents: write # 上传 release 资产
id-token: write # Sigstore keyless / attestation
attestations: write # GitHub Artifact Attestations
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- uses: astral-sh/setup-uv@68559e99cc807c1eb7e9238fd43a15bba460eec2 # v10.3.3
- run: uv build
- uses: actions/attest-build-provenance@4d101475d8b20a2381f78447822ac1eab6504dd8 # v4.2.2
with:
subject-path: "dist/*"
- uses: anchore/sbom-action@66cbf4bc1f1c0d2edc94016e65bc221b6bb0ad6c # v0.24.3
with:
format: cyclonedx-json
upload-release-assets: "true" # 默认即 true,写出来是提醒你它在传什么
# ② PyPI:Trusted Publishing(先在 PyPI 侧把 <owner>/<repo> + environment 名登记为 Trusted Publisher)
publish-pypi:
needs: build-attest
runs-on: ubuntu-latest
environment: pypi
permissions:
contents: read
id-token: write # OIDC 短时凭证,取代长期 API token
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- uses: astral-sh/setup-uv@68559e99cc807c1eb7e9238fd43a15bba460eec2 # v10.3.3
- run: uv build
- uses: pypa/gh-action-pypi-publish@7245906fb61fa33a13554f9d5fb856fe61758086 # v1.14.3
# 默认上传 dist/,自动生成 PEP 740 attestation
# ③ npm:Trusted Publishing(先在 npm 侧把 <owner>/<repo> + environment 名登记为 Trusted Publishing)
publish-npm:
needs: build-attest
runs-on: ubuntu-latest
environment: npm
permissions:
contents: read
id-token: write # provenance 签名需要
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0
with:
cache: npm
- run: npm ci --ignore-scripts # 代价与对策见"常见追问"五
- run: npm publish --provenance使用说明三行:
- 只发布 Python 的删掉
publish-npm,只发 npm 的删掉publish-pypi,纯应用仓库删掉两个 publish job 只留build-attest; environment: pypi/npm必须与两个注册机构后台登记的 GitHub environment 名一致,这是 Trusted Publishing 的对账凭据;- 消费端验证命令见"常见追问"二。
参考来源
标准与规范
- SLSA:v1.2 公告(2025-11-24) · v1.1 RC2 · spec v1.2 · Build levels · v1.0 发布新闻稿
- SBOM:SPDX Overview · SPDX 3.0 新闻稿 · CycloneDX 官网 · CycloneDX 1.6 公告 · CycloneDX Specification Overview(1.7,2025-10-21) · NTIA 最低元素 · CISA:2025 版 SBOM 最低元素草案(2025-08-22)与 2026 版(2026-07-29) · OpenSSF 博客:Manage how you protect your assets at scale with SBOMs(2023-07-21)
- 依赖锁定:PEP 751 讨论 · PEP 751 正文 · uv 文档:锁定与同步/export
Sigstore 与签名
- Linux Foundation 宣布 Sigstore(2021-03-09) · Sigstore GA(2022-10-25) · Google 开源博客 · Cosign v3(2025-10-08) · Maven Central Sigstore 验证(2025-01-28) · Cosign vs Notation vs GPG · Encryption Consulting
平台与注册机构
- npm provenance 发布 · npm provenance GA(2023-09-26) · PyPI Trusted Publishers(2023-04-20) · npm Trusted Publishing 文档 · npm 吊销 classic tokens(2025-12-09) · GitHub Artifact Attestations GA(2024-06-25) · GitHub Docs: attestations · GitHub Docs:attestation verify(含 oci:// 用法) · npm CLI 文档:npm audit(signatures) · Microsoft Learn:NuGet.org Trusted Publishing
漏洞响应
- OSV.dev 博客(2024 in review) · OSV-Scanner changelog · OSV-Scanner issue #2540(Python 可达性) · VulnCheck:NVD 积压 · KrebsOnSecurity:CVE 资金危机 · CRA 排毒指南 · NCSC 依赖检查指南(2026-06) · NIST:NVD 运作调整公告(2026-04-15) · Recorded Future:NVD 富化政策追踪
工具对比(第三方/转引居多)
- Interlynk:CycloneDX vs SPDX(2026-06) · sbomify(2026-01) · faun.dev:MS SBOM Tool vs Syft · TheCTOClub SBOM 榜单 · Cossack Labs 综述 · cdxgen#2223 · Renovate 官方对比 · Konvu:Dependabot vs Renovate · Endor Labs SCA 榜单(厂商) · GUAC 文档 · Dependency-Track
监管
- EO 14028(Federal Register) · OMB M-22-18 · CRS IN12570(EO 14306) · DWT:OMB 撤销软件自证(2026-02) · Wiley:OMB 转向风险导向(2026-01) · cyberresilienceact.eu 状态页 · Kirkland & Ellis:CRA 义务时间线 · Crowell:CRA 2026-09-11 · EUR-Lex:Regulation (EU) 2024/2847(CRA 正式文本) · eu-cyber-laws.com:CRA 开源适用指南(转引)
事件
两份章节文件的会话实查记录(引自横轴章,供复核):gh api repos/{actions/attest-build-provenance,anchore/sbom-action,google/osv-scanner-action,astral-sh/setup-uv,pypa/gh-action-pypi-publish,gitleaks/gitleaks-action}/releases/latest;gh attestation --help(gh 2.94.0);uv export --help(uv 0.10.8);npm publish --help(npm 11.19.1);command -v osv-scanner gitleaks syft grype trivy cosign(均未安装)。
综合会话新增核实(2026-10-31,WebSearch):EO 14306 性质与范围(DWT/Wiley/Federal Register 口径);CycloneDX 1.7 发布日期(cyclonedx.org/specification/overview);SLSA v1.2 发布日期与 Source Track(slsa.dev/blog)。
终稿修订会话新增实查与核实(2026-10-31):
git ls-remote <repo> refs/tags/<tag>实查 Action 的 commit SHA(轻量 tag 即 commit,带^{}脱引用核对):gitleaks/gitleaks-action v3.0.0 →e0c47f4f8be36e29cdc102c57e68cb5cbf0e8d1e;google/osv-scanner-action v2.7.0 →b1d267aea5211fa648d9d442fa64b90dbdcbdd36;pypa/gh-action-pypi-publish v1.14.3 →7245906fb61fa33a13554f9d5fb856fe61758086;astral-sh/setup-uv v10.3.3 →68559e99cc807c1eb7e9238fd43a15bba460eec2;actions/attest-build-provenance v4.2.2 →4d101475d8b20a2381f78447822ac1eab6504dd8;anchore/sbom-action v0.24.3 →66cbf4bc1f1c0d2edc94016e65bc221b6bb0ad6c;actions/checkout v7.0.1 →3d3c42e5aac5ba805825da76410c181273ba90b1;actions/setup-node v5.0.0 →a0853c24544627f65ddf259abe73b1d18a591444。SHA 以实查当日远端为准,升级时请重新实查。- 读取 pinned commit 处的源文件核对用法:
gitleaks-actionREADME(v3 用法、GITHUB_TOKEN、组织需 license、fetch-depth: 0全历史)、osv-scanner-reusable.yml(scan-args不得含--format/--output、默认-r ./、内部自传 SARIF、checkout 固定 v7.0.1)、anchore/sbom-action的action.yml(format默认 spdx-json、artifact-name、upload-release-assets默认 true)、actions/attest-build-provenance的action.yml(subject-path支持通配、show-summary默认 true)。 - WebSearch/WebFetch 核实:CISA 2025 版 SBOM 最低元素草案发布于 2025-08-22(征求意见至 2025-10-03)、2026 版定稿 2026-07-29(CISA 资源页);NVD 2026-04-15 收缩(NIST 公告 + Recorded Future 2026-05-14 起的追踪文,富化覆盖面约 15–20%);NuGet.org Trusted Publishing 于 2025-09 前后上线并转正(Microsoft Learn、Andrew Lock),作者签名可选、无 Sigstore 系 provenance;CRA 第 14 条报告时钟与第 24 条 steward 义务、FOSS 非商业供给豁免(eu-cyber-laws.com 等第三方指南;序言条号在不同指南间有出入,正文未引具体序言号,正式文本以 EUR-Lex 为准);
npm audit signatures(npm 9+,校验已装依赖签名与 provenance);gh attestation verify oci://…(GitHub Docs 与 CLI 手册);uv export --format pylock.toml(uv 文档)。 - 删除无法溯源的表述:原稿"OpenSSF 建议两个都强制采纳"(未找到 OpenSSF 原始条目);原稿 CISA 草案"增加组件哈希、许可证、生成语境"的具体清单(CISA 资源页未列明,改为页面可证的"新增必填数据元素、定义覆盖度口径")。