nimiq/core-rs-albatross — это реализация протокола Nimiq Proof-of-Stake на Rust, основанная на алгоритме консенсуса Albatross. До версии 1.3.0 обработчик обнаружения принимал ограничение, контролируемое одноранговым узлом, во время установления связи и сохранял его без изменений. Непосредственный путь HandshakeAck затем учитывает ограничение = 0 и возвращает ноль контактов, что делает сеанс безопасным.
Позже, после того, как тот же сеанс достигнет установленного, путь периодического обновления вычисляет self.peer_list_limit.unwrap() как usize - 1. При лимите = 0 происходит перенос на usesize::MAX, а затем в rand 0.9.2 select_multiple() немедленно пытается использовать Vec::with_capacity(amount), что детерминированно вызывает панику при переполнении емкости. Эта проблема исправлена в версии 1.3.0.
Показать оригинальное описание (EN)
nimiq/core-rs-albatross is a Rust implementation of the Nimiq Proof-of-Stake protocol based on the Albatross consensus algorithm. Prior to version 1.3.0, the discovery handler accepts a peer-controlled limit during handshake and stores it unchanged. The immediate HandshakeAck path then honors limit = 0 and returns zero contacts, which makes the session look benign. Later, after the same session reaches Established, the periodic update path computes self.peer_list_limit.unwrap() as usize - 1. With limit = 0, that wraps to usize::MAX and then in rand 0.9.2, choose_multiple() immediately attempts Vec::with_capacity(amount), which deterministically panics with capacity overflow. This issue has been patched in version 1.3.0.
Характеристики атаки
Последствия
Строка CVSS v3.1