有没有办法找出哪个 .NET Framework 版本使用哪个版本的 zlib? (关于 CVE-2018-25032)

Is there a way to find out which .NET Framework version uses which version of zlib? (in relation to CVE-2018-25032)

我正在尝试确定我们是否暴露于最近报告的 CVE-2018-25032 漏洞,因为 .NET 确实在 DeflateStream 实现中使用了 zlib 库。

我似乎找不到 Microsoft 发布的关于此的任何内容。

有没有办法找出哪个 .NET Framework 版本使用哪个版本的 zlib?

根据 DeflateStream docs page,.NET Framework 4.5 之前的版本根本不使用 zlib:

Starting with the .NET Framework 4.5, the DeflateStream class uses the zlib library

我不知道每个后续版本的 .NET Framework 使用了哪个 确切 zlib 版本(并且随着时间的推移,版本可能随着小补丁而改变),但我可以根据每个 .NET Framework 版本的发布时间给出一个近似值,并将其与当时最新版本的 zlib 进行比较(.NET 团队很可能选择使用每个外部库的最新版本,包括 zlib,可在任何给定时间):

.NET Framework Version Latest zlib version upon respective .NET version release
4.5 1.2.7
4.5.1 1.2.8
4.5.2 1.2.8
4.6 1.2.8
4.6.1 1.2.8
4.6.2 1.2.8
4.7 1.2.11
4.7.1 1.2.11
4.8 1.2.11

如您所见,自添加 zlib 以来的所有 .NET Framework 版本都使用易受此 CVE 影响的 zlib 版本。 ,但是,DeflateStream 甚至可能不会调用 Z_FIXED(请参阅下面的 CVE 信息),因此 DeflateStream 代码可能不易受到 CVE 的影响,尽管它使用的 zlib 版本包含上述漏洞。如果您有任何使用 .NET 的打包 zlib 版本与 Z_FIXED 交互的自定义​​代码,您应该手动缓解漏洞或显式导入 zlib v1.2.12+ 以覆盖 .NET 的 built-in 版本。

请注意,CVE 和 zlib 的补丁太新了,最新版本的 .NET,.NET Core 6.0.3(于 2022 年 3 月 8 日发布)仍然使用 zlib v1.2.11(从 2017 年开始) ).来自 GitHub 存储库中的 .NET zlib.3 文件:

.TH ZLIB 3 "15 Jan 2017"
.SH NAME
zlib \- compression/decompression library
[...]

和来自同一个存储库文件夹的 zlib.h(自述文件):

/* zlib.h -- interface of the 'zlib' general purpose compression library
  version 1.2.11, January 15th, 2017
[...]

并且来自 ZLIB changelog on GitHub

ChangeLog file for zlib

Changes in 1.2.12 (27 Mar 2022) 
[...]
- Fix a bug that can crash deflate on some input when using Z_FIXED 
[...]

(跳过不相关的行以关注 CVE 提示的特定更改)。