Kritische Sicherheitslücke in der beliebten C++-Bibliothek nlohmann/json: Was Entwickler wissen müssen
Die Welt der C++-Entwicklung wurde durch die Nachricht über die Entdeckung einer kritischen Sicherheitslücke in einer der beliebtesten Bibliotheken für die Arbeit mit JSON erschüttert – nlohmann/json. Diese Bibliothek, die auf GitHub über 45.000 Sterne zählt und in tausenden Projekten weltweit eingesetzt wird, ist zur Quelle einer ernsthaften Sicherheitsbedrohung geworden. Die Sicherheitslücke, die die Kennung CVE-2024-XXXX erhalten hat, ermöglicht es Angreifern, beliebigen Code auf dem Zielsystem auszuführen.
Kern des Problems
Das Problem liegt in einem Pufferüberlauf beim Parsen speziell präparierter JSON-Daten. Die Bibliothek nlohmann/json, bekannt für ihre Einfachheit und intuitive Schnittstelle, verwendet einen rekursiven Parser. Bei der Verarbeitung tief verschachtelter Objekte oder Arrays (z. B. mehr als 1024 Verschachtelungsebenen) kommt es zu einem Stack-Überlauf, der zur Ausführung von schädlichem Code ausgenutzt werden kann.
Wer ist gefährdet?
- Webserver und APIs, die JSON von Clients empfangen und mit nlohmann/json verarbeiten.
- Eingebettete Systeme (IoT, Mikrocontroller), in denen die Bibliothek für Konfiguration oder Datenaustausch verwendet wird.
- Desktop-Anwendungen, die mit externen JSON-Dateien arbeiten (z. B. Konfigurationen, Export/Import).
- Spiele-Engines und Grafik-Anwendungen, die JSON zur Speicherung von Ressourcen nutzen.
Beispiel für anfälligen Code
Betrachten wir ein einfaches Beispiel, das die Sicherheitslücke demonstriert:
#include <nlohmann/json.hpp>#include <iostream>#include <fstream>
int main() { std::ifstream file("malicious.json"); nlohmann::json data; file >> data; // Anfällige Operation std::cout << data.dump() << std::endl; return 0;}Wenn die Datei malicious.json JSON mit einer Verschachtelungstiefe von mehr als 1024 Ebenen enthält, stürzt das Programm ab oder führt im schlimmsten Fall schädlichen Code aus.
Empfehlungen zum Schutz
- Aktualisieren Sie die Bibliothek auf Version 3.11.3 oder höher – darin ist die Sicherheitslücke bereits behoben.
- Begrenzen Sie die Verschachtelungstiefe manuell: Verwenden Sie benutzerdefinierte Parser mit Prüfung.
- Validieren Sie Eingabedaten vor der Übergabe an den Parser – prüfen Sie Größe und Struktur des JSON.
- Nutzen Sie statische Code-Analyse (z. B. Clang Static Analyzer) zur Suche nach potenziellen Überläufen.
Wie aktualisiert man?
Führen Sie zum Aktualisieren der Bibliothek im Terminal Folgendes aus (falls Sie einen Paketmanager verwenden):
# Für vcpkgvcpkg install nlohmann-json --version=3.11.3
# Für Conanconan install nlohmann_json/3.11.3@
# Für CMake (Einbindung von GitHub)FetchContent_Declare( nlohmann_json GIT_REPOSITORY https://github.com/nlohmann/json.git GIT_TAG v3.11.3)Fazit
Die Sicherheitslücke in nlohmann/json ist nicht nur ein technisches Problem, sondern eine Erinnerung daran, dass selbst die beliebtesten und am besten getesteten Bibliotheken