CVE-2025-27104

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.
Configurations

Configuration 1 (hide)

cpe:2.3:a:vyperlang:vyper:*:*:*:*:*:python:*:*

History

28 Mar 2025, 20:05

Type Values Removed Values Added
First Time Vyperlang
Vyperlang vyper
References () https://github.com/vyperlang/vyper/pull/4488 - () https://github.com/vyperlang/vyper/pull/4488 - Issue Tracking, Patch
References () https://github.com/vyperlang/vyper/security/advisories/GHSA-h33q-mhmp-8p67 - () https://github.com/vyperlang/vyper/security/advisories/GHSA-h33q-mhmp-8p67 - Vendor Advisory, Exploit
Summary
  • (es) vyper es un lenguaje de contrato inteligente Pythonic para EVM. Es posible la evaluación múltiple de una sola expresión en el destino del iterador de un bucle for. Si bien la expresión del iterador no puede producir múltiples escrituras, puede consumir efectos secundarios producidos en el cuerpo del bucle (por ejemplo, leer una variable de almacenamiento actualizada en el cuerpo del bucle) y, por lo tanto, provocar un comportamiento inesperado del programa. Específicamente, las lecturas en iteradores que contienen una ifexp (por ejemplo, `for s: uint256 in ([read(), read()] if True else [])`) pueden intercalar lecturas con escrituras en el cuerpo del bucle. Los bucles for de Vyper permiten dos tipos de destinos de iterador, a saber, el `range()` incorporado y un tipo iterable, como SArray y DArray. Durante la generación de código, se requiere que las listas iterables no produzcan ningún efecto secundario (en el siguiente código, `range_scope` obliga a que `iter_list` se analice en un contexto constante, que se verifica con `is_constant`). Sin embargo, esto no evita que el iterador consuma los efectos secundarios proporcionados por el cuerpo del bucle. Por otro lado, para los SArrays, `iter_list` se instancia en el cuerpo de un iterador `repeat`, por lo que se puede evaluar varias veces. Este problema se está solucionando y se espera que esté disponible en la versión 0.4.1. Se recomienda a los usuarios que actualicen tan pronto como esté disponible la versión parcheada. No se conocen workarounds para esta vulnerabilidad.
CWE NVD-CWE-noinfo
CPE cpe:2.3:a:vyperlang:vyper:*:*:*:*:*:python:*:*

22 Feb 2025, 16:15

Type Values Removed Values Added
CVSS v2 : unknown
v3 : unknown
v2 : unknown
v3 : 7.5

21 Feb 2025, 22:15

Type Values Removed Values Added
New CVE

Information

Published : 2025-02-21 22:15

Updated : 2025-03-28 20:05


NVD link : CVE-2025-27104

Mitre link : CVE-2025-27104

CVE.ORG link : CVE-2025-27104


JSON object : View

Products Affected

vyperlang

  • vyper
CWE
CWE-662

Improper Synchronization

NVD-CWE-noinfo