Hub — это сервер и клиент Node.js WebSocket с дополнительными функциями. До версии 0.2.16 каждое входящее неаутентифицированное соединение WebSocket запускает loadDefaultConnectionEventListeners для вызова requestClientId, который вызывает rpc.send для действия get-client-id и отправляет запрос в RPC.requests. Функция RPC.waitForReply запускает цикл опроса setInterval каждые 10 миллисекунд, который очищается только после соответствующего ответа; если клиент молчит и закрывается, таймер и ожидающий запрос остаются выделенными, поскольку путь закрытия сокета не отменяет их.
Таким образом, повторяющиеся соединения приводят к появлению неограниченных таймеров и записей в куче, истощают процессор и память и делают сервер недоступным. Эта проблема исправлена в версии 0.2.16.
Показать оригинальное описание (EN)
Hub is a Node.js WebSocket server and client with added features. Prior to 0.2.16, every incoming unauthenticated WebSocket connection triggers loadDefaultConnectionEventListeners to call requestClientId, which calls rpc.send for the get-client-id action and pushes a request into RPC.requests. The RPC.waitForReply function starts a setInterval polling loop every 10 milliseconds that is cleared only after a matching reply; if the client remains silent and closes, the timer and pending request stay allocated because the socket close path does not cancel them. Repeated connections therefore cause unbounded timers and heap entries, exhausting CPU and memory and making the server unavailable. This issue is fixed in version 0.2.16.
Характеристики атаки
Последствия
Строка CVSS v3.1