find-my-way — это независимый от платформы HTTP-маршрутизатор, который внутри использует корневое дерево и поддерживает параметры маршрута и подстановочные знаки. Версии до 9.7.0 уязвимы к удаленно запускаемому DoS в режиме поиска пути, когда он используется с сервером HTTP/2 Node. Функция Lookup() передает req.method в find(), а find() индексирует this.trees[method].
Поскольку this.trees является обычным объектом, значения метода HTTP/2, такие как конструктор, toString или __proto__, могут разрешать унаследованные свойства объекта вместо возврата неопределенного значения. Затем код обрабатывает это значение как узел маршрутизатора и аварийно завершает работу, когда оно достигает currentNode.prefix.length. Эта проблема исправлена в версии 9.0.7.
Показать оригинальное описание (EN)
find-my-way is a framework-independent HTTP router that internally uses a Radix Tree and supports route parameters and wildcards. Versions prior to 9.7.0 are vulnerable to remotely triggerable DoS in find-my-way when it is used with Node's HTTP/2 server. The lookup() function passes req.method into find(), and find() indexes this.trees[method]. Since this.trees is a normal object, HTTP/2 method values like constructor, toString, or __proto__ can resolve inherited object properties instead of returning undefined. The code then treats that value like a router node and crashes when it reaches currentNode.prefix.length. This issue has been fixed in version 9.0.7.
Характеристики атаки
Последствия
Строка CVSS v3.1