Vyper has incorrectly allocated named re-entrancy locks
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
.vycontract compiled with either of the followingvyperversions:0.2.15,0.2.16,0.3.0 - A primary function that utilizes the
@nonreentrantdecorator with a specifickeyand 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
keyand 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
Affected software
Click a technology to see all vulnerabilities affecting it.
| Platform | Package | Vulnerable versions | Fixed in |
|---|---|---|---|
| Python (PyPI) | vyper | >= 0.2.15, < 0.3.1 | 0.3.1 |
References
- https://github.com/vyperlang/vyper/security/advisories/GHSA-5824-cm3x-3c38
- https://hackmd.io/@LlamaRisk/BJzSKHNjn
- https://hackmd.io/@vyperlang/HJUgNMhs2
- https://github.com/vyperlang/vyper/pull/2514
- https://github.com/vyperlang/vyper/pull/2439
- https://nvd.nist.gov/vuln/detail/CVE-2023-39363
- https://github.com/pypa/advisory-database/tree/main/vulns/vyper/PYSEC-2023-142.yaml
- https://github.com/vyperlang/vyper
- CVSS vector
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:C/C:N/I:H/A:H- Weakness (CWE)
CWE-863- Platform
- Python (PyPI)
- Package
vyper- Disclosed
- 07.08.2023
- Updated
- 11.10.2026 15:17
Sources and licenses
OSV / GitHub Advisory Database - PYSEC-2023-142 - PyPA Advisory Database; CC BY 4.0
OSV / GitHub Advisory Database - GHSA-5824-cm3x-3c38 - CC BY 4.0
Vulnerability history: vyper
All published vulnerabilities of this package (Python (PyPI)), newest first. Shows whether this is a one-off slip or a package that needs watching.
- Total entries
- 47
- First → latest
- 03.2020 10.2026
- Without a fix
- 5
- Exploited in attacks
- 0
Severity breakdown
- Critical 3
- High 14
- Medium 20
- Low 10
Disclosures per year
- 2020: 1
- 2021: 5
- 2022: 4
- 2023: 14
- 2024: 14
- 2025: 6
- 2026: 3
-
Vyper has incorrectly allocated named re-entrancy locks this entry
Know which vulnerabilities affect your application
With the DockRay integration and software inventory enabled, DockRay checks reported component versions against known vulnerabilities and notifies you about confirmed matches. Coverage depends on the supported technology and available advisory data.