CVE-2023-39363: Vyper incorrectly allocated named re-entrancy locks

Published Aug 7, 2023
·
Updated

Impact

In versions 0.2.15, 0.2.16 and 0.3.0, named re-entrancy locks are allocated incorrectly. Each function using a named re-entrancy lock gets a unique lock regardless of the key, allowing cross-function re-entrancy in contracts compiled with the susceptible versions. A specific set of conditions is required to result in misbehavior of affected contracts, specifically:

- A .vy contract compiled with either of the following vyper versions: 0.2.15, 0.2.16, 0.3.0 - A primary function that utilizes the @nonreentrant decorator with a specific key and does not strictly follow the check-effects-interaction pattern (i.e. contains an external call to an untrusted party before storage updates) - A secondary function that utilizes the same key and would be affected by the improper state caused by the primary function

Patches https://github.com/vyperlang/vyper/pull/2439, https://github.com/vyperlang/vyper/pull/2514

Workarounds Upgrade to 0.3.1 or higher

References Technical post-mortem report: https://hackmd.io/@vyperlang/HJUgNMhs2

Other sources

Vyper is a Pythonic Smart Contract Language for the Ethereum Virtual Machine (EVM). In versions 0.2.15, 0.2.16 and 0.3.0, named re-entrancy locks are allocated incorrectly. Each function using a named re-entrancy lock gets a unique lock regardless of the key, allowing cross-function re-entrancy in contracts compiled with the susceptible versions. A specific set of conditions is required to result in misbehavior of affected contracts, specifically: a .vy contract compiled with vyper versions 0.2.15, 0.2.16, or 0.3.0; a primary function that utilizes the @nonreentrant decorator with a specific key and does not strictly follow the check-effects-interaction pattern (i.e. contains an external call to an untrusted party before storage updates); and a secondary function that utilizes the same key and would be affected by the improper state caused by the primary function. Version 0.3.1 contains a fix for this issue.

Affected Software

4 affected componentsFixes available
pip/vyper>=0.2.15<0.3.1
0.3.1
vyperlang Vyper Python=0.2.15
vyperlang Vyper Python=0.2.16
vyperlang Vyper Python=0.3.0

Event History

Aug 7, 2023
CVE Published
via MITRE·06:40 PM
Data Sourced
via MITRE·06:40 PM
DescriptionWeakness
Aug 9, 2023
Advisory Published
02:27 PM

Frequently Asked Questions

1

What is CVE-2023-39363?

CVE-2023-39363 is a vulnerability in Vyper, a Pythonic Smart Contract Language for the Ethereum Virtual Machine (EVM).

2

What is the impact of CVE-2023-39363?

CVE-2023-39363 allows for cross-function re-entrancy in contracts compiled with susceptible versions of Vyper, specifically 0.2.15, 0.2.16, and 0.3.0.

3

How can I fix CVE-2023-39363?

To fix CVE-2023-39363, update Vyper to version 0.3.1 or higher.

4

How severe is CVE-2023-39363?

CVE-2023-39363 has a severity value of 5.9, which is considered medium.

5

Where can I find more information about CVE-2023-39363?

You can find more information about CVE-2023-39363 on the GitHub pull requests [2439](https://github.com/vyperlang/vyper/pull/2439) and [2514](https://github.com/vyperlang/vyper/pull/2514), as well as the [security advisory](https://github.com/vyperlang/vyper/security/advisories/GHSA-5824-cm3x-3c38).

Contact

SecAlerts Pty Ltd.
132 Wickham Terrace
Fortitude Valley,
QLD 4006, Australia
info@secalerts.co
By using SecAlerts services, you agree to our services end-user license agreement. This website is safeguarded by reCAPTCHA and governed by the Google Privacy Policy and Terms of Service. All names, logos, and brands of products are owned by their respective owners, and any usage of these names, logos, and brands for identification purposes only does not imply endorsement. If you possess any content that requires removal, please get in touch with us.
© 2026 SecAlerts Pty Ltd.
ABN: 70 645 966 203, ACN: 645 966 203