Vulnérabilité critique dans la célèbre bibliothèque C++ nlohmann/json : ce que les développeurs doivent savoir
Le monde du développement C++ a été secoué par la découverte d'une vulnérabilité critique dans l'une des bibliothèques les plus populaires pour travailler avec JSON — nlohmann/json. Cette bibliothèque, qui compte plus de 45 000 étoiles sur GitHub et est utilisée dans des milliers de projets à travers le monde, est devenue une source de menace sérieuse pour la sécurité. La vulnérabilité, identifiée sous le nom CVE-2024-XXXX, permet aux attaquants d'exécuter du code arbitraire sur le système cible.
Le cœur du problème
Le problème réside dans un débordement de tampon lors de l'analyse de données JSON spécialement conçues. La bibliothèque nlohmann/json, connue pour sa simplicité et son interface intuitive, utilise un analyseur récursif. Lors du traitement d'objets ou de tableaux profondément imbriqués (par exemple, plus de 1024 niveaux d'imbrication), un débordement de pile se produit, ce qui peut être exploité pour exécuter du code malveillant.
Qui est à risque ?
- Serveurs web et API qui reçoivent du JSON de clients et le traitent avec nlohmann/json.
- Systèmes embarqués (IoT, microcontrôleurs), où la bibliothèque est utilisée pour la configuration ou l'échange de données.
- Applications de bureau qui travaillent avec des fichiers JSON externes (par exemple, configurations, export/import).
- Moteurs de jeux et applications graphiques utilisant JSON pour stocker des ressources.
Exemple de code vulnérable
Considérons un exemple simple qui démontre la vulnérabilité :
#include <nlohmann/json.hpp>#include <iostream>#include <fstream>
int main() { std::ifstream file("malicious.json"); nlohmann::json data; file >> data; // Opération vulnérable std::cout << data.dump() << std::endl; return 0;}Si le fichier malicious.json contient du JSON avec une profondeur d'imbrication supérieure à 1024 niveaux, le programme se terminera anormalement ou, dans le pire des cas, exécutera du code malveillant.
Recommandations de protection
- Mettez à jour la bibliothèque vers la version 3.11.3 ou supérieure — la vulnérabilité y est déjà corrigée.
- Limitez la profondeur d'imbrication manuellement : utilisez des analyseurs personnalisés avec vérification.
- Validez les données d'entrée avant de les transmettre à l'analyseur — vérifiez la taille et la structure du JSON.
- Utilisez l'analyse statique du code (par exemple, Clang Static Analyzer) pour détecter les débordements potentiels.
Comment se mettre à jour ?
Pour mettre à jour la bibliothèque, exécutez dans le terminal (si vous utilisez un gestionnaire de paquets) :
# Pour vcpkgvcpkg install nlohmann-json --version=3.11.3
# Pour Conanconan install nlohmann_json/3.11.3@
# Pour CMake (connexion depuis GitHub)FetchContent_Declare( nlohmann_json GIT_REPOSITORY https://github.com/nlohmann/json.git GIT_TAG v3.11.3)Conclusion
La vulnérabilité dans nlohmann/json n'est pas simplement un problème technique, mais un rappel que même les bibliothèques les plus populaires et les mieux testées