Уязвимость в http2-модуле из состава Node.js

Разработчики серверной JavaScript-платформы Node.js опубликовали корректирующие выпуски v12.22.4 12.22.4, 14.17.4 и 16.6.0, в которых частично устранена уязвимость (CVE-2021-22930) в модуле http2 (клиент HTTP/2.0), позволяющая инициировать крах процесса или потенциально организовать выполнение своего кода в системе при обращении к подконтрольному злоумышленнику хосту.

Проблема вызвана обращением к уже освобождённой области памяти при закрытии соединения после получения специально оформленных кадров RST_STREAM для потоков, в которых выполняются интенсивные операции чтения, блокирующие запись. В случае получения кадра RST_STREAM (сброс потока) без указания кода ошибки модуль http2 дополнительно вызывает процедуру очистки уже полученных данных, из которой для уже закрытого потока повторно вызывается обработчик закрытия, что приводит к двойному освобождению структур данных.

В обсуждении исправления отмечается, что проблема устранена не полностью и при немного изменённых условиях продолжает проявляется как минимум в версии Node.js 12.22.4. Разбор показал, что исправление закрывает лишь один из частных случаев – когда поток находится в режиме чтения, не не учитывает другие состояния потока (чтение и приостановка, приостановка и некоторые виды записи).

Release. Ссылка here.