cJSON до 1.7.19 содержит неэффективный недостаток алгоритмической сложности в cJSON_Compare(). При сравнении объектов функция дважды рекурсивно обращается к каждому общему поддереву, по одному разу в каждом направлении, без ограничения глубины, что делает время выполнения экспоненциальным по глубине вложенности. Небольшой, глубоко вложенный документ размером в несколько сотен байт (глубина около 40) при сравнении на равенство потребляет часы процессора, а стоимость примерно удваивается с каждым дополнительным уровнем вложенности.
Приложение, вызывающее функцию cJSON_Compare() для JSON, находящегося под влиянием злоумышленника и структурно равного справочному документу, подвергается риску отказа в обслуживании.
Показать оригинальное описание (EN)
cJSON through 1.7.19 contains an inefficient algorithmic complexity flaw in cJSON_Compare(). When comparing objects, the function recurses into each shared subtree twice, once in each direction, with no depth guard, making the running time exponential in nesting depth. A small, deeply nested document of a few hundred bytes (depth around 40) compared for equality consumes hours of CPU, and the cost roughly doubles with each additional level of nesting. An application that calls cJSON_Compare() on attacker-influenced JSON that is structurally equal to a reference document is exposed to a denial-of-service condition.
Характеристики атаки
Последствия
Строка CVSS v4.0
Тип уязвимости (CWE)
Уязвимые продукты 1
| Конфигурация | От (включительно) | До (исключительно) |
|---|---|---|
|
Davegamble Cjson
cpe:2.3:a:davegamble:cjson:*:*:*:*:*:*:*:*
|
— | — |