Ethermint DoS through Unintended Contract Selfdestruct
- Published
- Last modified
- Where the record stands: published, rejected by its publisher, or superseded by another id.What do these mean? →
- published
- Whether CISA lists it in its Known Exploited Vulnerabilities catalog: proof that attackers are using it.What do these mean? →
- Not listed in CISA KEV
- Fix
- Fixed in 0.7.1-rc2, 0.18.0, 7.0.0
- Whether working attack code is public (Exploit-DB, Metasploit, Nuclei or GitHub). Public code makes attacks easier.What do these mean? →
- None on Exploit-DB, Metasploit or GitHub
- Exploitation: poc
- Automatable: yes
- Technical impact: partial
Summary
Ethermint is an Ethereum library. In Ethermint running versions before `v0.17.2`, the contract `selfdestruct` invocation permanently removes the corresponding bytecode from the internal database storage. However, due to a bug in the `DeleteAccount`function, all contracts that used the identical bytecode (i.e shared the same `CodeHash`) will also stop working once one contract invokes `selfdestruct`, even though the other contracts did not invoke the `selfdestruct` OPCODE. This vulnerability has been patched in Ethermint version v0.18.0. The patch has state machine-breaking changes for applications using Ethermint, so a coordinated upgrade procedure is required. A workaround is available. If a contract is subject to DoS due to this issue, the user can redeploy the same contract, i.e. with identical bytecode, so that the original contract's code is recovered. The new contract deployment restores the `bytecode hash -> bytecode` entry in the internal state.
Timeline
- CVE published
- CISA SSVC assessment
Exploitation: poc · Automatable: yes · Technical impact: partial
- Record last updated
Affected versions
- evmos ethermint
through 0.17.2
- github.com/crypto-org-chain/cronosGo
fixed in 0.7.1-rc2
- github.com/evmos/ethermintGo
fixed in 0.18.0
- github.com/evmos/evmosGo
All versions
- github.com/evmos/evmos/v2Go
All versions
- github.com/evmos/evmos/v3Go
All versions
- github.com/evmos/evmos/v4Go
All versions
- github.com/evmos/evmos/v5Go
All versions
- github.com/evmos/evmos/v6Go
All versions
- github.com/evmos/evmos/v7Go
fixed in 7.0.0
- github.com/kava-labs/kavaGo
fixed in 0.18.0
- github.com/evmos/evmosGo
fixed in 7.0.0
- github.com/Kava-Labs/kavaGo
fixed in 0.18.0