Miggo Logo

CVE-2024-32644: Evmos transaction execution not accounting for all state transition after interaction with precompiles

9.1

CVSS Score
3.1

Basic Information

EPSS Score
0.73236%
Published
4/10/2024
Updated
4/19/2024
KEV Status
No
Technology
TechnologyGo

Technical Details

CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:H
Package NameEcosystemVulnerable VersionsFirst Patched Version
github.com/evmos/evmos/v16go<= 16.0.417.0.0
github.com/evmos/evmos/v7go<= 7.0.0
github.com/evmos/evmos/v6go<= 6.0.4
github.com/evmos/evmos/v5go<= 5.0.0
github.com/tharsis/evmosgo<= 1.1.3
github.com/tharsis/evmos/v2go<= 2.0.2
github.com/tharsis/evmos/v3go<= 3.0.3
github.com/tharsis/evmos/v4go<= 4.0.2
github.com/tharsis/evmos/v5go<= 5.0.1

Vulnerability Intelligence
Miggo AIMiggo AI

Miggo AIRoot Cause Analysis

The core vulnerability exists in the state synchronization mechanism between originStorage and dirtyStorage. The Commit() function's conditional persistence check (L460-465 in original code) only compared against initial originStorage, not considering intermediate state changes during precompile() execution. The stateObject's storage handling allowed reverting changes after precompile() interactions while maintaining the original originStorage reference. The patch added transientStorage to track committed changes within transaction context, confirming the original functions' vulnerability.

Vulnerable functions

Only Mi**o us*rs **n s** t*is s**tion

WAF Protection Rules

WAF Rule

### *ont*xt - [`st*t*O*j**t`](*ttps://*it*u*.*om/*vmos/*vmos/*lo*/****************************************/x/*vm/st*t***/st*t*_o*j**t.*o#L**-L**): r*pr*s*nts t** st*t* o* *n ***ount *n* is us** to stor* its up**t*s *urin* * st*t* tr*nsition. T*is is

Reasoning

T** *or* vuln*r**ility *xists in t** st*t* syn**roniz*tion m****nism **tw**n `ori*inStor***` *n* `*irtyStor***`. T** `*ommit()` *un*tion's *on*ition*l p*rsist*n** ****k (L***-*** in ori*in*l *o**) only *omp*r** ***inst initi*l `ori*inStor***`, not *o