VYPR
Moderate severityNVD Advisory· Published Oct 25, 2022· Updated Apr 23, 2025

evm has incorrect is_static parameter for custom stateful precompiles

CVE-2022-39354

Description

SputnikVM, also called evm, is a Rust implementation of Ethereum Virtual Machine. A custom stateful precompile can use the is_static parameter to determine if the call is executed in a static context (via STATICCALL), and thus decide if stateful operations should be done. Prior to version 0.36.0, the passed is_static parameter was incorrect -- it was only set to true if the call came from a direct STATICCALL opcode. However, once a static call context is entered, it should stay static. The issue only impacts custom precompiles that actually uses is_static. For those affected, the issue can lead to possible incorrect state transitions. Version 0.36.0 contains a patch. There are no known workarounds.

AI Insight

LLM-synthesized narrative grounded in this CVE's description and references.

SputnikVM (evm) incorrectly propagated the static call context to custom precompiles, allowing state transitions in static contexts, leading to potential integrity violations.

Root

Cause

The vulnerability lies in how SputnikVM (the Rust implementation of the Ethereum Virtual Machine, also known as evm) handles the is_static parameter for custom precompiles. Prior to version 0.36.0, the is_static flag was only set to true when a call originated directly from a STATICCALL opcode. However, once a static call context is entered (e.g., via a nested STATICCALL or a static call from another precompile), the context should remain static for all subsequent calls. The bug caused is_static to be incorrectly reported as false in such nested scenarios, violating the Ethereum specification [1][3].

Exploitation

Only custom precompiles that actually inspect the is_static parameter to decide whether to allow stateful operations are affected. An attacker can craft a transaction that enters a static context (e.g., by calling a contract that uses STATICCALL) and then invokes a vulnerable custom precompile. Because the precompile receives is_static = false, it may permit state modifications that should be forbidden in a static context. The attack requires no special privileges and can be performed over the network [1][2].

Impact

Successful exploitation allows an attacker to cause incorrect state transitions, potentially altering contract storage or other persistent data in ways that the EVM's static call mechanism was designed to prevent. The integrity impact is high, while confidentiality and availability are unaffected. The issue is rated CVSS 7.5 (High) [3].

Mitigation

The vulnerability is fixed in evm version 0.36.0. Users should update their dependency to this version or later. No workarounds are available [1][3].

AI Insight generated on May 21, 2026. Synthesized from this CVE's description and the cited reference URLs; citations are validated against the source bundle.

Affected packages

Versions sourced from the GitHub Security Advisory.

PackageAffected versionsPatched versions
evmcrates.io
< 0.36.00.36.0

Affected products

2
  • ghsa-coords
    Range: < 0.36.0
  • rust-blockchain/evmv5
    Range: < 0.36.0

Patches

0

No patches discovered yet.

Vulnerability mechanics

AI mechanics synthesis has not run for this CVE yet.

References

5

News mentions

0

No linked articles in our index yet.