Addressable — это альтернативная реализация URI, которая является частью стандартной библиотеки Ruby. Начиная с версии 2.3.0 и до версии 2.9.0 в реализации шаблона URI в Addressable два класса шаблона URI генерируют регулярные выражения, уязвимые для катастрофического возврата. Шаблоны, использующие модификатор * (развернуть) с любым оператором раскрытия (например, {foo*}, {+var*}, {#var*}, {/var*}, {.var*}, {;var*}, {?var*}, {&var*}) генерируют шаблоны с вложенными неограниченными кванторами, которые имеют значение O(2^n) при сопоставлении со злонамеренно созданным URI.
Шаблоны, использующие несколько переменных с операторами + или # (например, {+v1,v2,v3}), генерируют шаблоны со сложностью O(n^k) из-за того, что разделитель-запятая находится внутри соответствующего класса символов, что приводит к неоднозначному возврату по k переменным. При сопоставлении со злонамеренно созданным URI это может привести к катастрофическому возврату и неконтролируемому потреблению ресурсов, что приведет к отказу в обслуживании. Эта уязвимость исправлена в версии 2.9.0.
Показать оригинальное описание (EN)
Addressable is an alternative implementation to the URI implementation that is part of Ruby's standard library. From 2.3.0 to before 2.9.0, within the URI template implementation in Addressable, two classes of URI template generate regular expressions vulnerable to catastrophic backtracking. Templates using the * (explode) modifier with any expansion operator (e.g., {foo*}, {+var*}, {#var*}, {/var*}, {.var*}, {;var*}, {?var*}, {&var*}) generate patterns with nested unbounded quantifiers that are O(2^n) when matched against a maliciously crafted URI. Templates using multiple variables with the + or # operators (e.g., {+v1,v2,v3}) generate patterns with O(n^k) complexity due to the comma separator being within the matched character class, causing ambiguous backtracking across k variables. When matched against a maliciously crafted URI, this can result in catastrophic backtracking and uncontrolled resource consumption, leading to denial of service. This vulnerability is fixed in 2.9.0.
Характеристики атаки
Последствия
Строка CVSS v3.1