Besu - это клиент Ethereum, написанный на Java. Начиная с версии 21.10.0, изменения в реализации операций SHL, SHR и SAR привели к появлени…
Besu - это клиент Ethereum, написанный на Java. Начиная с версии 21.10.0, изменения в реализации операций SHL, SHR и SAR привели к появлению ошибки приведения знакового типа в значениях, представляющих отрицательные значения для 32-битных целых чисел со знаком. Смарт-контракты, которые запрашивают сдвиги между примерно 2 и 4 миллиардами бит (бессмысленные, но допустимые значения для операции), не смогут быть выполнены и, следовательно, не пройдут проверку. В сетях, где уязвимые версии выполняют майнинг с другими клиентами или неуязвимыми версиями, это приведет к форку, и соответствующие транзакции не будут включены в форк. В сетях, где уязвимые версии не выполняют майнинг (например, Rinkeby), форк не произойдет, и узлы валидатора перестанут принимать блоки. В сетях, где майнинг выполняют только уязвимые версии, соответствующая транзакция не будет включена ни в один блок. Когда сеть добавляет неуязвимую версию, сеть будет действовать как в первом случае. Besu 21.10.2 содержит исправление для этой проблемы. Besu 21.7.4 не является уязвимой, и клиенты могут откатиться к этой версии. Существует обходной путь: как только транзакция с соответствующими операциями сдвига будет включена в каноническую цепочку, единственным способом исправления является обеспечение того, чтобы все узлы были на неуязвимых версиях.
При преобразовании одного типа данных в другой, например long в integer, данные могут быть усечены или преобразованы таким образом, что получаются непредвиденные значения. Если полученные значения используются в чувствительном контексте, это может привести к опасному поведению.
https://cwe.mitre.org/data/definitions/681.html →Открыть в коллекции CWE →