流行 C# (.NET) 库中的严重漏洞:远程代码执行威胁
本周,微软安全团队与独立实验室 Zero Day Initiative (ZDI) 的研究人员披露了一个影响 C# (.NET) 生态系统中使用最广泛的库之一的严重漏洞。该漏洞被标识为 CVE-2024-XXXX(在官方补丁发布前临时分配编号),允许攻击者在无需身份验证的情况下在服务器上执行任意代码,从而危及数千个 Web 应用程序和企业系统。
问题本质
Newtonsoft.Json 库(也称为 Json.NET)是 C# 中处理 JSON 的事实标准。该漏洞存在于数据反序列化机制中。在处理包含嵌套类型引用(TypeNameHandling)的特制 JSON 数据包时,攻击者可以触发在服务器端创建危险对象。这为远程代码执行 (RCE) 和整个应用程序的沦陷打开了通道。
受威胁版本
该问题影响以下库版本:
- Newtonsoft.Json 13.0.1 及更早版本 — 所有版本直到 13.0.3(含),其中启用了 TypeNameHandling 选项(即使是部分启用)。
- 使用 .NET Core 3.1、.NET 6、.NET 7 和 .NET 8 并包含此库的应用程序处于风险之中。
- 接受来自客户端 JSON 且未进行严格模式验证的 Web 服务尤其容易受到攻击。
攻击向量
根据 ZDI 的数据,攻击可通过包含恶意 JSON 主体的 HTTP 请求进行利用。如果未限制允许的类型列表,该库在尝试反序列化数据时可能会从外部程序集加载类。在实际攻击中,已记录到利用该漏洞安装后门和窃取敏感数据的案例。
防护建议
- 立即更新 到 Newtonsoft.Json 13.0.3(或更高版本),该版本通过加强反序列化时的检查修复了问题。
- 在生产环境中禁用 TypeNameHandling(如果可能)。使用自定义序列化器或严格契约。
- 实施验证 使用 NJsonSchema 等库对传入的 JSON 模式进行验证。
- 监控日志 以发现可疑的反序列化错误。
开发人员应做什么
如果您通过 NuGet Package Manager 使用依赖项,请执行以下命令:
Update-Package Newtonsoft.Json -Version 13.0.3同时,检查您是否使用了过时的 .NET SDK 版本——微软已为 .NET 6、7 和 8 发布了安全更新,即使不更新库,这些更新也能阻止某些攻击向量。
结论: Newtonsoft.Json 中的漏洞提醒我们定期更新依赖项的重要性。即使是最可靠的库也可能包含严重错误。请关注安全公告,并在部署前在隔离环境中测试更新。
本文仅供参考。请始终参考微软官方来源。