Vyper vulnerable to OOB DynArray access when array is on both LHS and RHS of an assignment
Impact
during codegen, the length word of a dynarray is written before the data, which can result in OOB array access in the case where the dynarray is on both the lhs and rhs of an assignment. here is a minimal example producing the issue:
a:DynArray[uint256,3]
@external
def test() -> DynArray[uint256,3]:
self.a = [1,2,3]
self.a = empty(DynArray[uint256,3])
self.a = [self.a[0],self.a[1],self.a[2]]
return self.a # return [1,2,3]
and here is an example demonstrating the issue can cause data corruption across call frames:
@external
def test() -> DynArray[uint256,3]:
self.a()
return self.b() # return [1,2,3]
@internal
def a():
a: uint256 = 0
b: uint256 = 1
c: uint256 = 2
d: uint256 = 3
@internal
def b() -> DynArray[uint256,3]:
a: DynArray[uint256,3] = empty(DynArray[uint256,3])
a = [a[0],a[1],a[2]]
return a
examples involving append and pop:
@internal
def foo():
c: DynArray[uint256, 1] = []
c.append(c[0])
@internal
def foo():
c: DynArray[uint256, 1] = [1]
c[0] = c.pop()
the expected behavior in all of the above cases is to revert due to oob array access.
Patches
patched in 4f8289a81206f767df1900ac48f485d90fc87edb
Workarounds
Is there a way for users to fix or remediate the vulnerability without upgrading?
References
Are there any links users can visit to find out more?
Betroffene Software
Klicken Sie auf eine Technologie, um alle zugehörigen Schwachstellen anzuzeigen.
| Plattform | Paket | Anfällige Versionen | Behoben in |
|---|---|---|---|
| Python (PyPI) | vyper | < 0.3.8 | 0.3.8 |
Verweise
- https://github.com/vyperlang/vyper/security/advisories/GHSA-3p37-3636-q8wv
- https://github.com/vyperlang/vyper/commit/4f8289a81206f767df1900ac48f485d90fc87edb
- https://nvd.nist.gov/vuln/detail/CVE-2023-31146
- https://github.com/pypa/advisory-database/tree/main/vulns/vyper/PYSEC-2023-77.yaml
- https://github.com/vyperlang/vyper
- CVSS-Vektor
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N- Schwäche (CWE)
CWE-787- Plattform
- Python (PyPI)
- Paket
vyper- Veröffentlicht
- 11.05.2023
- Aktualisiert
- 11.10.2026 15:17
Quellen und Lizenzen
OSV / GitHub Advisory Database - PYSEC-2023-77 - PyPA Advisory Database; CC BY 4.0
OSV / GitHub Advisory Database - GHSA-3p37-3636-q8wv - CC BY 4.0
Schwachstellenhistorie: vyper
Alle veröffentlichten Schwachstellen dieses Pakets (Python (PyPI)), neueste zuerst. Zeigt, ob es ein einmaliger Ausrutscher ist oder ein Paket, das man im Auge behalten muss.
- Einträge insgesamt
- 47
- Erste → letzte
- 03.2020 10.2026
- Ohne Fix
- 5
- In Angriffen ausgenutzt
- 0
Verteilung nach Schweregrad
- Kritisch 3
- Hoch 14
- Mittel 20
- Niedrig 10
Veröffentlichungen pro Jahr
- 2020: 1
- 2021: 5
- 2022: 4
- 2023: 14
- 2024: 14
- 2025: 6
- 2026: 3
-
Vyper vulnerable to OOB DynArray access when array is on both LHS and RHS of an assignment dieser Eintrag
Erkennen Sie Schwachstellen in Ihrer Anwendung
Mit der DockRay-Integration und aktivierter Softwareinventarisierung prüft DockRay gemeldete Komponentenversionen auf bekannte Schwachstellen und benachrichtigt Sie über bestätigte Treffer. Die Abdeckung hängt von der unterstützten Technologie und den verfügbaren Meldungen ab.