Hono — это платформа веб-приложений, обеспечивающая поддержку любой среды выполнения JavaScript. До версии 4.12.34 встроенное промежуточное ПО CORS, hono/cors, было уязвимо для отказа в обслуживании с использованием регулярных выражений (ReDoS). Во время предполетного запроса OPTIONS промежуточное программное обеспечение анализирует контролируемый злоумышленником заголовок Access-Control-Request-Headers, используя регулярное выражение, устойчивое к пробелам, чье обратное отслеживание делает время его выполнения квадратичным по входной длине.
Поскольку значение заголовка ограничено только максимальным размером HTTP-заголовка развертывания, один предварительный просмотр с большим количеством пробелов может занять секунды процессорного времени и заблокировать обработку запроса. В средах выполнения, которые используют один поток выполнения для всех запросов, это также останавливает одновременные запросы, а повторные запросы могут привести к тому, что служба перестанет отвечать на запросы. Это влияет на конфигурацию по умолчанию, поскольку уязвимый путь достигается всякий раз, когда используется cors() с неустановленным или пустым параметромallowHeaders.
Приложения, которые устанавливают непустой параметрallowHeaders, не затрагиваются. Эта проблема исправлена в версии 4.12.34.
Показать оригинальное описание (EN)
Hono is a Web application framework that provides support for any JavaScript runtime. Prior to 4.12.34, the built-in CORS middleware, hono/cors, is vulnerable to a regular expression denial of service (ReDoS). During a preflight OPTIONS request, the middleware parses the attacker-controlled Access-Control-Request-Headers header using a whitespace-tolerant regular expression whose backtracking makes its running time quadratic in the input length. Because the header value is bounded only by the deployment's maximum HTTP header size, a single preflight carrying a long run of whitespace can consume seconds of CPU and block request processing. On runtimes that share one execution thread across requests, this stalls concurrent requests as well, and repeated requests can render the service unresponsive. This affects the default configuration, since the vulnerable path is reached whenever cors() is used with an unset or empty allowHeaders. Applications that set a non-empty allowHeaders are not affected. This issue is fixed in version 4.12.34.
Характеристики атаки
Последствия
Строка CVSS v3.1