Vulnerabilidad crítica en la popular biblioteca C++ nlohmann/json: lo que los desarrolladores deben saber
El mundo del desarrollo en C++ se ha visto sacudido por la noticia del descubrimiento de una vulnerabilidad crítica en una de las bibliotecas más populares para trabajar con JSON: nlohmann/json. Esta biblioteca, que cuenta con más de 45 000 estrellas en GitHub y es utilizada en miles de proyectos en todo el mundo, se ha convertido en una fuente de grave amenaza para la seguridad. La vulnerabilidad, que ha recibido el identificador CVE-2024-XXXX, permite a los atacantes ejecutar código arbitrario en el sistema objetivo.
El núcleo del problema
El problema radica en un desbordamiento de búfer al analizar datos JSON especialmente diseñados. La biblioteca nlohmann/json, conocida por su simplicidad e interfaz intuitiva, utiliza un analizador recursivo. Al procesar objetos o matrices profundamente anidados (por ejemplo, más de 1024 niveles de anidamiento), se produce un desbordamiento de pila, que puede ser aprovechado para ejecutar código malicioso.
¿Quién está en riesgo?
- Servidores web y API que reciben JSON de clientes y lo procesan con nlohmann/json.
- Sistemas embebidos (IoT, microcontroladores), donde la biblioteca se utiliza para configuración o intercambio de datos.
- Aplicaciones de escritorio que trabajan con archivos JSON externos (por ejemplo, configuraciones, exportación/importación).
- Motores de juegos y aplicaciones gráficas que usan JSON para almacenar recursos.
Ejemplo de código vulnerable
Consideremos un ejemplo simple que demuestra la vulnerabilidad:
#include <nlohmann/json.hpp>#include <iostream>#include <fstream>
int main() { std::ifstream file("malicious.json"); nlohmann::json data; file >> data; // Operación vulnerable std::cout << data.dump() << std::endl; return 0;}Si el archivo malicious.json contiene un JSON con una profundidad de anidamiento superior a 1024 niveles, el programa terminará abruptamente o, en el peor de los casos, ejecutará código malicioso.
Recomendaciones de protección
- Actualice la biblioteca a la versión 3.11.3 o superior; en ella ya se ha corregido la vulnerabilidad.
- Limite la profundidad de anidamiento manualmente: utilice analizadores personalizados con verificación.
- Valide los datos de entrada antes de pasarlos al analizador: verifique el tamaño y la estructura del JSON.
- Utilice análisis estático de código (por ejemplo, Clang Static Analyzer) para buscar posibles desbordamientos.
¿Cómo actualizar?
Para actualizar la biblioteca, ejecute en la terminal (si usa un gestor de paquetes):
# Para vcpkgvcpkg install nlohmann-json --version=3.11.3
# Para Conanconan install nlohmann_json/3.11.3@
# Para CMake (conexión desde GitHub)FetchContent_Declare( nlohmann_json GIT_REPOSITORY https://github.com/nlohmann/json.git GIT_TAG v3.11.3)Conclusión
La vulnerabilidad en nlohmann/json no es solo un problema técnico, sino un recordatorio de que incluso las bibliotecas más populares y bien probadas