Rust EVM - это интерпретатор виртуальной машины Ethereum. В `rust-evm` была введена функция под названием `record_external_operation`, позв…
Rust EVM - это интерпретатор виртуальной машины Ethereum. В `rust-evm` была введена функция под названием `record_external_operation`, позволяющая пользователям библиотеки записывать пользовательские изменения газа. Эта функция может иметь некоторые ложные взаимодействия со стеком вызовов. В частности, во время завершения `CREATE` или `CREATE2`, в случае успешного выполнения подстека, `rust-evm` сначала зафиксирует подсостояние, а затем вызовет `record_external_operation(Write(out_code.len()))`. Если `record_external_operation` впоследствии завершится неудачно, эта ошибка возвращается в родительский стек вызовов вместо `Succeeded`. Тем не менее, фиксация подсостояния уже произошла. Это приводит к тому, что смарт-контракты могут фиксировать изменения состояния, когда вызывающий родительский контракт получает нулевой адрес (что обычно указывает на сбой выполнения). Эта проблема затрагивает только пользователей библиотеки с пользовательской `record_external_operation`, возвращающей ошибки. Проблема исправлена в выпуске 0.41.1. Известных обходных путей не существует.
Программный продукт не предвидит надлежащим образом или не обрабатывает исключительные условия, редко возникающие в ходе нормальной эксплуатации.
https://cwe.mitre.org/data/definitions/703.html →Открыть в коллекции CWE →| Продукт | Вендор | Статус |
|---|---|---|
| evm | * | Отслеживается |