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.
Affected products
| Vendor | Product | Affected | Fixed |
|---|---|---|---|
| vyperlang | vyper | 0.2.13 – < 0.2.15 | 0.2.15 |
Affected packages
| Ecosystem | Package | Affected | Fixed | Record |
|---|---|---|---|---|
| PyPI | vyper | >= 0.2.13, < 0.2.15 | 0.2.15 | GHSA-7f92-rr6w-cq64 |
References
- GitHub Security Advisory (GHSA-7f92-rr6w-cq64) vendor-advisory
- VulnCheck Advisory: Vyper 0.2.13 before 0.2.15 Storage Corruption via @nonreentrant Decorator third-party-advisory