У Move мові є вразливість, пов'язана з перевіркою безпеки, яка може призвести до переповнення цілого числа, що може викликати атаку на відмову в обслуговуванні.
У Move мові виявлено нову уразливість переповнення цілих чисел
Нещодавно було виявлено новий вразливість переповнення цілого числа в мові Move. Ця вразливість існує в процесі перевірки безпеки посилань на етапі валідації коду і може призвести до атаки відмови в обслуговуванні.
Мова Move перед виконанням байт-коду проходить перевірку коду, що складається з чотирьох етапів. Ця вразливість виникає на етапі перевірки безпеки посилань (reference_safety). Перевірка безпеки посилань головним чином перевіряє, чи існують у коді висячі посилання, чи є доступ до змінних посилань безпечним, чи є доступ до глобальних зберігань безпечним тощо.
У процесі верифікації буде проведено аналіз кожного базового блоку. Базовий блок - це послідовність коду, яка не має інструкцій гілки, окрім входу та виходу. Move визначає базові блоки, проходячи через байт-код та шукаючи інструкції гілки та циклу.
Модуль перевірки безпеки посилань сканує байт-код команди в кожному базовому блоці функції, визначаючи, чи є посилальні операції законними. Основний процес включає: виконання коду базового блоку, генерацію стану після виконання, об'єднання та оновлення стану блоку до і після виконання, а також поширення на наступні блоки.
Вразливість виникає під час процесу злиття стану. Коли сума кількості параметрів функції та кількості локальних змінних перевищує 256, через використання типу u8 для зберігання відбувається переповнення цілого числа. Це призводить до доступу до неіснуючих локальних змінних у подальшому виконанні, що викликає panic.
Зловмисник може створити циклічний базовий блок, використовуючи цей переповнення для зміни стану блоку. При повторному виконанні доступ до неіснуючого індексу локальної змінної призведе до відмови в обслуговуванні.
Ця уразливість показує, що навіть у ретельно спроектованій мові 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 для зберігання відбувається переповнення цілого числа. Це призводить до доступу до неіснуючих локальних змінних у подальшому виконанні, що викликає panic.
Зловмисник може створити циклічний базовий блок, використовуючи цей переповнення для зміни стану блоку. При повторному виконанні доступ до неіснуючого індексу локальної змінної призведе до відмови в обслуговуванні.
Ця уразливість показує, що навіть у ретельно спроектованій мові Move можуть існувати безпечні вразливості, які можуть бути обійдені. Рекомендується розробникам мови Move додати більше перевірок під час виконання, щоб запобігти подібним випадкам. У майбутньому також потрібно більше укріпити дослідження безпеки мови Move.