Description
Vyper from 0.2.13 before 0.2.15 allocates storage slots for @nonreentrant reentrancy locks at the same locations as contract storage variables. When a function using @nonreentrant is called, setting the lock overwrites the overlapping storage variable, corrupting contract state and breaking the contract's intended logic.
Published: 2026-10-21
Score: 8.3 High
EPSS: < 1% Very Low
KEV: No
Impact: State corruption that can lead to funds loss
Action: Immediate patch
AI Analysis

Impact

Vyper versions from 0.2.13 through 0.2.14 allocate storage slots for @nonreentrant reentrancy locks at the same locations as contract storage variables. When a function decorated with @nonreentrant is executed, the lock value overwrites the overlapping storage variable, corrupting the contract state and breaking the contract's intended logic. This leads to a loss of data integrity and can allow an attacker to manipulate critical state variables, potentially resulting in unauthorized transfers or manipulations of the contract’s behavior. It is an instance of a buffer over-read / out-of-bounds error, classified as CWE-787.

Affected Systems

Vyperlang’s Vyper compiler in versions 0.2.13 and 0.2.14 is affected. The vulnerability is fixed in version 0.2.15 and later.

Risk and Exploitability

The vulnerability has a CVSS score of 8.3, indicating a high severity. The EPSS score is not available, and the vulnerability is not listed in the CISA KEV catalog. The likely attack vector is through interaction with a deployed contract on a blockchain network, where an attacker can invoke a function covered by the @nonreentrant decorator to trigger the storage overwrite. The exploitation requires the attacker to have the ability to call the affected function; it does not require any privileged access to the compiler or build environment.

Generated by OpenCVE AI on October 21, 2026 at 12:04 UTC.

Remediation

No solution or workaround provided in the CVE record.

OpenCVE Recommended Actions

  • Upgrade to Vyper 0.2.15 or later, where the storage allocation bug is corrected.
  • Recompile vulnerable contracts and verify that the @nonreentrant lock does not overlap with critical storage variables; modify storage layout if necessary.
  • Audit deployed contracts for signs of storage corruption, and if corruption is suspected, redeploy the contracts with the fixed compiler version.

Generated by OpenCVE AI on October 21, 2026 at 12:04 UTC.

Tracking

Sign in to view the affected projects.

Advisories

No advisories yet.

History

Fri, 23 Oct 2026 16:30:00 +0000

Type Values Removed Values Added
Metrics ssvc

{'options': {'Automatable': 'no', 'Exploitation': 'none', 'Technical Impact': 'partial'}, 'version': '2.0.3'}


Wed, 21 Oct 2026 00:45:00 +0000

Type Values Removed Values Added
Description Vyper from 0.2.13 before 0.2.15 allocates storage slots for @nonreentrant reentrancy locks at the same locations as contract storage variables. When a function using @nonreentrant is called, setting the lock overwrites the overlapping storage variable, corrupting contract state and breaking the contract's intended logic.
Title Vyper 0.2.13 before 0.2.15 Storage Corruption via @nonreentrant Decorator
First Time appeared Vyperlang
Vyperlang vyper
Weaknesses CWE-787
CPEs cpe:2.3:a:vyperlang:vyper:*:*:*:*:*:*:*:*
Vendors & Products Vyperlang
Vyperlang vyper
References
Metrics cvssV3_1

{'score': 7.4, 'vector': 'CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:H/A:H'}

cvssV4_0

{'score': 8.3, 'vector': 'CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:H/VA:H/SC:N/SI:N/SA:N'}


cve-icon MITRE

Status: PUBLISHED

Assigner: VulnCheck

Published:

Updated: 2026-10-23T14:57:15.214Z

Reserved: 2026-10-20T21:51:20.819Z

Link: CVE-2021-48018

cve-icon Vulnrichment

Updated: 2026-10-23T14:57:11.817Z

cve-icon NVD

Status : Deferred

Published: 2026-10-21T01:17:18.983

Modified: 2026-10-23T15:17:20.357

Link: CVE-2021-48018

cve-icon Redhat

No data.

cve-icon OpenCVE Enrichment

Updated: 2026-10-21T18:30:13Z

Weaknesses