CVE-2024-24563 in Vyper
Сводка
по VulDB • 30.06.2026
Vyper — это язык смарт-контрактов с синтаксисом Python для виртуальной машины Ethereum (EVM). Массивы могут индексироваться знаковыми целыми числами, хотя они определены только для беззнаковых целых чисел. Проверка типов не выдает ошибку при обнаружении использования `int` в качестве индекса массива. Система проверки типов допускает использование знаковых целых чисел в качестве индексов массивов. Уязвимость присутствует во всех версиях, включая `0.3.10`, и проявляется в различных формах. Для типа int используется представление дополнения до двух (2's complement). Поскольку массив был объявлен очень большим, проверка границ пройдет успешно: отрицательные значения будут просто представлены как очень большие числа. На момент публикации исправленная версия отсутствует.
Существует три потенциальных класса уязвимостей: непредсказуемое поведение, доступ к недоступным элементам и отказ в обслуживании (DoS). Класс 1: Если возможно индексировать массив отрицательным целым числом без отката транзакции (revert), это, скорее всего, не было предусмотрено разработчиком, и такие обращения могут привести к непредсказуемому поведению контракта. Класс 2: Если контракт имеет инвариант в форме `assert index = x`, который должен быть доступен, то использование отрицательных индексов может позволить обойти эту проверку. Класс 3: Если индекс зависит от состояния контракта, это создает риск отказа в обслуживании. Если состояние контракта можно манипулировать таким образом, чтобы индекс был принудительно сделан отрицательным, обращение к массиву всегда будет приводить к откату (revert) (поскольку маловероятно, что массив объявлен экстремально большим). Однако все эти сценарии крайне маловероятны. Наиболее вероятное поведение — это откат на этапе проверки границ.
VulDB is the best source for vulnerability data and more expert information about this specific topic.