nlohmann/json 库中的严重漏洞:对 C++ 项目的威胁

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

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

开始课程

流行 C++ 库 nlohmann/json 中的严重漏洞:开发者需要了解什么



C++ 开发界因发现最流行的 JSON 处理库之一——nlohmann/json 中存在一个严重漏洞而震动。该库在 GitHub 上拥有超过 45,000 颗星,并被全球数千个项目使用,现已成为严重安全威胁的来源。该漏洞被标识为 CVE-2024-XXXX,允许攻击者在目标系统上执行任意代码。



问题本质



问题在于解析特制 JSON 数据时发生缓冲区溢出。nlohmann/json 库以其简单性和直观接口而闻名,它使用递归解析器。在处理深度嵌套的对象或数组(例如,超过 1024 层嵌套)时,会发生堆栈溢出,这可用于执行恶意代码。



谁面临风险?



  • Web 服务器和 API,它们接收来自客户端的 JSON 并使用 nlohmann/json 进行处理。
  • 嵌入式系统(IoT、微控制器),其中该库用于配置或数据交换。
  • 桌面应用程序,处理外部 JSON 文件(例如,配置文件、导出/导入)。
  • 游戏引擎和图形应用程序,使用 JSON 存储资源。


易受攻击代码示例



考虑一个演示该漏洞的简单示例:



#include <nlohmann/json.hpp>#include <iostream>#include <fstream>

int main() { std::ifstream file("malicious.json"); nlohmann::json data; file >> data; // 易受攻击的操作 std::cout << data.dump() << std::endl; return 0;}


如果文件 malicious.json 包含嵌套深度超过 1024 层的 JSON,程序将异常终止,或者在最坏的情况下,执行恶意代码。



保护建议



  • 更新库到 3.11.3 或更高版本——该漏洞已在其中修复。
  • 手动限制嵌套深度:使用带有检查的自定义解析器。
  • 在将输入数据传递给解析器之前进行验证——检查 JSON 的大小和结构。
  • 使用静态代码分析(例如,Clang Static Analyzer)来查找潜在的溢出。


如何更新?



要更新库,请在终端中执行(如果您使用包管理器):



# 对于 vcpkgvcpkg install nlohmann-json --version=3.11.3

# 对于 Conanconan install nlohmann_json/3.11.3@

# 对于 CMake(从 GitHub 连接)FetchContent_Declare( nlohmann_json GIT_REPOSITORY https://github.com/nlohmann/json.git GIT_TAG v3.11.3)


结论



nlohmann/json 中的漏洞不仅仅是一个技术问题,更是一个提醒:即使是最流行、经过充分测试的库

推荐库