ajv (Another JSON Schema Validator) до 8.18.0 уязвим для регулярного отказа в выдаче экспрессии (ReDoS) при включении опции $data. Ключевое…
ajv (Another JSON Schema Validator) до 8.18.0 уязвим для регулярного отказа в выдаче экспрессии (ReDoS) при включении опции $data. Ключевое слово шаблона принимает данные о времени выполнения через синтаксис JSON Pointer (ссылка на данные), который передается непосредственно конструктору JavaScript RegExp() без проверки. Злоумышленник может вводить злобный шаблон регекса (например, "^(a|a)*$") в сочетании с созданным вводом, чтобы вызвать катастрофический откат назад. 31-символьная положная нагрузка вызывает примерно 44 секунды блокировки процессора, при этом каждый дополнительный символ удваивает время выполнения. Это позволяет полностью отказаться от обслуживания с одним HTTP-запросом против любого API с использованием ajv с $data: true для динамической проверки схемы. Этот выпуск также исправлен в версии 6.14.0.
Продукт использует регулярное выражение с неэффективной, возможно экспоненциальной вычислительной сложностью в худшем случае, что ведёт к избыточному потреблению ресурсов CPU.
https://cwe.mitre.org/data/definitions/1333.html →Открыть в коллекции CWE →Злоумышленник может реализовать атаку на программу, использующую неэффективную реализацию регулярных выражений (Regex), подобрав входные данные, приводящие к крайне неблагоприятному сценарию работы Regex. Типичный крайний сценарий характеризуется экспоненциальным временем работы относительно размера входных данных. Это объясняется тем, что большинство реализаций использует недетерминированный конечный автомат (NFA) в качестве основы алгоритма Regex, поскольку NFA допускает обратный просмотр и тем самым поддерживает более сложные регулярные выражения.
https://capec.mitre.org/data/definitions/492.html →Открыть в коллекции CAPEC →