Quinn — это асинхронно-совместимая реализация транспортного протокола IETF QUIC на чистом Rust. Начиная с версии 0.1.0 и до версии 0.11.15, компонент «Ассемблер», который собирает неупорядоченные фрагменты потока в последовательные фрагменты потока, несет в себе некоторые накладные расходы для несмежных фрагментов. Читатели, которые читают из RecvStream по порядку (например, через реализацию AsyncRead), будут чувствительны к одноранговым узлам, которые отправляют фрагменты, оставляя без внимания ранние части потока, и, в частности, фрагменты с большим количеством пробелов (поскольку их невозможно дефрагментировать).
В таком случае принимающее соединение страдает от высоких издержек буфера, что приводит к исчерпанию памяти. Версия 0.11.15 устраняет проблему.
Показать оригинальное описание (EN)
Quinn is a pure-Rust, async-compatible implementation of the IETF QUIC transport protocol. Starting in version 0.1.0 and prior to version 0.11.15, the `Assembler` component that assembles unordered stream fragments into consecutive chunks of the stream incurs some overhead for non-contiguous fragments. Readers that read from a `RecvStream` in order (through an `AsyncRead` impl for example) will be sensitive to peers that send fragments while leaving out early parts of the stream, and in particular, fragments with many gaps (because these cannot be defragmented). In such a scenario, the receiving connection suffers from high buffer overhead, enabling memory exhaustion. Version 0.11.15 fixes the issue.
Характеристики атаки
Последствия
Строка CVSS v3.1