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