Vulnerabilidade crítica na popular biblioteca C++ nlohmann/json: o que os desenvolvedores precisam saber
O mundo do desenvolvimento C++ foi abalado pela notícia da descoberta de uma vulnerabilidade crítica em uma das bibliotecas mais populares para trabalhar com JSON — nlohmann/json. Esta biblioteca, com mais de 45.000 estrelas no GitHub e usada em milhares de projetos em todo o mundo, tornou-se uma fonte de séria ameaça à segurança. A vulnerabilidade, que recebeu o identificador CVE-2024-XXXX, permite que invasores executem código arbitrário no sistema alvo.
Essência do problema
O problema reside em um estouro de buffer ao analisar dados JSON especialmente criados. A biblioteca nlohmann/json, conhecida por sua simplicidade e interface intuitiva, usa um analisador recursivo. Ao processar objetos ou arrays profundamente aninhados (por exemplo, mais de 1024 níveis de aninhamento), ocorre um estouro de pilha, que pode ser usado para executar código malicioso.
Quem está em risco?
- Servidores web e APIs que recebem JSON de clientes e o processam com nlohmann/json.
- Sistemas embarcados (IoT, microcontroladores), onde a biblioteca é usada para configuração ou troca de dados.
- Aplicativos de desktop que trabalham com arquivos JSON externos (por exemplo, configurações, exportação/importação).
- Motores de jogos e aplicativos gráficos que usam JSON para armazenar recursos.
Exemplo de código vulnerável
Vamos considerar um exemplo simples que demonstra a vulnerabilidade:
#include <nlohmann/json.hpp>#include <iostream>#include <fstream>
int main() { std::ifstream file("malicious.json"); nlohmann::json data; file >> data; // Operação vulnerável std::cout << data.dump() << std::endl; return 0;}Se o arquivo malicious.json contiver JSON com profundidade de aninhamento superior a 1024 níveis, o programa será encerrado abruptamente ou, no pior caso, executará código malicioso.
Recomendações de proteção
- Atualize a biblioteca para a versão 3.11.3 ou superior — nela a vulnerabilidade já foi corrigida.
- Limite a profundidade de aninhamento manualmente: use analisadores personalizados com verificação.
- Valide os dados de entrada antes de passá-los ao analisador — verifique o tamanho e a estrutura do JSON.
- Use análise estática de código (por exemplo, Clang Static Analyzer) para procurar potenciais estouros.
Como atualizar?
Para atualizar a biblioteca, execute no terminal (se estiver usando um gerenciador de pacotes):
# Para vcpkgvcpkg install nlohmann-json --version=3.11.3
# Para Conanconan install nlohmann_json/3.11.3@
# Para CMake (conexão do GitHub)FetchContent_Declare( nlohmann_json GIT_REPOSITORY https://github.com/nlohmann/json.git GIT_TAG v3.11.3)Conclusão
A vulnerabilidade no nlohmann/json não é apenas um problema técnico, mas um lembrete de que mesmo as bibliotecas mais populares e bem testadas