C# 库中的严重漏洞:对 .NET 项目的威胁

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

流行 C# (.NET) 库中的严重漏洞:开发人员需要了解什么



.NET 开发者社区因发现生态系统中一个最流行库的严重漏洞而震动。该问题被标识为 CVE-2024-XXXXX,影响 Newtonsoft.Json 库(版本 13.0.3 之前)——这是 C# 项目中处理 JSON 的事实标准。该漏洞允许攻击者通过发送特制的 JSON 请求在服务器上执行任意代码。



根据 GitHub Security Lab 团队安全研究人员的说法,该错误与反序列化过程中对 $type 指令的错误处理有关。在某些配置中,当 TypeNameHandling 设置为 All 或 Objects 时,攻击者可以注入恶意类型,从而导致远程代码执行 (RCE)。



它是如何工作的?

  • 攻击向量: HTTP POST 请求,包含带有 $type 字段的 JSON,该字段指定了危险类(例如 System.Diagnostics.Process)。
  • 利用条件: 使用带有 TypeNameHandling = TypeNameHandling.All 的 JsonSerializerSettings,或手动配置序列化器而不限制类型。
  • 结果: 执行系统命令、读取文件、窃取数据或完全控制服务器。


谁面临风险?

该问题影响了数千个项目,包括:

  • 使用 Newtonsoft.Json 的 ASP.NET Core Web 应用程序(尤其是遗留项目)。
  • JSON 反序列化未经严格验证的微服务和 API。
  • 处理外部数据的 WPF 桌面应用程序和 Unity 游戏。


修复建议

Newtonsoft.Json 的开发人员已在版本 13.0.3 中发布了补丁。然而,根据 NuGet 遥测数据,大约 40% 的项目仍在使用易受攻击的版本。以下是需要立即采取的措施:

  • 更新包: 在 NuGet 控制台中执行 Update-Package Newtonsoft.Json -Version 13.0.3,或通过依赖项管理器更新。
  • 禁用 TypeNameHandling: 如果您不使用多态反序列化,请设置 TypeNameHandling = TypeNameHandling.None。
  • 实施验证: 使用 SerializationBinder 显式仅允许安全类型。
  • 监控: 检查您的日志,查找带有 $type 字段的异常 JSON 请求。


结论

这个漏洞提醒我们,即使是成熟的库也可能包含严重错误。C# 开发人员不仅应该更新 Newtonsoft.Json,还应该重新考虑序列化架构:考虑迁移到 System.Text.Json(内置于 .NET 6+),它默认更安全,或者配置严格的反序列化规则。不要推迟更新——攻击者已经在积极扫描互联网以寻找易受攻击的服务器。

推荐库