У Move мові знову виявлено критичну уразливість: переповнення цілого числа може призвести до краху Ноди
Нещодавно, дослідники безпеки провели глибокий аналіз мови Move і виявили нову уразливість переповнення цілого числа. Ця уразливість виникає під час процесу перевірки безпеки посилань мови Move і може призвести до краху Ноди.
Мова Move перед виконанням байт-коду проходить перевірку коду, яка складається з чотирьох етапів. Виявлена уразливість існує на етапі reference_safety. Цей етап головним чином призначений для перевірки безпеки посилань, включаючи перевірку на наявність висячих посилань, чи безпечний доступ до змінних посилань тощо.
Активація вразливостей пов'язана з концепцією базового блоку в мові Move. Базовий блок - це послідовність коду, яка не містить інструкцій розгалуження, окрім входу та виходу. Move ідентифікує базові блоки, проходячи через байт-код і шукаючи інструкції розгалуження.
У процесі перевірки безпеки система сканує байт-код інструкцій у кожному базовому блоці, щоб визначити, чи є всі операції посиланнями легітимними. Цей процес використовує структуру AbstractState, яка містить два важливі компоненти: borrow graph та locals.
Вразливість виникає в функції join_. Коли сума довжини параметрів і довжини локальних змінних перевищує 256, через використання типу u8 для представлення локального індексу може статися переповнення цілого числа. Хоча в Move є механізм перевірки кількості locals, але довжина параметрів не враховується.
Використовуючи цю уразливість переповнення, зловмисник може створити циклічний кодовий блок, що змінює стан блоку. Коли базовий блок виконується знову, якщо індекс, до якого потрібно отримати доступ у інструкції, не існує в новій карті локальних змінних, це призведе до збою програми.
Дослідники надали підтвердження концепції (PoC) коду, що демонструє, як активувати цю вразливість. Налаштувавши певні параметри та кількість локальних змінних, можна зменшити довжину locals map до 8. Під час наступного виконання спроба доступу до неіснуючого індексу 57 призведе до паніки.
Ця вразливість ще раз доводить, що не існує абсолютно безпечного коду. Хоча мова Move проходить статичну перевірку перед виконанням, вона все ще може бути обійдена через переповнення цілих чисел. Дослідники рекомендують розробникам мови Move додати більше перевірок коду під час виконання, щоб запобігти виникненню подібних проблем.
Наразі дослідницька команда виявила ще одну вразливість мови Move, про що буде подано більше деталей пізніше. Ці знахідки мають важливе значення для вдосконалення безпеки мови Move.
Ця сторінка може містити контент третіх осіб, який надається виключно в інформаційних цілях (не в якості запевнень/гарантій) і не повинен розглядатися як схвалення його поглядів компанією Gate, а також як фінансова або професійна консультація. Див. Застереження для отримання детальної інформації.
12 лайків
Нагородити
12
4
Поділіться
Прокоментувати
0/400
PositionPhobia
· 16год тому
Скільки тут пасток у цьому коді, пройде один, то й добре.
Уразливість переповнення цілого числа в Move мові: посилання на перевірку безпеки несе ризик
У Move мові знову виявлено критичну уразливість: переповнення цілого числа може призвести до краху Ноди
Нещодавно, дослідники безпеки провели глибокий аналіз мови Move і виявили нову уразливість переповнення цілого числа. Ця уразливість виникає під час процесу перевірки безпеки посилань мови Move і може призвести до краху Ноди.
Мова Move перед виконанням байт-коду проходить перевірку коду, яка складається з чотирьох етапів. Виявлена уразливість існує на етапі reference_safety. Цей етап головним чином призначений для перевірки безпеки посилань, включаючи перевірку на наявність висячих посилань, чи безпечний доступ до змінних посилань тощо.
Активація вразливостей пов'язана з концепцією базового блоку в мові Move. Базовий блок - це послідовність коду, яка не містить інструкцій розгалуження, окрім входу та виходу. Move ідентифікує базові блоки, проходячи через байт-код і шукаючи інструкції розгалуження.
У процесі перевірки безпеки система сканує байт-код інструкцій у кожному базовому блоці, щоб визначити, чи є всі операції посиланнями легітимними. Цей процес використовує структуру AbstractState, яка містить два важливі компоненти: borrow graph та locals.
Вразливість виникає в функції join_. Коли сума довжини параметрів і довжини локальних змінних перевищує 256, через використання типу u8 для представлення локального індексу може статися переповнення цілого числа. Хоча в Move є механізм перевірки кількості locals, але довжина параметрів не враховується.
Використовуючи цю уразливість переповнення, зловмисник може створити циклічний кодовий блок, що змінює стан блоку. Коли базовий блок виконується знову, якщо індекс, до якого потрібно отримати доступ у інструкції, не існує в новій карті локальних змінних, це призведе до збою програми.
Дослідники надали підтвердження концепції (PoC) коду, що демонструє, як активувати цю вразливість. Налаштувавши певні параметри та кількість локальних змінних, можна зменшити довжину locals map до 8. Під час наступного виконання спроба доступу до неіснуючого індексу 57 призведе до паніки.
Ця вразливість ще раз доводить, що не існує абсолютно безпечного коду. Хоча мова Move проходить статичну перевірку перед виконанням, вона все ще може бути обійдена через переповнення цілих чисел. Дослідники рекомендують розробникам мови Move додати більше перевірок коду під час виконання, щоб запобігти виникненню подібних проблем.
Наразі дослідницька команда виявила ще одну вразливість мови Move, про що буде подано більше деталей пізніше. Ці знахідки мають важливе значення для вдосконалення безпеки мови Move.