流行 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 中的漏洞不仅仅是一个技术问题,更是一个提醒:即使是最流行、经过充分测试的库