Skip to content

修复测试工具链的 NuGet 和 ASN.1 依赖告警 - #67

Merged
transbot merged 3 commits into
v12.0Chinesefrom
codex/patch-test-nuget-5-11-6
Nov 11, 2026
Merged

transbot merged 3 commits into
v12.0Chinesefrom
codex/patch-test-nuget-5-11-6

Conversation

@transbot

@transbot transbot commented Nov 11, 2026 •

Copy link
Copy Markdown
Owner

本轮提交 9c65d9c6 在上一轮 NuGet 5.11.7 的基础上只新增两行:中央表指定 System.Formats.Asn1 6.0.1,章节测试的共享配置以 PrivateAssets="all" 引用它。这是公告列出的最低修复包版本。原有全局间接依赖固定策略未改;没有修改教材源码、测试用例、框架或 CI。

审计结果。 比对 46 个项目 × 3 个框架的还原图,唯一变动是全部 69 个测试目标中的 System.Formats.Asn1 从 5.0.0 升至 6.0.1。23 个教材项目的依赖均未变化。解决方案级 NuGet 审计包含直接和间接包:CVE-2024-38095 命中数 69 → 0;NuGet.Common、NuGet.Packaging、NuGet.Protocol 均保持 5.11.7,未出现告警。

本次没有屏蔽告警。System.Net.Http、System.Text.RegularExpressions 和 System.Text.Json 的原有告警未变;上述结论仅针对本 PR 提交的 NuGet 包审计。

本地完整测试与编译诊断:VS2026 重新构建后,.NET 6 为 640/640、.NET 7 为 646/646、.NET 8 为 650/650,共 1,936 项,零失败、零跳过。按完整方法名和数据行比对 TRX,调用 CompilerAssert 的 20 个现有测试方法在每个框架上各有 34 条记录通过。例如清单 3.02 仍断言 CS0165、CS8602,清单 6.54 仍断言 CS0191。清单 6.39 的 CS9035 仍按原条件仅在 .NET 7、8 检查。

构建输出:本机 23 个 .NET 6 测试项目都复制了与 NuGet 6.0.1 包内容一致的 ASN.1 DLL(逐文件比对 SHA-256);.NET 7 和 .NET 8 的 46 份测试输出没有复制该包的 DLL,对应依赖清单没有为该包列出运行时资产。包审计结论不等于为系统安装的每个共享运行时作安全认证。

GitHub CI(提交 9c65d9c62290bb3e171e101c84ed20683a86bc18)

任务 从日志核对的结果
Ubuntu x64 69 个程序集,1,936/1,936 通过
macOS Arm64 69 个程序集,1,936/1,936 通过
简体中文 zh-CN 69 个程序集,1,936/1,936 通过;编译诊断用例的 102 条通过记录已与本地核对
法语 fr-FR 69 个程序集,1,936/1,936 通过
Windows x64 69 个程序集,1,936/1,936 通过
代码分析 校验下载产物摘要后逐份检查:46 个项目 × 3 个框架,138 份 SARIF,0 错误、848 个警告、343 条提示;按项目、框架、规则及级别的数量与上一提交一致。

SDK 8.0.428,实际运行时 6.0.36、7.0.20、8.0.34。UTF-8 检查通过:1,186 个文本文件,24 个二进制文件排除。

最新提交六项检查全部通过;五组测试均零失败、零跳过。已完成验证,供人工审查,未合并。

历史验证:e5565495(未单独修复 ASN.1 时,告警仍在)及前序提交

本次提交 e5565495 相对上一轮 5.11.6 仅修改 Directory.Packages.props 中三个版本号。教材源码、测试内容、三个目标框架及 CI 均未改动;章节测试仍通过共享测试配置引用这三个包。

漏洞复查:低危已消失,高危仍存在。 对 46 个项目执行包含间接依赖的 NuGet 审计,并逐项比对两版的 138 组还原结果。下表按项目与框架组合计数,同一公告不会算成 69 个不同漏洞。

项目 5.11.6 → 5.11.7 的实测结果
NuGet.Packaging、NuGet.Protocol 的低危公告 各从 69 个测试目标降为 0;三个指定的 NuGet 包在 5.11.7 均无审计告警。
System.Formats.Asn1 5.0.0 的高危公告 CVE-2024-38095 69 → 69。依赖链仍是 NuGet.Packaging → System.Security.Cryptography.Pkcs 5.0.0 → System.Formats.Asn1 5.0.0。本地重建后的 69 份测试输出均未复制该包的 DLL,测试宿主的 .deps.json 也未列出该包的运行时资产;不能据此关闭该告警。
其他依赖 System.Net.Http、System.Text.RegularExpressions、System.Text.Json 的告警未变。仅测试项目中 NuGet.Configuration、NuGet.Versioning 随三个指定包自动解析到 5.11.7。23 个教材项目的已解析包及其版本均未变化。

本地完整验证: VS2026 重建后,.NET 6、7、8 分别通过 640/640、646/646、650/650,共 1,936 项,0 跳过。将每条 TRX 记录与源码中调用 CompilerAssert 的 20 个测试方法匹配,含数据行在每个框架均为 34/34 通过。清单 3.02 仍断言 CS0165、CS8602,清单 6.54 仍断言 CS0191;保留清单 6.39 仅在 .NET 7、8 断言 CS9035 的原有条件。

新提交的 GitHub CI:六项全部通过。 按各任务日志的测试总数和通过数核对,以下五组每组均为 69 个测试程序集,1,936 项通过,0 失败,0 跳过:
Ubuntu x64、Windows x64、macOS Arm64、简体中文 zh-CN、法语 fr-FR。Ubuntu 日志也核对到了编译诊断用例的 102 条通过记录。

SDK 8.0.428,三种实际运行时为 6.0.36、7.0.20、8.0.34;区域任务实际启用了相应文化及 UI 文化。UTF-8 检查通过:1,186 个文本文件、24 个二进制文件排除。代码分析产物已校验摘要并逐份核对,46 个项目 × 3 个框架共 138 份 SARIF,0 错误、848 个警告、343 条提示。

验证完成,供人工审查;未合并。System.Formats.Asn1 高危告警仍保留,其他依赖未另行升级。

历史验证:5.11.6(仅对应 f874975)

该 PR 只在中央版本表及章节测试项目的共享配置中增加 6 行,显式指定 NuGet.Common、NuGet.Packaging、NuGet.Protocol 5.11.6(原为间接依赖 5.6.0)。教材源文件、故意出错的示例、测试用例、三个目标框架和 CI 均未改动。#64 及其他依赖更新独立暂缓。

审计结论:旧版高危/严重告警已消失,但 5.11.6 仍不宜作为漏洞已清零的版本合并。 对整个解决方案运行 dotnet list EssentialCSharp.sln package --vulnerable --include-transitive --format json,并逐项比对 46 个项目 × 3 个框架的 project.assets.json。23 个教材项目的解析包版本均未变化;三个指定包在全部 69 个测试目标上均为 5.11.6。

包 从基线到 PR 的审计结果
NuGet.Common 5.6.0 的高危告警消失;5.11.6 无已知告警
NuGet.Packaging、NuGet.Protocol 旧版严重/高危告警消失;5.11.6 均报告同一条低危下载校验公告,5.11 系列的修复版为 5.11.7
System.Formats.Asn1 新进入全部 69 个测试目标的依赖图:NuGet.Packaging → System.Security.Cryptography.Pkcs 5.0.0 → System.Formats.Asn1 5.0.0。高危 CVE-2024-38095 涉及处理恶意 X.509 证书时耗尽 CPU。本地核对 全部 23 个章节测试项目 × 3 个框架的构建输出,均未复制该包的 DLL,.deps.json 也未为它列出运行时资产;此证据不能用于豁免其他宿主或发布方式。
System.Net.Http 4.3.0、System.Text.RegularExpressions 4.3.0、System.Text.Json 8.0.0 原有告警保留;未单独调整

只显式指定上述三个 NuGet 包。NuGet.Configuration 和 NuGet.Versioning 被自动解析到 5.11.6;同一测试依赖图也随之调整了部分 System.* 包。未将中央传递固定策略全局开启,未压制审计警告。

教材编译诊断:独立枚举并实跑全部调用 CompilerAssert 的 20 个现有测试方法(7 个测试项目)。含数据行的本地 TRX 在 .NET 6、7、8 上分别为 34/34 通过,0 跳过。清单 3.02 仍断言 CS0165、CS8602,清单 6.54 仍断言 CS0191。保留原有条件:清单 6.39 仅在 .NET 7、8 断言 CS9035;表中原本期望编译成功的对照行也照常执行。

完整 CI — 提交 f87497519e4d8aa576df07425d3b0c175d7aeb5e(基线 0ef69d5b)

GitHub Actions 实际结果
Ubuntu 69 个程序集,1,936/1,936 通过
macOS Arm64 69 个程序集,1,936/1,936 通过
简体中文 zh-CN 69 个程序集,1,936/1,936 通过
法语 fr-FR 69 个程序集,1,936/1,936 通过
Windows 首轮 69 个程序集,1,930 通过、6 跳过、0 失败;清单 5.16、5.34 各有一个访问 IntelliTect.com 的下载测试,原有网络异常处理使其在三个框架上均返回 Inconclusive。
Windows 同一 SHA 复跑 69 个程序集,1,936/1,936 通过、0 跳过。无需更改代码或测试。
代码分析 已下载并校验产物摘要;46 个项目 × 3 个框架 = 138 份 SARIF,0 错误、848 警告、343 条提示。

SDK 8.0.428;实际探测运行时 6.0.36、7.0.20、8.0.34。UTF-8 检查通过:1,186 个文本文件,排除 24 个二进制文件。

本地 Windows(VS2026)还独立跑完了整套用例:.NET 6 为 640/640、.NET 7 为 646/646、.NET 8 为 650/650,共 1,936/1,936,0 跳过。CI Windows 首轮日志中,编译诊断用例的全部 102 条执行记录均为通过。

验收:最新提交六项 GitHub 检查全部成功,五组测试各有 1,936 项通过、0 跳过的完整记录。此项验证已完成,保留告警与首轮执行记录,供人工审查,暂不合并。

@transbot transbot changed the title 仅将测试工具链的三个 NuGet 包固定为 5.11.6 验证测试工具链的三个 NuGet 包 5.11.7 Nov 11, 2026
@transbot transbot changed the title 验证测试工具链的三个 NuGet 包 5.11.7 修复测试工具链的 NuGet 和 ASN.1 依赖告警 Nov 11, 2026
@transbot
transbot merged commit 7e99f30 into v12.0Chinese Nov 11, 2026
6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant