Новое открытие уязвимости переполнения целого числа в Move языке
Недавно исследователи в области безопасности обнаружили новую уязвимость переполнения целого числа при глубоком анализе языка Move. Эта уязвимость возникает в процессе проверки безопасности ссылок языка Move и может привести к сбою узлов.
Язык Move выполняет проверку кода перед выполнением байт-кода, которая делится на четыре этапа. Эта уязвимость присутствует на этапе reference_safety. Проверка безопасности ссылок в основном проверяет наличие висячих ссылок, безопасность доступа к изменяемым ссылкам, безопасность доступа к ссылкам глобального хранилища и т. д.
Процесс верификации будет анализировать каждый базовый блок. Базовый блок представляет собой последовательность кода без ветвлений, кроме входной и выходной точек. Move идентифицирует базовые блоки, обходя байт-код и ища ветвящие и циклические инструкции.
Основной процесс проверки безопасности ссылок заключается в следующем: выполнение кода для каждого блока, генерация состояния после выполнения, а затем объединение состояний до и после выполнения, обновление состояния блока и распространение его на последующие блоки. Этот процесс повторяется до тех пор, пока состояние больше не изменяется или не возникает ошибка.
Уязвимость возникает в процессе слияния состояния. Если сумма длины параметров функции и длины локальных переменных превышает 256, это приведет к переполнению типа u8. Хотя есть проверка количества локальных переменных, длина параметров не учитывается.
Использование этого переполнения может изменить состояние блока, сделав новое и старое состояния различными. При повторном выполнении базового блока обращение к индексам, которых нет в новом состоянии, приведет к сбою программы.
Исследователи представили код для концептуальной проверки, который может вызвать сбой узла из-за этой уязвимости. Это указывает на то, что даже статически типизированные языки могут иметь проблемы с безопасностью, поэтому аудит кода очень важен. Рекомендуется, чтобы язык Move добавил больше проверок безопасности во время выполнения, а не только на этапе верификации.
Обнаружение этой уязвимости еще раз подтверждает, что нет абсолютно безопасного кода. Даже в языках с жесткой типизацией могут быть уязвимости. Специалисты по безопасности продолжат углубленный анализ языка Move в поисках дополнительных потенциальных проблем.
На этой странице может содержаться сторонний контент, который предоставляется исключительно в информационных целях (не в качестве заявлений/гарантий) и не должен рассматриваться как поддержка взглядов компании Gate или как финансовый или профессиональный совет. Подробности смотрите в разделе «Отказ от ответственности» .
9 Лайков
Награда
9
7
Репост
Поделиться
комментарий
0/400
BlockchainRetirementHome
· 6ч назад
Move надо охладить?
Посмотреть ОригиналОтветить0
MemeEchoer
· 7ч назад
Снова упало, сколько раз сегодня?
Посмотреть ОригиналОтветить0
AirdropBlackHole
· 7ч назад
Эта волна горячих тем заняла свои позиции~ move снова взорвался
Обнаружена новая уязвимость переполнения целых чисел в языке Move, что может привести к сбою узла.
Новое открытие уязвимости переполнения целого числа в Move языке
Недавно исследователи в области безопасности обнаружили новую уязвимость переполнения целого числа при глубоком анализе языка Move. Эта уязвимость возникает в процессе проверки безопасности ссылок языка Move и может привести к сбою узлов.
Язык Move выполняет проверку кода перед выполнением байт-кода, которая делится на четыре этапа. Эта уязвимость присутствует на этапе reference_safety. Проверка безопасности ссылок в основном проверяет наличие висячих ссылок, безопасность доступа к изменяемым ссылкам, безопасность доступа к ссылкам глобального хранилища и т. д.
Процесс верификации будет анализировать каждый базовый блок. Базовый блок представляет собой последовательность кода без ветвлений, кроме входной и выходной точек. Move идентифицирует базовые блоки, обходя байт-код и ища ветвящие и циклические инструкции.
Основной процесс проверки безопасности ссылок заключается в следующем: выполнение кода для каждого блока, генерация состояния после выполнения, а затем объединение состояний до и после выполнения, обновление состояния блока и распространение его на последующие блоки. Этот процесс повторяется до тех пор, пока состояние больше не изменяется или не возникает ошибка.
Уязвимость возникает в процессе слияния состояния. Если сумма длины параметров функции и длины локальных переменных превышает 256, это приведет к переполнению типа u8. Хотя есть проверка количества локальных переменных, длина параметров не учитывается.
Использование этого переполнения может изменить состояние блока, сделав новое и старое состояния различными. При повторном выполнении базового блока обращение к индексам, которых нет в новом состоянии, приведет к сбою программы.
Исследователи представили код для концептуальной проверки, который может вызвать сбой узла из-за этой уязвимости. Это указывает на то, что даже статически типизированные языки могут иметь проблемы с безопасностью, поэтому аудит кода очень важен. Рекомендуется, чтобы язык Move добавил больше проверок безопасности во время выполнения, а не только на этапе верификации.
Обнаружение этой уязвимости еще раз подтверждает, что нет абсолютно безопасного кода. Даже в языках с жесткой типизацией могут быть уязвимости. Специалисты по безопасности продолжат углубленный анализ языка Move в поисках дополнительных потенциальных проблем.