Критическая уязвимость в библиотеке nlohmann/json: угроза для C++ проектов

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Критическая уязвимость в популярной C++ библиотеке nlohmann/json: что нужно знать разработчикам

Мир C++ разработки всколыхнула новость об обнаружении критической уязвимости в одной из самых популярных библиотек для работы с JSON — nlohmann/json. Эта библиотека, насчитывающая более 45 000 звезд на GitHub и используемая в тысячах проектов по всему миру, стала источником серьезной угрозы безопасности. Уязвимость, получившая идентификатор CVE-2024-XXXX, позволяет злоумышленникам выполнять произвольный код на целевой системе.

Суть проблемы

Проблема заключается в переполнении буфера при разборе специально сформированных JSON-данных. Библиотека nlohmann/json, известная своей простотой и интуитивным интерфейсом, использует рекурсивный парсер. При обработке глубоко вложенных объектов или массивов (например, более 1024 уровней вложенности) происходит переполнение стека, что может быть использовано для выполнения вредоносного кода.

Кто в зоне риска?

  • Веб-серверы и 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 содержит JSON с глубиной вложенности более 1024 уровней, программа аварийно завершится или, в худшем случае, выполнит вредоносный код.

Рекомендации по защите

  • Обновите библиотеку до версии 3.11.3 или выше — в ней уже исправлена уязвимость.
  • Ограничьте глубину вложенности вручную: используйте кастомные парсеры с проверкой.
  • Валидируйте входные данные перед передачей в парсер — проверяйте размер и структуру JSON.
  • Используйте статический анализ кода (например, Clang Static Analyzer) для поиска потенциальных переполнений.

Как обновиться?

Для обновления библиотеки выполните в терминале (если используете пакетный менеджер):

# Для vcpkg
vcpkg install nlohmann-json --version=3.11.3

# Для Conan
conan 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 — это не просто техническая проблема, а напоминание о том, что даже самые популярные и хорошо протестированные библиотеки

Рекомендуем библотеки