У Move мові в модулі безпеки є вразливість переповнення цілого числа
Нещодавно, фахівці з безпеки виявили серйозну уразливість переповнення цілого числа під час глибокого аналізу мови Move. Ця уразливість існує в модулі перевірки безпеки посилань і може призвести до атаки відмови в обслуговуванні. У цій статті буде детально описано принципи та наслідки цієї уразливості.
Фон вразливості
Мова Move перед виконанням байт-коду проходить перевірку коду, яка включає перевірку безпеки посилань. Цей процес ділиться на кілька етапів, а виявлена вразливість сталася на етапі перевірки reference_safety.
Основний процес перевірки безпеки полягає в:
Розділіть код на базові блоки
Аналіз кожного базового блоку
Об'єднання аналізу стану до і після
Розповсюдження результатів до наступних блоків
Для представлення стану аналізу використовується структура AbstractState, яка містить інформацію про locals та граф позик.
Деталі вразливості
Вразливість з'являється у функції join_ в статусі злиття аналізу. Ця функція використовує тип u8 для ітерації локальних змінних, але якщо сума довжини параметра та довжини локальних змінних перевищує 256, виникає переповнення цілого числа.
Конкретніше:
використовуйте self.iter_locals() для ітерації locals у join_ функції
iter_locals() повертає ітератор типу u8
Якщо довжина параметра + довжина локальної змінної > 256, ітератор переповниться
Хоча Move має процес перевірки кількості locals, він перевіряє лише кількість локальних змінних, не враховуючи довжину параметрів.
Використання вразливостей
Зловмисники можуть створити циклічний кодовий блок, використовуючи переповнення для зміни стану блоку:
Налаштуйте кількість параметрів і локальних змінних, що перевищує 256
Після першого виконання довжина нової локальної карти зменшиться через переповнення.
Повторне виконання, доступ до неіснуючого індексу locals призведе до паніки
Це може призвести до відмови в обслуговуванні вузлів.
Вплив уразливості
Ця вразливість може призвести до:
Виникла помилка валідації байт-коду Move
Вузли блокчейну, що залежать від Move, відмовляють у обслуговуванні
Обійти частину перевірок безпеки
Рекомендації щодо виправлення
Додати перевірку довжини параметрів у перевірці меж locals
Використовуйте більші цілісні типи, такі як u16, для перебору locals
Додати додаткові перевірки безпеки під час виконання
Підсумок
Ця вразливість ще раз показує, що навіть у найретельніше спроектованих мовах можуть існувати проблеми безпеки. Для мови Move рекомендується додати необхідні перевірки безпеки не тільки на етапі верифікації, але й під час виконання. Дослідники безпеки продовжать глибоко аналізувати мову Move, щоб виявити більше потенційних проблем.
Ця сторінка може містити контент третіх осіб, який надається виключно в інформаційних цілях (не в якості запевнень/гарантій) і не повинен розглядатися як схвалення його поглядів компанією Gate, а також як фінансова або професійна консультація. Див. Застереження для отримання детальної інформації.
22 лайків
Нагородити
22
6
Репост
Поділіться
Прокоментувати
0/400
BackrowObserver
· 08-11 11:51
move знову зазнав невдачі
Переглянути оригіналвідповісти на0
MidnightTrader
· 08-10 07:32
Це знову якийсь новачок написав код, я в шоці.
Переглянути оригіналвідповісти на0
MevShadowranger
· 08-10 07:30
Знову граємо з переповненням цілого числа
Переглянути оригіналвідповісти на0
WagmiOrRekt
· 08-10 07:29
Ще добре, що я раніше закрити всі позиції Move.
Переглянути оригіналвідповісти на0
CommunityWorker
· 08-10 07:27
move знову має вибухнути? Чого панікувати
Переглянути оригіналвідповісти на0
CryingOldWallet
· 08-10 07:26
Знову з'явилась вразливість? move вже не так привабливо, правда?
Уразливість цілочисельного переповнення в модулі безпеки Move може призвести до відмови в обслуговуванні Ноди
У Move мові в модулі безпеки є вразливість переповнення цілого числа
Нещодавно, фахівці з безпеки виявили серйозну уразливість переповнення цілого числа під час глибокого аналізу мови Move. Ця уразливість існує в модулі перевірки безпеки посилань і може призвести до атаки відмови в обслуговуванні. У цій статті буде детально описано принципи та наслідки цієї уразливості.
Фон вразливості
Мова Move перед виконанням байт-коду проходить перевірку коду, яка включає перевірку безпеки посилань. Цей процес ділиться на кілька етапів, а виявлена вразливість сталася на етапі перевірки reference_safety.
Основний процес перевірки безпеки полягає в:
Для представлення стану аналізу використовується структура AbstractState, яка містить інформацію про locals та граф позик.
Деталі вразливості
Вразливість з'являється у функції join_ в статусі злиття аналізу. Ця функція використовує тип u8 для ітерації локальних змінних, але якщо сума довжини параметра та довжини локальних змінних перевищує 256, виникає переповнення цілого числа.
Конкретніше:
Хоча Move має процес перевірки кількості locals, він перевіряє лише кількість локальних змінних, не враховуючи довжину параметрів.
Використання вразливостей
Зловмисники можуть створити циклічний кодовий блок, використовуючи переповнення для зміни стану блоку:
Це може призвести до відмови в обслуговуванні вузлів.
Вплив уразливості
Ця вразливість може призвести до:
Рекомендації щодо виправлення
Підсумок
Ця вразливість ще раз показує, що навіть у найретельніше спроектованих мовах можуть існувати проблеми безпеки. Для мови Move рекомендується додати необхідні перевірки безпеки не тільки на етапі верифікації, але й під час виконання. Дослідники безпеки продовжать глибоко аналізувати мову Move, щоб виявити більше потенційних проблем.