Średnia

vyper's range(start, start + N) reverts for negative numbers

  • Ujawniono: 25.04.2024
  • Aktualizacja: 11.10.2026 12:20

Summary

When looping over a range of the form range(start, start + N), if start is negative, the execution will always revert.

Details

This issue is caused by an incorrect assertion inserted by the code generation of the range (stmt.parse_For_range()):

https://github.com/vyperlang/vyper/blob/9136169468f317a53b4e7448389aa315f90b95ba/vyper/codegen/stmt.py#L286-L287

This assertion was introduced in https://github.com/vyperlang/vyper/commit/3de1415ee77a9244eb04bdb695e249d3ec9ed868 to fix https://github.com/advisories/GHSA-6r8q-pfpv-7cgj. 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.

PoC

vyper
@external
def foo():
    x:int256 = min_value(int256)
    # revert when it should not since we have the following assertion that fails:
    # [assert, [le, min_value(int256), max_value(int256) + 1 - 10]],
    for i in range(x, x + 10):
        pass

Patches

patched in v0.4.0, specifically, https://github.com/vyperlang/vyper/pull/3679 disallows this form of range().

Impact

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.

Czego dotyczy

Kliknij technologię, aby zobaczyć wszystkie dotyczące jej podatności.

PlatformaPaczkaPodatne wersjePoprawka w wersji
Python (PyPI) vyper >= 0.3.8, < 0.4.0 0.4.0

Odnośniki

Ocena CVSS 5.3/10
Wektor CVSS
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:N
Słabość (CWE)
CWE-681
Platforma
Python (PyPI)
Paczka
vyper
Ujawniono
25.04.2024
Aktualizacja
11.10.2026 12:20

Źródła i licencje

OSV / GitHub Advisory Database - PYSEC-2024-246 - PyPA Advisory Database; CC BY 4.0

OSV / GitHub Advisory Database - GHSA-ppx5-q359-pvwj - CC BY 4.0

Historia podatności: vyper

Wszystkie opisane podatności tej paczki (Python (PyPI)), od najnowszej. Widać, czy to jednorazowa wpadka, czy paczka, której trzeba pilnować.

Wszystkie (47) w archiwum
Wszystkich wpisów
47
Pierwsza → ostatnia
03.2020 10.2026
Bez poprawki
5
Wykorzystywana w atakach
0

Rozkład istotności

  • Krytyczna 3
  • Wysoka 14
  • Średnia 20
  • Niska 10

Ujawnienia w latach

  1. 2020: 1
  2. 2021: 5
  3. 2022: 4
  4. 2023: 14
  5. 2024: 14
  6. 2025: 6
  7. 2026: 3
Istotność:
  1. vyper's range(start, start + N) reverts for negative numbers ten wpis
    Średnia · 5.3 CVE-2024-32481 >= 0.3.8, < 0.4.0 0.4.0
  2. Krytyczna · 9.8 CVE-2024-24563 < 0.4.0 0.4.0
  3. Krytyczna · 9.8 CVE-2024-24561 < 0.4.0 0.4.0
  4. Wysoka · 7.3 CVE-2024-22419 >= 0.3.0, < 0.4.0 0.4.0
  5. Wysoka · 7.5 CVE-2023-46247 < 0.3.8 0.3.8
  6. Wysoka · 8.1 CVE-2023-42443 >= 0.3.4, < 0.3.10 0.3.10
  7. Krytyczna · 8.7 CVE-2023-39363 >= 0.2.15, < 0.3.1 0.3.1
  8. Wysoka · 7.5 CVE-2023-32058 < 0.3.8 0.3.8
  9. Wysoka · 7.5 CVE-2023-30837 < 0.3.8 0.3.8
  10. Wysoka · 7.5 CVE-2023-30629 >= 0.3.1, < 0.3.8 0.3.8
  11. Wysoka · 7.5 CVE-2022-29255 < 0.3.4 0.3.4
  12. Wysoka · 7.1 CVE-2022-24788 < 0.3.2 0.3.2
  13. Wysoka · 7.5 CVE-2022-24787 < 0.3.2 0.3.2
  14. Wysoka ghsa-7f92-rr6w-cq64 >= 0.2.13, < 0.2.15 0.2.15

Dowiedz się, które podatności dotyczą Twojej aplikacji

Po podłączeniu integracji DockRay i włączeniu raportowania oprogramowania DockRay porównuje zgłoszone wersje komponentów ze znanymi podatnościami i powiadamia o potwierdzonych dopasowaniach. Zakres zależy od obsługiwanej technologii i dostępnych biuletynów.

Podłącz swoją aplikację
Newsletter DockRay

Bezpieczeństwo aplikacji w Twojej skrzynce

Najważniejsze podatności, konkretne zalecenia i praktyczne wskazówki dla Twoich aplikacji. Wybierz technologie i śledź to, co ma znaczenie dla Twojego projektu.

  • Codzienne zestawienie nowych podatności, także krytycznych.
  • Powiadomienia o ważnych aktualizacjach.
  • Praktyczne porady o bezpieczeństwie i monitoringu aplikacji.

Pozostaw puste, aby otrzymywać informacje o wszystkich technologiach.

Zapis jest bezpłatny. Wypiszesz się jednym kliknięciem w wiadomości.