Язык Move снова столкнулся с уязвимостью: переполнение целого числа может привести к сбою узла
Недавно исследователи безопасности обнаружили новую уязвимость переполнения целого числа при глубоком анализе языка Move, что может привести к сбоям узла. Эта уязвимость присутствует в модуле проверки безопасности ссылок языка Move и связана с анализом базовых блоков и процессом объединения состояний.
Язык Move выполняет проверку кода перед выполнением байт-кода, которая делится на 4 этапа. Обнаруженная уязвимость возникла на этапе проверки безопасности (reference_safety). На этом этапе анализируются базовые блоки в функции и проверяется законность операций ссылок.
В процессе верификации будет поддерживаться структура AbstractState, содержащая локальные переменные (locals) и граф заимствований (borrow graph). При анализе базового блока будут выполняться инструкции внутри блока для генерации post state, после чего они будут объединены с pre state для обновления состояния.
Уязвимость возникает в функции join_ в состоянии слияния. Эта функция проходит по переменной locals, но locals содержит параметры функции и локальные переменные. Когда сумма количества параметров и локальных переменных превышает 256, происходит переполнение целого числа из-за использования типа u8 для итерации.
Атакующий может создать специальный циклический блок кода, использующий этот переполнение для изменения состояния. При следующем анализе некоторые инструкции могут получить доступ к несуществующим индексам locals, что приведет к панике и краху узла.
Исследователи предоставили концептуальное доказательство ( PoC ), которое может вызвать панику при втором анализе, установив 264 переменные locals. Это показывает, что язык Move недостаточно безопасен на этапе выполнения.
Этот уязвимость снова подчеркивает, что даже язык Move, акцентирующий внимание на безопасности, может иметь уязвимости. Рекомендуется разработчикам языка Move добавить больше проверок безопасности во время выполнения, а не полагаться только на статический анализ на этапе верификации. Также напоминаем разработчикам о необходимости усилить аудит кода, чтобы избежать подобных упущений.
На этой странице может содержаться сторонний контент, который предоставляется исключительно в информационных целях (не в качестве заявлений/гарантий) и не должен рассматриваться как поддержка взглядов компании Gate или как финансовый или профессиональный совет. Подробности смотрите в разделе «Отказ от ответственности» .
Уязвимость переполнения целых чисел в Move языке привела к риску崩崩 узла и привлекла следовать.
Язык Move снова столкнулся с уязвимостью: переполнение целого числа может привести к сбою узла
Недавно исследователи безопасности обнаружили новую уязвимость переполнения целого числа при глубоком анализе языка Move, что может привести к сбоям узла. Эта уязвимость присутствует в модуле проверки безопасности ссылок языка Move и связана с анализом базовых блоков и процессом объединения состояний.
Язык Move выполняет проверку кода перед выполнением байт-кода, которая делится на 4 этапа. Обнаруженная уязвимость возникла на этапе проверки безопасности (reference_safety). На этом этапе анализируются базовые блоки в функции и проверяется законность операций ссылок.
В процессе верификации будет поддерживаться структура AbstractState, содержащая локальные переменные (locals) и граф заимствований (borrow graph). При анализе базового блока будут выполняться инструкции внутри блока для генерации post state, после чего они будут объединены с pre state для обновления состояния.
Уязвимость возникает в функции join_ в состоянии слияния. Эта функция проходит по переменной locals, но locals содержит параметры функции и локальные переменные. Когда сумма количества параметров и локальных переменных превышает 256, происходит переполнение целого числа из-за использования типа u8 для итерации.
Атакующий может создать специальный циклический блок кода, использующий этот переполнение для изменения состояния. При следующем анализе некоторые инструкции могут получить доступ к несуществующим индексам locals, что приведет к панике и краху узла.
Исследователи предоставили концептуальное доказательство ( PoC ), которое может вызвать панику при втором анализе, установив 264 переменные locals. Это показывает, что язык Move недостаточно безопасен на этапе выполнения.
Этот уязвимость снова подчеркивает, что даже язык Move, акцентирующий внимание на безопасности, может иметь уязвимости. Рекомендуется разработчикам языка Move добавить больше проверок безопасности во время выполнения, а не полагаться только на статический анализ на этапе верификации. Также напоминаем разработчикам о необходимости усилить аудит кода, чтобы избежать подобных упущений.