Библиотека для работы с JSON-форматом cJSON содержит ошибку целочисленного переполнения, которая при определённых условиях может привести к удалённому выполнению кода или раскрытию конфиденциальных данных. Проблема затрагивает устройства и приложения на 32-битных архитектурах, использующие эту популярную библиотеку.
Уязвимость CVE-2026-16554
Уязвимость CVE-2026-16554 обнаружена в функции print_string_ptr() в файле cJSON.c. При обработке входной строки с относительно большим количеством управляющих символов (около 859 миллионов) 32-битный счётчик escape_characters может переполниться. В результате размер буфера для выходных данных вычисляется некорректно - выделяется меньше памяти, чем требуется для итоговой строки.
Если приложение использует функцию cJSON_PrintBuffered() с заранее выделенным буфером, последующий цикл записи выходит за границы выделенного участка кучи (heap buffer overflow). Это позволяет злоумышленнику, отправившему специально сформированную JSON-строку, вызвать отказ в обслуживании, получить доступ к содержимому памяти или, потенциально, добиться выполнения произвольного кода на целевом устройстве.
Ошибка классифицируется как целочисленное переполнение (CWE-190). Согласно вектору CVSS 4.0, уровень угрозы оценивается как средний (5.1), при этом для эксплуатации уязвимости требуется локальный доступ к системе, сложность атаки низкая, а привилегии не нужны. Последствия для конфиденциальности и целостности данных оцениваются как незначительные, но доступность системы может быть серьёзно нарушена.
Уязвимость подтверждена в версии библиотеки 1.7.19, которую поддерживает разработчик DaveGamble. Однако авторы предупреждают: поскольку устанавливающие контакты с создателем проекта не увенчались успехом, нельзя исключать, что проблема затрагивает и другие версии cJSON. Библиотека широко используется во встраиваемых системах, IoT-устройствах и программном обеспечении общего назначения - любой проект, собранный для 32-битных платформ и применяющий cJSON, потенциально находится под угрозой.
На момент публикации официального исправления от мейнтейнера нет. Разработчикам, использующим cJSON в своих продуктах, рекомендуется временно ограничить обработку входных JSON-данных большим объёмом управляющих символов - например, настроить валидацию на уровне приложения или задействовать фаервол веб-приложений для блокировки подозрительных запросов. В качестве альтернативы можно рассмотреть переход на 64-битные платформы для сборки компонентов, работающих с динамическими структурами данных.
Уязвимость CVE-2026-16554 не является уникальным случаем - подобные ошибки целочисленного переполнения в библиотеках разбора данных возникают регулярно. Однако специфика 32-битных систем (телефоны, контроллеры, старые промышленные ПК) делает их особенно уязвимыми к таким атакам: небольшая разрядность регистров упрощает переполнение счётчиков. Своевременное обновление цепочки инструментов и использование средств статического анализа кода остаются основными мерами снижения риска для разработчиков, работающих с устаревшими аппаратными платформами.
Ссылки