Staging Environment: Content and features may be unstable or change without notice.
Search for packages
Package details: pkg:pypi/vyper@0.3.9
purl pkg:pypi/vyper@0.3.9
Next non-vulnerable version 0.4.1
Latest non-vulnerable version 0.4.1
Risk
Vulnerabilities affecting this package (22)
Vulnerability Summary Fixed by
VCID-1q3x-5eug-afdg
Aliases:
CVE-2023-42460
GHSA-cx2q-hfxr-rj97
PYSEC-2023-191
Vyper is a Pythonic Smart Contract Language for the EVM. The `_abi_decode()` function does not validate input when it is nested in an expression. Uses of `_abi_decode()` can be constructed which allow for bounds checking to be bypassed resulting in incorrect results. This issue has not yet been fixed, but a fix is expected in release `0.3.10`. Users are advised to reference pull request #3626.
0.3.10
Affected by 17 other vulnerabilities.
VCID-1r9c-w5zc-6ker
Aliases:
CVE-2025-27105
GHSA-4w26-8p97-f4jp
PYSEC-2025-31
vyper is a Pythonic Smart Contract Language for the EVM. Vyper handles AugAssign statements by first caching the target location to avoid double evaluation. However, in the case when target is an access to a DynArray and the rhs modifies the array, the cached target will evaluate first, and the bounds check will not be re-evaluated during the write portion of the statement. This issue has been addressed in version 0.4.1 and all users are advised to upgrade. There are no known workarounds for this vulnerability.
0.4.1
Affected by 0 other vulnerabilities.
VCID-7nbf-6rd9-2uap
Aliases:
CVE-2023-41052
GHSA-4hg4-9mf5-wxxq
PYSEC-2023-168
Vyper is a Pythonic Smart Contract Language. In affected versions the order of evaluation of the arguments of the builtin functions `uint256_addmod`, `uint256_mulmod`, `ecadd` and `ecmul` does not follow source order. This behaviour is problematic when the evaluation of one of the arguments produces side effects that other arguments depend on. A patch is currently being developed on pull request #3583. When using builtins from the list above, users should make sure that the arguments of the expression do not produce side effects or, if one does, that no other argument is dependent on those side effects.
0.3.10rc1
Affected by 20 other vulnerabilities.
VCID-br4v-y1ka-wbh2
Aliases:
CVE-2024-24563
GHSA-52xq-j7v9-v4v2
PYSEC-2024-150
Vyper is a Pythonic Smart Contract Language for the Ethereum Virtual Machine. Arrays can be keyed by a signed integer, while they are defined for unsigned integers only. The typechecker doesn't throw when spotting the usage of an `int` as an index for an array. The typechecker allows the usage of signed integers to be used as indexes to arrays. The vulnerability is present in different forms in all versions, including `0.3.10`. For ints, the 2's complement representation is used. Because the array was declared very large, the bounds checking will pass Negative values will simply be represented as very large numbers. As of time of publication, a fixed version does not exist. There are three potential vulnerability classes: unpredictable behavior, accessing inaccessible elements and denial of service. Class 1: If it is possible to index an array with a negative integer without reverting, this is most likely not anticipated by the developer and such accesses can cause unpredictable behavior for the contract. Class 2: If a contract has an invariant in the form `assert index < x`, the developer will suppose that no elements on indexes `y | y >= x` are accessible. However, by using negative indexes, this can be bypassed. Class 3: If the index is dependent on the state of the contract, this poses a risk of denial of service. If the state of the contract can be manipulated in such way that the index will be forced to be negative, the array access can always revert (because most likely the array won't be declared extremely large). However, all these the scenarios are highly unlikely. Most likely behavior is a revert on the bounds check.
0.4.0b1
Affected by 9 other vulnerabilities.
0.4.0
Affected by 4 other vulnerabilities.
VCID-c8rf-ec8a-gybs
Aliases:
CVE-2024-24561
GHSA-9x7f-gwxq-6f2c
PYSEC-2024-149
Vyper is a pythonic Smart Contract Language for the ethereum virtual machine. In versions 0.3.10 and earlier, the bounds check for slices does not account for the ability for start + length to overflow when the values aren't literals. If a slice() function uses a non-literal argument for the start or length variable, this creates the ability for an attacker to overflow the bounds check. This issue can be used to do OOB access to storage, memory or calldata addresses. It can also be used to corrupt the length slot of the respective array.
0.4.0b1
Affected by 9 other vulnerabilities.
0.4.0
Affected by 4 other vulnerabilities.
VCID-cp7n-z6w9-k3bn
Aliases:
CVE-2024-22419
GHSA-2q8v-3gqq-4f8p
PYSEC-2024-103
Vyper is a Pythonic Smart Contract Language for the Ethereum Virtual Machine. The `concat` built-in can write over the bounds of the memory buffer that was allocated for it and thus overwrite existing valid data. The root cause is that the `build_IR` for `concat` doesn't properly adhere to the API of copy functions (for `>=0.3.2` the `copy_bytes` function). A contract search was performed and no vulnerable contracts were found in production. The buffer overflow can result in the change of semantics of the contract. The overflow is length-dependent and thus it might go unnoticed during contract testing. However, certainly not all usages of concat will result in overwritten valid data as we require it to be in an internal function and close to the return statement where other memory allocations don't occur. This issue has been addressed in 0.4.0.
0.4.0b1
Affected by 9 other vulnerabilities.
0.4.0
Affected by 4 other vulnerabilities.
VCID-cpb5-3f58-5ueb
Aliases:
CVE-2023-42441
GHSA-3hg2-r75x-g69m
PYSEC-2023-305
Vyper is a Pythonic Smart Contract Language for the Ethereum Virtual Machine (EVM). Starting in version 0.2.9 and prior to version 0.3.10, locks of the type `@nonreentrant("")` or `@nonreentrant('')` do not produce reentrancy checks at runtime. This issue is fixed in version 0.3.10. As a workaround, ensure the lock name is a non-empty string.
0.3.10
Affected by 17 other vulnerabilities.
VCID-djvb-mdjy-b7g5
Aliases:
CVE-2025-27104
GHSA-h33q-mhmp-8p67
PYSEC-2025-30
vyper is a Pythonic Smart Contract Language for the EVM. Multiple evaluation of a single expression is possible in the iterator target of a for loop. While the iterator expression cannot produce multiple writes, it can consume side effects produced in the loop body (e.g. read a storage variable updated in the loop body) and thus lead to unexpected program behavior. Specifically, reads in iterators which contain an ifexp (e.g. `for s: uint256 in ([read(), read()] if True else [])`) may interleave reads with writes in the loop body. Vyper for loops allow two kinds of iterator targets, namely the `range()` builtin and an iterable type, like SArray and DArray. During codegen, iterable lists are required to not produce any side-effects (in the following code, `range_scope` forces `iter_list` to be parsed in a constant context, which is checked against `is_constant`). However, this does not prevent the iterator from consuming side effects provided by the body of the loop. For SArrays on the other hand, `iter_list` is instantiated in the body of a `repeat` ir, so it can be evaluated several times. This issue is being addressed and is expected to be available in version 0.4.1. Users are advised to upgrade as soon as the patched release is available. There are no known workarounds for this vulnerability.
0.4.1
Affected by 0 other vulnerabilities.
VCID-h6ck-r6j1-yuhp
Aliases:
CVE-2023-42443
GHSA-c647-pxm2-c52w
PYSEC-2023-306
Vyper is a Pythonic Smart Contract Language for the Ethereum Virtual Machine (EVM). In version 0.3.9 and prior, under certain conditions, the memory used by the builtins `raw_call`, `create_from_blueprint` and `create_copy_of` can be corrupted. For `raw_call`, the argument buffer of the call can be corrupted, leading to incorrect `calldata` in the sub-context. For `create_from_blueprint` and `create_copy_of`, the buffer for the to-be-deployed bytecode can be corrupted, leading to deploying incorrect bytecode. Each builtin has conditions that must be fulfilled for the corruption to happen. For `raw_call`, the `data` argument of the builtin must be `msg.data` and the `value` or `gas` passed to the builtin must be some complex expression that results in writing to the memory. For `create_copy_of`, the `value` or `salt` passed to the builtin must be some complex expression that results in writing to the memory. For `create_from_blueprint`, either no constructor parameters should be passed to the builtin or `raw_args` should be set to True, and the `value` or `salt` passed to the builtin must be some complex expression that results in writing to the memory. As of time of publication, no patched version exists. The issue is still being investigated, and there might be other cases where the corruption might happen. When the builtin is being called from an `internal` function `F`, the issue is not present provided that the function calling `F` wrote to memory before calling `F`. As a workaround, the complex expressions that are being passed as kwargs to the builtin should be cached in memory prior to the call to the builtin.
0.3.10
Affected by 17 other vulnerabilities.
VCID-m355-31jd-1kfq
Aliases:
CVE-2025-21607
PYSEC-2025-33
Vyper is a Pythonic Smart Contract Language for the EVM. When the Vyper Compiler uses the precompiles EcRecover (0x1) and Identity (0x4), the success flag of the call is not checked. As a consequence an attacker can provide a specific amount of gas to make these calls fail but let the overall execution continue. Then the execution result can be incorrect. Based on EVM's rules, after the failed precompile the remaining code has only 1/64 of the pre-call-gas left (as 63/64 were forwarded and spent). Hence, only fairly simple executions can follow the failed precompile calls. Therefore, we found no significantly impacted real-world contracts. None the less an advisory has been made out of an abundance of caution. There are no actions for users to take.
0.4.1
Affected by 0 other vulnerabilities.
VCID-pcsz-xwb8-7yh4
Aliases:
CVE-2024-32481
GHSA-ppx5-q359-pvwj
PYSEC-2024-246
Vyper is a pythonic Smart Contract Language for the Ethereum virtual machine. Starting in version 0.3.8 and prior to version 0.4.0b1, when looping over a `range` of the form `range(start, start + N)`, if `start` is negative, the execution will always revert. This issue is caused by an incorrect assertion inserted by the code generation of the range `stmt.parse_For_range()`. The issue arises when `start` is signed, instead of using `sle`, `le` is used and `start` is interpreted as an unsigned integer for the comparison. If it is a negative number, its 255th bit is set to `1` and is hence interpreted as a very large unsigned integer making the assertion always fail. Any contract having a `range(start, start + N)` where `start` is a signed integer with the possibility for `start` to be negative is affected. If a call goes through the loop while supplying a negative `start` the execution will revert. Version 0.4.0b1 fixes the issue.
0.4.0b1
Affected by 9 other vulnerabilities.
0.4.0
Affected by 4 other vulnerabilities.
VCID-qfyr-upmm-duea
Aliases:
CVE-2024-32645
GHSA-xchq-w5r3-4wg3
PYSEC-2024-206
Vyper is a pythonic Smart Contract Language for the Ethereum virtual machine. In versions 0.3.10 and prior, incorrect values can be logged when `raw_log` builtin is called with memory or storage arguments to be used as topics. A contract search was performed and no vulnerable contracts were found in production. The `build_IR` function of the `RawLog` class fails to properly unwrap the variables provided as topics. Consequently, incorrect values are logged as topics. As of time of publication, no fixed version is available.
0.4.0
Affected by 4 other vulnerabilities.
VCID-shx9-8v43-9qem
Aliases:
CVE-2024-26149
GHSA-9p8r-4xp4-gw5w
PYSEC-2024-164
Vyper is a pythonic Smart Contract Language for the ethereum virtual machine. If an excessively large value is specified as the starting index for an array in `_abi_decode`, it can cause the read position to overflow. This results in the decoding of values outside the intended array bounds, potentially leading to exploitations in contracts that use arrays within `_abi_decode`. This vulnerability affects 0.3.10 and earlier versions.
0.4.0b1
Affected by 9 other vulnerabilities.
0.4.0
Affected by 4 other vulnerabilities.
VCID-sy1y-q8ym-f3ft
Aliases:
CVE-2023-40015
GHSA-g2xh-c426-v8mf
PYSEC-2023-167
Vyper is a Pythonic Smart Contract Language. For the following (probably non-exhaustive) list of expressions, the compiler evaluates the arguments from right to left instead of left to right. `unsafe_add, unsafe_sub, unsafe_mul, unsafe_div, pow_mod256, |, &, ^ (bitwise operators), bitwise_or (deprecated), bitwise_and (deprecated), bitwise_xor (deprecated), raw_call, <, >, <=, >=, ==, !=, in, not in (when lhs and rhs are enums)`. This behaviour becomes a problem when the evaluation of one of the arguments produces side effects that other arguments depend on. The following expressions can produce side-effect: state modifying external call , state modifying internal call, `raw_call`, `pop()` when used on a Dynamic Array stored in the storage, `create_minimal_proxy_to`, `create_copy_of`, `create_from_blueprint`. This issue has not yet been patched. Users are advised to make sure that the arguments of the expression do not produce side effects or, if one does, that no other argument is dependent on those side effects.
0.3.10rc1
Affected by 20 other vulnerabilities.
VCID-vchm-6wyg-83hk
Aliases:
CVE-2024-24567
GHSA-x2c2-q32w-4w6m
PYSEC-2024-151
Vyper is a pythonic Smart Contract Language for the ethereum virtual machine. Vyper compiler allows passing a value in builtin raw_call even if the call is a delegatecall or a staticcall. But in the context of delegatecall and staticcall the handling of value is not possible due to the semantics of the respective opcodes, and vyper will silently ignore the value= argument. If the semantics of the EVM are unknown to the developer, he could suspect that by specifying the `value` kwarg, exactly the given amount will be sent along to the target. This vulnerability affects 0.3.10 and earlier versions.
0.4.0b1
Affected by 9 other vulnerabilities.
0.4.0
Affected by 4 other vulnerabilities.
VCID-vz6u-kbjy-hkfc
Aliases:
CVE-2024-32647
GHSA-3whq-64q2-qfj6
PYSEC-2024-208
Vyper is a pythonic Smart Contract Language for the Ethereum virtual machine. In versions 0.3.10 and prior, using the `create_from_blueprint` builtin can result in a double eval vulnerability when `raw_args=True` and the `args` argument has side-effects. It can be seen that the `_build_create_IR` function of the `create_from_blueprint` builtin doesn't cache the mentioned `args` argument to the stack. As such, it can be evaluated multiple times (instead of retrieving the value from the stack). No vulnerable production contracts were found. Additionally, double evaluation of side-effects should be easily discoverable in client tests. As such, the impact is low. As of time of publication, no fixed versions exist.
0.4.0
Affected by 4 other vulnerabilities.
VCID-wc7x-rsqa-bkcm
Aliases:
CVE-2025-26622
GHSA-2p94-8669-xg86
PYSEC-2025-29
vyper is a Pythonic Smart Contract Language for the EVM. Vyper `sqrt()` builtin uses the babylonian method to calculate square roots of decimals. Unfortunately, improper handling of the oscillating final states may lead to sqrt incorrectly returning rounded up results. This issue is being addressed and a fix is expected in version 0.4.1. Users are advised to upgrade as soon as the patched release is available. There are no known workarounds for this vulnerability.
0.4.1
Affected by 0 other vulnerabilities.
VCID-wmen-dnf4-2kef
Aliases:
CVE-2024-24564
GHSA-4hwq-4cpm-8vmx
PYSEC-2024-205
Vyper is a pythonic Smart Contract Language for the ethereum virtual machine. When using the built-in `extract32(b, start)`, if the `start` index provided has for side effect to update `b`, the byte array to extract `32` bytes from, it could be that some dirty memory is read and returned by `extract32`. This vulnerability is fixed in 0.4.0.
0.4.0
Affected by 4 other vulnerabilities.
VCID-x4dz-scmh-b7dj
Aliases:
CVE-2024-32649
PYSEC-2024-209
Vyper is a pythonic Smart Contract Language for the Ethereum virtual machine. In versions 0.3.10 and prior, using the `sqrt` builtin can result in double eval vulnerability when the argument has side-effects. It can be seen that the `build_IR` function of the `sqrt` builtin doesn't cache the argument to the stack. As such, it can be evaluated multiple times (instead of retrieving the value from the stack). No vulnerable production contracts were found. Additionally, double evaluation of side-effects should be easily discoverable in client tests. As such, the impact is low. As of time of publication, no fixed versions are available.
0.4.0
Affected by 4 other vulnerabilities.
VCID-x6fh-e77r-pycx
Aliases:
CVE-2024-24559
GHSA-6845-xw22-ffxv
PYSEC-2024-147
Vyper is a Pythonic Smart Contract Language for the EVM. There is an error in the stack management when compiling the `IR` for `sha3_64`. Concretely, the `height` variable is miscalculated. The vulnerability can't be triggered without writing the `IR` by hand (that is, it cannot be triggered from regular vyper code). `sha3_64` is used for retrieval in mappings. No flow that would cache the `key` was found so the issue shouldn't be possible to trigger when compiling the compiler-generated `IR`. This issue isn't triggered during normal compilation of vyper code so the impact is low. At the time of publication there is no patch available.
0.4.0b1
Affected by 9 other vulnerabilities.
0.4.0
Affected by 4 other vulnerabilities.
VCID-zkhz-ckgg-hkat
Aliases:
CVE-2024-32646
PYSEC-2024-207
Vyper is a pythonic Smart Contract Language for the Ethereum virtual machine. In versions 0.3.10 and prior, using the `slice` builtin can result in a double eval vulnerability when the buffer argument is either `msg.data`, `self.code` or `<address>.code` and either the `start` or `length` arguments have side-effects. It can be easily triggered only with the versions `<0.3.4` as `0.3.4` introduced the unique symbol fence. No vulnerable production contracts were found. Additionally, double evaluation of side-effects should be easily discoverable in client tests. As such, the impact is low. As of time of publication, no fixed versions are available.
0.4.0
Affected by 4 other vulnerabilities.
VCID-zsnu-88np-fyet
Aliases:
CVE-2024-24560
GHSA-gp3w-2v2m-p686
PYSEC-2024-148
Vyper is a Pythonic Smart Contract Language for the Ethereum Virtual Machine. When calls to external contracts are made, we write the input buffer starting at byte 28, and allocate the return buffer to start at byte 0 (overlapping with the input buffer). When checking RETURNDATASIZE for dynamic types, the size is compared only to the minimum allowed size for that type, and not to the returned value's length. As a result, malformed return data can cause the contract to mistake data from the input buffer for returndata. When the called contract returns invalid ABIv2 encoded data, the calling contract can read different invalid data (from the dirty buffer) than the called contract returned.
0.4.0b1
Affected by 9 other vulnerabilities.
0.4.0
Affected by 4 other vulnerabilities.
Vulnerabilities fixed by this package (1)
Vulnerability Summary Aliases
VCID-27ed-mhnf-ykgz Vyper is a Pythonic programming language that targets the Ethereum Virtual Machine (EVM). Prior to version 0.3.10, the ecrecover precompile does not fill the output buffer if the signature does not verify. However, the ecrecover builtin will still return whatever is at memory location 0. This means that the if the compiler has been convinced to write to the 0 memory location with specially crafted data (generally, this can happen with a hashmap access or immutable read) just before the ecrecover, a signature check might pass on an invalid signature. Version 0.3.10 contains a patch for this issue. CVE-2023-37902
GHSA-f5x6-7qgp-jhf3
PYSEC-2023-133

Date Actor Action Vulnerability Source VulnerableCode Version
2026-06-02T04:22:48.054966+00:00 Pypa Importer Affected by VCID-wc7x-rsqa-bkcm https://github.com/pypa/advisory-database/blob/main/vulns/vyper/PYSEC-2025-29.yaml 38.6.0
2026-06-02T04:22:47.745673+00:00 Pypa Importer Affected by VCID-djvb-mdjy-b7g5 https://github.com/pypa/advisory-database/blob/main/vulns/vyper/PYSEC-2025-30.yaml 38.6.0
2026-06-02T04:22:47.446431+00:00 Pypa Importer Affected by VCID-1r9c-w5zc-6ker https://github.com/pypa/advisory-database/blob/main/vulns/vyper/PYSEC-2025-31.yaml 38.6.0
2026-06-02T04:22:42.835762+00:00 Pypa Importer Affected by VCID-m355-31jd-1kfq https://github.com/pypa/advisory-database/blob/main/vulns/vyper/PYSEC-2025-33.yaml 38.6.0
2026-06-02T04:21:12.813207+00:00 Pypa Importer Affected by VCID-x4dz-scmh-b7dj https://github.com/pypa/advisory-database/blob/main/vulns/vyper/PYSEC-2024-209.yaml 38.6.0
2026-06-02T04:21:12.378013+00:00 Pypa Importer Affected by VCID-zkhz-ckgg-hkat https://github.com/pypa/advisory-database/blob/main/vulns/vyper/PYSEC-2024-207.yaml 38.6.0
2026-06-02T04:21:12.116951+00:00 Pypa Importer Affected by VCID-qfyr-upmm-duea https://github.com/pypa/advisory-database/blob/main/vulns/vyper/PYSEC-2024-206.yaml 38.6.0
2026-06-02T04:21:11.853436+00:00 Pypa Importer Affected by VCID-vz6u-kbjy-hkfc https://github.com/pypa/advisory-database/blob/main/vulns/vyper/PYSEC-2024-208.yaml 38.6.0
2026-06-02T04:21:11.640990+00:00 Pypa Importer Affected by VCID-pcsz-xwb8-7yh4 https://github.com/pypa/advisory-database/blob/main/vulns/vyper/PYSEC-2024-246.yaml 38.6.0
2026-06-02T04:21:01.184188+00:00 Pypa Importer Affected by VCID-wmen-dnf4-2kef https://github.com/pypa/advisory-database/blob/main/vulns/vyper/PYSEC-2024-205.yaml 38.6.0
2026-06-02T04:21:00.942739+00:00 Pypa Importer Affected by VCID-shx9-8v43-9qem https://github.com/pypa/advisory-database/blob/main/vulns/vyper/PYSEC-2024-164.yaml 38.6.0
2026-06-02T04:20:54.593553+00:00 Pypa Importer Affected by VCID-br4v-y1ka-wbh2 https://github.com/pypa/advisory-database/blob/main/vulns/vyper/PYSEC-2024-150.yaml 38.6.0
2026-06-02T04:20:52.637720+00:00 Pypa Importer Affected by VCID-x6fh-e77r-pycx https://github.com/pypa/advisory-database/blob/main/vulns/vyper/PYSEC-2024-147.yaml 38.6.0
2026-06-02T04:20:51.529942+00:00 Pypa Importer Affected by VCID-zsnu-88np-fyet https://github.com/pypa/advisory-database/blob/main/vulns/vyper/PYSEC-2024-148.yaml 38.6.0
2026-06-02T04:20:49.865946+00:00 Pypa Importer Affected by VCID-c8rf-ec8a-gybs https://github.com/pypa/advisory-database/blob/main/vulns/vyper/PYSEC-2024-149.yaml 38.6.0
2026-06-02T04:20:48.987699+00:00 Pypa Importer Affected by VCID-vchm-6wyg-83hk https://github.com/pypa/advisory-database/blob/main/vulns/vyper/PYSEC-2024-151.yaml 38.6.0
2026-06-02T04:20:36.020211+00:00 Pypa Importer Affected by VCID-cp7n-z6w9-k3bn https://github.com/pypa/advisory-database/blob/main/vulns/vyper/PYSEC-2024-103.yaml 38.6.0
2026-06-02T04:19:37.251975+00:00 Pypa Importer Affected by VCID-1q3x-5eug-afdg https://github.com/pypa/advisory-database/blob/main/vulns/vyper/PYSEC-2023-191.yaml 38.6.0
2026-06-02T04:19:35.767294+00:00 Pypa Importer Affected by VCID-h6ck-r6j1-yuhp https://github.com/pypa/advisory-database/blob/main/vulns/vyper/PYSEC-2023-306.yaml 38.6.0
2026-06-02T04:19:35.523793+00:00 Pypa Importer Affected by VCID-cpb5-3f58-5ueb https://github.com/pypa/advisory-database/blob/main/vulns/vyper/PYSEC-2023-305.yaml 38.6.0
2026-06-02T04:19:29.734657+00:00 Pypa Importer Affected by VCID-sy1y-q8ym-f3ft https://github.com/pypa/advisory-database/blob/main/vulns/vyper/PYSEC-2023-167.yaml 38.6.0
2026-06-02T04:19:29.528129+00:00 Pypa Importer Affected by VCID-7nbf-6rd9-2uap https://github.com/pypa/advisory-database/blob/main/vulns/vyper/PYSEC-2023-168.yaml 38.6.0
2026-06-02T04:19:12.012171+00:00 Pypa Importer Fixing VCID-27ed-mhnf-ykgz https://github.com/pypa/advisory-database/blob/main/vulns/vyper/PYSEC-2023-133.yaml 38.6.0