COMPILER SECURITY

Vyper compiler bugs by version, lookup and full tables

By Michael Lip (Mike), an independent developer. He runs this site and builds the tools on zovo.one. Data fetched 2026-10-20.

Vyper has published 54 security advisories in the GitHub security advisories of the vyperlang/vyper repository. Each one names the compiler range that it affects. 47 of them give a patched version for each range. 7 of them have at least one range with no patched version as of 2026-10-20. That mapping matters when you verify a deployed contract: Etherscan records the compiler version a contract was built with, and this page tells you which published bugs that build carries. The sibling page covers Solidity compiler bugs by version.

On this page Version lookup Severity and the one critical All versions All advisories Method and limits

54
published advisories
31
stable releases
0.2.1 to 0.4.3
oldest and newest stable release
2026-10-20
date of the fetch

Version lookup

Type a Vyper stable release, for example 0.3.10. You can also paste the Etherscan form, for example vyper:0.3.10. The lookup recomputes the affected advisory set from the embedded data on your device; nothing is sent anywhere.

Severity and the one critical

In the ratings of the vyperlang/vyper repository advisories, exactly one advisory is critical: GHSA-5824-cm3x-3c38 (CVE-2023-39363), "Incorrectly allocated named re-entrancy locks", published 2023-08-05. It affects Vyper 0.2.15 through 0.3.0 and was fixed in the 0.3.1 release. On 30 July 2023 attackers used this bug to drain several Curve.Fi liquidity pools (Vyper post-mortem). The advisory says that a contract is at risk only when a function with a named lock makes an external call before it updates storage, and a second function uses the same key.

Severity source. Every severity label and count on this page, in the lookup and in the tables, is the rating in the vyperlang/vyper repository advisories. Other databases rate many of the same bugs differently. On 2026-10-20 the GitHub Advisory Database (the reviewed records that Dependabot uses) listed 47 of the 54 advisories, rated 3 of them critical (GHSA-5824-cm3x-3c38, GHSA-52xq-j7v9-v4v2 and GHSA-9x7f-gwxq-6f2c), and gave a different rating than the repository for 20 of the 47. NVD shows a CVSS 3.1 base score of 9.8 CRITICAL for CVE-2024-24561 and CVE-2024-24563, which the repository rates high and medium. Check the advisory and the CVE record before you rank the risk of a bug.

Worked example

Etherscan shows the compiler of a verified Vyper contract in the form vyper:0.2.15. Paste that into the lookup. The result for 0.2.15 is 38 known published advisories (repository ratings: 1 critical, 6 high, 15 medium, 16 low), and the critical one is GHSA-5824-cm3x-3c38. The Vyper post-mortem says: "All Vyper contracts that have been compiled with versions v0.2.15, v0.2.16, and v0.3.0 are vulnerable to the malfunctioning re-entrancy guard". A listed advisory does not prove that a contract is exploitable. Read each advisory and check whether the contract uses the affected feature, as the critical example above shows.

All versions

Source: GitHub security advisories of the vyperlang/vyper repository, fetched 2026-10-20; release list from PyPI. Counts recomputed independently, see method.

6 of the 31 stable releases are yanked on PyPI: 0.2.6, 0.2.9, 0.2.10, 0.2.13, 0.2.14 and 0.3.5. They stay in the table because contracts compiled with them can still exist.

Stable Vyper releases on PyPI and published security advisories by repository severity rating, as of 2026-10-20
VersionAdvisoriesHigh+MedLow
0.4.3 (latest)7043
0.4.27043
0.4.19045
0.4.011065
0.3.10232714
0.3.92821016
0.3.82821016
0.3.73251116
0.3.63251116
0.3.53251116
0.3.43251116
0.3.33151115
0.3.23151115
0.3.13361314
0.3.03471215
0.2.163871516
0.2.153871516
0.2.143871516
0.2.133871516
0.2.123761516
0.2.113761516
0.2.103761516
0.2.93761516
0.2.83761417
0.2.73761417
0.2.63761417
0.2.53861517
0.2.43861517
0.2.33861517
0.2.23961518
0.2.13961518

Advisories by stable line

An advisory counts for a line when its range contains at least one stable release of that line. One advisory can count for more than one line.

Advisories that affect at least one stable release of each line, by repository severity rating, as of 2026-10-20
LineAdvisoriesCriticalHighMediumLow
0.4.x130067
0.3.x42161619
0.2.x42171618

Pre-releases. PyPI lists four 0.5.0 pre-releases: 0.5.0a1, 0.5.0a2, 0.5.0a3 and 0.5.0b1. Each one is in the range of 7 advisories (4 medium, 3 low). None of these 7 advisories has a patched version for the range that contains these pre-releases, as of 2026-10-20. The lookup accepts stable releases only.

All advisories

All 54 published Vyper security advisories with affected ranges, fetched from the GitHub API on 2026-10-20, with the repository severity rating
IDCVERepo severityPublishedSummaryAffectedFixed in
GHSA-2489-32vh-8rrc-medium2026-10-07Function variables can replace imported constant values and default arguments>= 0.4.0b1unfixed as of 2026-10-20
GHSA-r3c7-7xwm-6vfw-low2026-10-06Multi-byte identifier characters can silently change literal values>= 0.1.0b1, < 0.1.0b12, = 0.1.0b14, >= 0.4.10.1.0b12, 0.1.0b15; unfixed as of 2026-10-20
GHSA-wvx7-39qj-2g9v-low2026-10-06Line-separator characters can silently change literal values and types>= 0.1.0b1, < 0.1.0b17, >= 0.4.10.1.0b17; unfixed as of 2026-10-20
GHSA-fxg7-4wqg-c8gh-low2026-10-06`create_from_blueprint` offset validation bypass through unsigned wraparound>= 0.3.4unfixed as of 2026-10-20
GHSA-cw3h-xwxq-8cx2-medium2026-10-05Ternary expressions misread nested arrays with different inner bounds>= 0.3.8, <= 0.5.0b1unfixed as of 2026-10-20
GHSA-6j9c-gvcw-74fj-medium2026-10-02Optimizer replaces `msg.value | K` and `len(msg.data) | K`with `1` in ternary branches>= 0.3.8unfixed as of 2026-10-20
GHSA-3vcg-j39x-cwfmCVE-2025-47774low2025-05-15`slice()` may elide side-effects when output length is 0< 0.4.20.4.2
GHSA-qhr6-mgqr-mchmCVE-2025-47285low2025-05-15`concat()` builtin may elide side-effects for zero-length arguments< 0.4.20.4.2
GHSA-h33q-mhmp-8p67CVE-2025-27104low2025-02-21multiple eval in For List Iter< 0.4.10.4.1
GHSA-4w26-8p97-f4jpCVE-2025-27105medium2025-02-21AugAssign evaluation order causing OOB write within the object< 0.4.10.4.1
GHSA-2p94-8669-xg86CVE-2025-26622low2025-02-21sqrt doesn't define rounding behavior< 0.4.10.4.1
GHSA-vgf2-gvx8-xwc3CVE-2025-21607medium2025-01-14Success of Certain Precompile Calls not Checked< 0.4.10.4.1
GHSA-r56x-j438-vw5mCVE-2024-32646low2024-04-25double eval of the slice start/length args in certain cases< 0.4.00.4.0
GHSA-5jrj-52x8-m64hCVE-2024-32649low2024-04-25multiple eval of `sqrt()` argument built in< 0.4.00.4.0
GHSA-3whq-64q2-qfj6CVE-2024-32647low2024-04-25double eval of raw_args in create_from_blueprint< 0.4.00.4.0
GHSA-m2v9-w374-5hj9CVE-2024-32648low2024-04-25default functions don't respect nonreentrancy keys< 0.3.00.3.0
GHSA-xchq-w5r3-4wg3CVE-2024-32645low2024-04-25incorrect topic logging in raw_log< 0.4.00.4.0
GHSA-ppx5-q359-pvwjCVE-2024-32481low2024-04-25range(start, start + N) reverts for negative numbers>= 0.3.8, < 0.4.00.4.0
GHSA-9p8r-4xp4-gw5wCVE-2024-26149low2024-02-26_abi_decode Memory Overflow< 0.4.00.4.0
GHSA-4hwq-4cpm-8vmxCVE-2024-24564low2024-02-26extract32 can read dirty memory< 0.4.00.4.0
GHSA-52xq-j7v9-v4v2CVE-2024-24563medium2024-02-07negative array index bounds checks< 0.4.00.4.0
GHSA-6845-xw22-ffxvCVE-2024-24559low2024-02-05sha3 codegen bug< 0.4.00.4.0
GHSA-gp3w-2v2m-p686CVE-2024-24560low2024-02-02External calls can overflow return data to return input buffer< 0.4.00.4.0
GHSA-9x7f-gwxq-6f2cCVE-2024-24561high2024-01-31Bounds check on built-in `slice()` function can be overflowed< 0.4.00.4.0
GHSA-x2c2-q32w-4w6mCVE-2024-24567medium2024-01-30raw_call `value=` kwargs not disabled for static and delegate calls< 0.4.00.4.0
GHSA-2q8v-3gqq-4f8pCVE-2024-22419high2024-01-18concat built-in can corrupt memory>= 0.3.0, < 0.4.0b10.4.0b1
GHSA-6m97-7527-mh74CVE-2023-46247high2023-12-12incorrect storage layout for contracts containing large arrays< 0.3.80.3.8
GHSA-cx2q-hfxr-rj97CVE-2023-42460medium2023-09-26_abi_decode input not validated in certain complex expressions>= 0.3.4, < 0.3.100.3.10
GHSA-c647-pxm2-c52wCVE-2023-42443low2023-09-18memory corruption in certain builtins utilizing `msize`>= 0.3.4, < 0.3.100.3.10
GHSA-3hg2-r75x-g69mCVE-2023-42441medium2023-09-15incorrect re-entrancy lock when key is empty string>= 0.2.9, < 0.3.100.3.10
GHSA-4hg4-9mf5-wxxqCVE-2023-41052low2023-09-02incorrect order of evaluation of side effects for some builtins< 0.3.100.3.10
GHSA-g2xh-c426-v8mfCVE-2023-40015medium2023-09-02reversed order of side effects for some operations>= 0unfixed as of 2026-10-20
GHSA-5824-cm3x-3c38CVE-2023-39363critical2023-08-05Incorrectly allocated named re-entrancy locks>= 0.2.15, < 0.3.10.3.1
GHSA-f5x6-7qgp-jhf3CVE-2023-37902medium2023-07-25ecrecover can return stale memory data for invalid signatures (paraphrase of the GitHub title)< 0.3.100.3.10
GHSA-vxmm-cwh2-q762CVE-2023-32675low2023-05-19nonpayable default functions can sometimes be sent ether with calldatasize<4< 0.3.80.3.8
GHSA-ph9x-4vc9-m39gCVE-2023-32059high2023-05-11incorrect ordering of default arguments passed to internal calls< 0.3.80.3.8
GHSA-6r8q-pfpv-7cgjCVE-2023-32058medium2023-05-11Integer overflow for loops of form `for i in range(x, x+N)`< 0.3.80.3.8
GHSA-3p37-3636-q8wvCVE-2023-31146high2023-05-11OOB DynArray access when array is on both LHS and RHS of an assignment< 0.3.80.3.8
GHSA-mgv8-gggw-mrg6CVE-2023-30837medium2023-05-05Storage allocator overflow< 0.3.80.3.8
GHSA-w9g2-3w7p-72g9CVE-2023-30629medium2023-04-24raw_call with outsize=0 and revert_on_failure=False returns incorrect success value>= 0.3.1, < 0.3.80.3.8
GHSA-4v9q-cgpw-cf38CVE-2022-29255medium2022-06-06multiple evaluation of contract address in call< 0.3.40.3.4
GHSA-42j8-8cjv-j5r9CVE-2022-29175low2022-05-05safemath for decimals do not check for 256-bit overflow (the linked CVE-2022-29175 was rejected by CVE.org as not a security issue)>= 0.3.2, < 0.3.40.3.4
GHSA-j2x6-9323-fp7hCVE-2022-24845high2022-04-13external calls are not clamped in certain complex expressions< 0.3.20.3.2
GHSA-4mrx-6fxm-8jpgCVE-2022-24788medium2022-04-13No bytes clamps for interfaces imported via JSON< 0.3.20.3.2
GHSA-7vrm-3jc8-5wwmCVE-2022-24787medium2022-04-02bytestring equality incorrect for Bytes[N<=32]< 0.3.20.3.2
GHSA-xv8x-pr4h-73jvCVE-2021-41121high2021-10-06Memory corruption when returning a literal struct with a private call inside of it< 0.3.00.3.0
GHSA-c7pr-343r-5c46CVE-2021-41122medium2021-10-05missing clamps for decimal args in external functions< 0.3.00.3.0
GHSA-7f92-rr6w-cq64-high2021-07-27VVE-2021-0003: Storage variables overwritten by re-entrancy locks>= 0.2.13, < 0.2.150.2.15
GHSA-22wc-c9wj-6q2v-medium2021-04-16Memory corruption using function calls within arrays>= 0.1.0b4, < 0.3.00.3.0
GHSA-375m-5fvv-xq23-low2021-04-16VVE-2021-0002: Incorrect `returndatasize` when using simple forwarder proxies deployed prior to EIP-1167 adoption< 0.2.90.2.9
GHSA-2r3x-4mrv-mcxf-medium2020-10-10Memory corruption using function calls within tuples / nested calls>= 0.1.0b4, < 0.3.00.3.0
GHSA-4v7v-gqf9-ww2g-medium2020-10-10VVE-2020-0003: Call stack corruption when passing complex type containing non-base type members as argument< 0.2.60.2.6
GHSA-vg88-3v92-rjx2-low2020-07-16 VVE-2020-0002: Return inside for loop more than 1 level deep>= 0.1.0b10, < 0.2.30.2.3
GHSA-mr6r-mvw4-736g-low2020-03-09VVE-2020-0001: Interfaces returning integer types less than 256 bits can be manipulated if uint256 is used< 0.3.10.3.1

Method and limits

The advisory numbers on this page come from the GitHub security advisories of vyperlang/vyper (54 advisories, fetched 2026-10-20; links point to the repository advisory pages, 7 of the 54 are repository-level advisories not mirrored in GitHub’s global advisory database, including one attached to a withdrawn CVE), cross-checked against the PyPI release list (31 stable releases). A version is counted as affected when it falls inside an advisory's published range, so every count can be recomputed from the GitHub and PyPI data linked here.

Limits worth stating honestly. The advisory database lists published, catalogued bugs; it is not a census of every compiler defect. The tables and the lookup show stable releases only. The 0.5.0 pre-releases are in the note above the advisory table. Ranges marked >= 0.3.8 with no upper bound mean "unfixed as of the fetch date". Severity ratings are the repository publisher's, not mine, and other databases rate many advisories differently (see the severity source note). As of 2026-10-20 each stable release, including 0.4.3, is in the range of at least 7 advisories. A count on this page is not a guarantee about a contract.