流行 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+),它默认更安全,或者配置严格的反序列化规则。不要推迟更新——攻击者已经在积极扫描互联网以寻找易受攻击的服务器。