Klever-Go — это реализация протокола блокчейна Klever на Go. В версиях до 1.7.18 синхронизаторы Trie данных учетной записи уязвимы из-за недостатка ресурсов, из-за которого происходит утечка ограниченных слотов регулирования на путях ошибок. В syncDataTrie() (как в userAccountsSyncer.go, так и в kappAccountsSyncer.go) StartProcessing() резервирует слот у NumGoRoutinesThrottler, но соответствующий EndProcessing() вызывается только на пути успеха и при раннем возврате дублирующегося корня.
В результате любая ошибка от trie.NewTrie(), trie.NewTrieSyncer() или trieSyncer.StartSyncing() (включая зависящий от сети путь тайм-аута) постоянно занимает один слот на протяжении всего срока службы дросселя. Злоумышленник, который может неоднократно вызывать сбои или тайм-ауты синхронизации трех узлов во время начальной загрузки, может исчерпать ограниченный дроссель, после чего дальнейшая синхронизация трех узлов данных учетной записи прекращается, и SyncAccounts() возвращает тайм-аут. Поскольку загрузка эпохи в syncUserAccountsState() и syncKappAccountsState() прерывается при любой такой ошибке, это приводит к сбою начальной загрузки, а это проблема доступности ядра, влияющая на обновление, перезапуск или повторную синхронизацию узлов и валидаторов.
Эта проблема исправлена в версии 1.7.18.
Показать оригинальное описание (EN)
Klever-Go is the Go implementation of the Klever blockchain protocol. In versions prior to 1.7.18, the account-data trie syncers are vulnerable to a resource-exhaustion flaw that leaks bounded throttler slots on error paths. In syncDataTrie() (in both userAccountsSyncer.go and kappAccountsSyncer.go), StartProcessing() reserves a slot from the NumGoRoutinesThrottler, but the corresponding EndProcessing() is only called on the success path and on the duplicate-root early return. As a result, any error from trie.NewTrie(), trie.NewTrieSyncer(), or trieSyncer.StartSyncing() (including the network-dependent timeout path) permanently consumes one slot for the lifetime of the throttler. An attacker who can repeatedly cause trie-node sync failures or timeouts during bootstrap can exhaust the bounded throttler, after which further account-data trie syncs stop making progress and SyncAccounts() returns a timeout. Because epoch bootstrap in syncUserAccountsState() and syncKappAccountsState() aborts on any such error, this causes bootstrap to fail, a core availability issue affecting fresh, restarting, or resyncing nodes and validators. This issue is fixed in version 1.7.18.
Характеристики атаки
Последствия
Строка CVSS v3.1