CVE-2023-37902
ŚrednieCVSS 5.3Prawdopodobieństwo exploitacji (EPSS)
Niskie ryzykoPercentyl 38 - wyżej niż 38% wszystkich znanych CVE
Streszczenie
Vyper to język programowania w Pythonie, który celuje w Ethereum Virtual Machine (EVM). Przed wersją 0.3.10, prekompilacja ecrecover nie wypełniała bufora wyjściowego, jeśli podpis nie był weryfikowany, co mogło prowadzić do fałszywych wyników weryfikacji podpisu.
Ocena ryzyka
Organizacje mogą być narażone na ryzyko akceptacji nieprawidłowych podpisów, co może prowadzić do nieautoryzowanego dostępu lub manipulacji danymi. Wykorzystanie tej podatności może skutkować poważnymi konsekwencjami finansowymi i reputacyjnymi.
Rekomendacja
Zaleca się aktualizację Vyper do wersji 0.3.10 lub nowszej, aby załatać tę podatność. Dodatkowo, warto przeprowadzić audyt kodu w celu identyfikacji potencjalnych miejsc, gdzie może wystąpić ta luka.
Inne podatności w Vyper
Zobacz wszystkie- CVE-2026-114663Wysokie
Vyper w wersjach od 0.4.0b1 do 0.5.0b1 błędnie kompiluje stałe, których nie można rozwinąć, oraz pominięte argumenty domyślne z importowanych modułów, ponieważ parse_Name rozwiązuje ich nazwy w zakresie funkcji używającej, a nie w miejscu deklaracji. Gdy parametr, zmienna lokalna lub zmienna pętli kontraktu dzieli taką nazwę, dane wejściowe pod wpływem atakującego mogą zastąpić zamierzoną wartość, w tym wartości poza zakresem dla wąskich typów, takich jak uint8, psując logikę walidacji lub księgowania.
- CVE-2026-114118Średnie
W kompilatorze Vyper w wersjach 0.3.4 do 0.5.0b1 funkcja create_from_blueprint oblicza pozostały rozmiar blueprintu przez odejmowanie uint256 bez sprawdzenia, czy code_offset jest mniejszy od rozmiaru kodu. Duży offset może zawinąć się do małej wartości dodatniej.
- CVE-2026-114117Średnie
W kompilatorze Vyper w wersjach 0.3.8 do 0.5.0b1 występuje błąd optymalizatora, w którym wyrażenie (msg.value | K) lub (len(msg.data) | K) dla niezerowego K jest kompilowane do stałej 1 w gałęzi wyrażenia trójargumentowego przy -O gas lub -O codesize. Kontrakty używają błędnej wartości bez ostrzeżenia.
- CVE-2026-114116Średnie
W kompilatorze Vyper w wersjach 0.1.0b1 przed 0.1.0b17 oraz 0.4.1 do 0.5.0b1 tabela linii źródłowych jest budowana za pomocą str.splitlines(), która traktuje znaki takie jak form feed i U+2028 jako podziały linii ignorowane przez parser Pythona. Powoduje to błędną klasyfikację literałów numerycznych.
- CVE-2026-114115Niskie
Kompilator Vyper w wersjach 0.3.8 do 0.5.0b1 zawiera błąd błędnej kompilacji w parse_IfExp, który odczytuje zagnieżdżone tablice o węższych granicach wewnętrznych przy użyciu układu pamięci szerszego typu wyniku. Gdy wyrażenie trójargumentowe wybiera węższą tablicę, wewnętrzne tablice po pierwszej są odczytywane z błędnych przesunięć, powodując ciche zapisywanie uszkodzonych wartości lub wycofanie transakcji w kontraktach.
- CVE-2026-114114Średnie
W kompilatorze Vyper w wersjach 0.1.0b1 przed 0.1.0b12, 0.1.0b14 oraz 0.4.1 do 0.5.0b1 w pliku vyper/ast/parse.py mieszane są przesunięcia linii oparte na znakach z bajtami UTF-8 col_offset Pythona. Znaki wielobajtowe przesuwają wycinki źródła używane do rekonstrukcji późniejszych literałów numerycznych.
- CVE-2021-48020Średnie
Vyper od wersji 0.1.0b4 przed 0.3.0 zawiera podatność polegającą na uszkodzeniu pamięci spowodowanym nieprawidłowym wskaźnikiem szczytu stosu podczas wywołań funkcji wewnętrznych wewnątrz tablic. Kontrakty umieszczające wywołania wewnętrzne w zagnieżdżonych elementach tablic, argumentach wywołań zewnętrznych, literałach struktur lub tematach raw_log mogą mieć uszkodzoną pamięć, co prowadzi do nieprawidłowego działania kontraktu.
- CVE-2021-48019Średnie
Vyper w wersji przed 0.2.9 wdraża proxy forwarderów przez wbudowaną funkcję create_forwarder_to, która zgłasza stały rozmiar RETURNDATASIZE wynoszący 4096 bajtów zamiast rzeczywistego rozmiaru zwracanych danych. Wywołania przez te proxy mogą zwracać uszkodzone dane, gdy funkcja zwraca więcej niż 4096 bajtów bez sanityzacji danych zwrotnych, i powodują niepowodzenie ścisłych kontroli rozmiaru zwrotu, takich jak SafeERC20.safeTransfer.
- CVE-2021-48018Wysokie
Vyper od wersji 0.2.13 przed 0.2.15 przydziela sloty pamięci dla blokad reentrancyjnych @nonreentrant w tych samych lokalizacjach co zmienne przechowywania kontraktu. Gdy wywoływana jest funkcja używająca @nonreentrant, ustawienie blokady nadpisuje nakładającą się zmienną przechowywania, uszkadzając stan kontraktu i łamiąc zamierzoną logikę kontraktu.
- CVE-2020-37289Niskie
Vyper przed wersją 0.3.1 nie posiada typu uint8, co pozwala na przechowywanie wartości zwracanych przez interfejsy zadeklarowane jako uint8, takie jak ERC20.decimals(), w zmiennych uint256 bez sprawdzania granic. Złośliwe kontrakty mogą zwracać wartości większe niż 255, aby manipulować lub obejść logikę kontraktu opierającą się na tych wartościach.
Oryginalny opis (angielski, źródło NVD)
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.
Dane podatności pochodzą z NVD (NIST) · CISA KEV · EPSS

