В языке Move обнаружена уязвимость в проверках безопасности ссылок, связанная с переполнением целого числа, что может привести к атаке типа «отказ в обслуживании».
Обнаружена новая уязвимость переполнения целых чисел в языке Move
Недавно была обнаружена новая уязвимость переполнения целых чисел в языке Move. Эта уязвимость существует в процессе проверки безопасности ссылок на этапе верификации кода и может привести к атаке типа "отказ в обслуживании".
Язык Move выполняет проверку кода перед выполнением байт-кода, которая состоит из четырех этапов. Уязвимость в этот раз возникла на этапе проверки безопасности ссылок (reference_safety). Проверка безопасности ссылок в основном проверяет наличие висячих ссылок в коде, безопасность доступа к изменяемым ссылкам, безопасность доступа к глобальным хранилищам ссылок и другие проблемы.
В процессе верификации будет проводиться анализ каждого базового блока. Базовый блок — это последовательность кода, в которой нет ветвлений, кроме входа и выхода. Move идентифицирует базовые блоки, обходя байт-код и ища инструкции ветвления и цикла.
Модуль проверки безопасности ссылок будет сканировать байт-кодовые инструкции каждого базового блока в функции, чтобы определить, является ли операция ссылки законной. Основной процесс включает в себя: выполнение кода базового блока, генерацию состояния после выполнения, объединение и обновление состояния блока до и после выполнения, а также распространение на последующие блоки.
Уязвимость возникает в процессе объединения состояния. Когда сумма количества параметров функции и количества локальных переменных превышает 256, происходит переполнение целого числа из-за использования типа u8 для хранения. Это приводит к доступу к несуществующим локальным переменным в последующем выполнении, что вызывает панику.
Атакующий может создать базовый блок с циклом, используя этот переполнение для изменения состояния блока. При повторном выполнении обращение к несуществующему индексу локальной переменной приведет к отказу в обслуживании.
Этот уязвимость показывает, что даже язык Move, тщательно спроектированный, может содержать уязвимости безопасности, которые могут быть обойдены. Рекомендуется разработчикам языка Move добавить больше проверок во время выполнения, чтобы предотвратить подобные неожиданные ситуации. В будущем также необходимо усилить исследования безопасности языка Move.
This page may contain third-party content, which is provided for information purposes only (not representations/warranties) and should not be considered as an endorsement of its views by Gate, nor as financial or professional advice. See Disclaimer for details.
В языке Move обнаружена уязвимость в проверках безопасности ссылок, связанная с переполнением целого числа, что может привести к атаке типа «отказ в обслуживании».
Обнаружена новая уязвимость переполнения целых чисел в языке Move
Недавно была обнаружена новая уязвимость переполнения целых чисел в языке Move. Эта уязвимость существует в процессе проверки безопасности ссылок на этапе верификации кода и может привести к атаке типа "отказ в обслуживании".
Язык Move выполняет проверку кода перед выполнением байт-кода, которая состоит из четырех этапов. Уязвимость в этот раз возникла на этапе проверки безопасности ссылок (reference_safety). Проверка безопасности ссылок в основном проверяет наличие висячих ссылок в коде, безопасность доступа к изменяемым ссылкам, безопасность доступа к глобальным хранилищам ссылок и другие проблемы.
В процессе верификации будет проводиться анализ каждого базового блока. Базовый блок — это последовательность кода, в которой нет ветвлений, кроме входа и выхода. Move идентифицирует базовые блоки, обходя байт-код и ища инструкции ветвления и цикла.
Модуль проверки безопасности ссылок будет сканировать байт-кодовые инструкции каждого базового блока в функции, чтобы определить, является ли операция ссылки законной. Основной процесс включает в себя: выполнение кода базового блока, генерацию состояния после выполнения, объединение и обновление состояния блока до и после выполнения, а также распространение на последующие блоки.
Уязвимость возникает в процессе объединения состояния. Когда сумма количества параметров функции и количества локальных переменных превышает 256, происходит переполнение целого числа из-за использования типа u8 для хранения. Это приводит к доступу к несуществующим локальным переменным в последующем выполнении, что вызывает панику.
Атакующий может создать базовый блок с циклом, используя этот переполнение для изменения состояния блока. При повторном выполнении обращение к несуществующему индексу локальной переменной приведет к отказу в обслуживании.
Этот уязвимость показывает, что даже язык Move, тщательно спроектированный, может содержать уязвимости безопасности, которые могут быть обойдены. Рекомендуется разработчикам языка Move добавить больше проверок во время выполнения, чтобы предотвратить подобные неожиданные ситуации. В будущем также необходимо усилить исследования безопасности языка Move.