У модулі безпеки Move мови виявлено вразливість переповнення цілого числа
Нещодавно глибоке дослідження виявило нову уразливість цілочисельного переповнення в мові Move. Ця уразливість виникає під час процесу перевірки безпеки посилань і стосується деяких основних концепцій і механізмів мови Move.
Мова Move виконує перевірку коду перед виконанням байт-коду, що складається з чотирьох етапів. Ця нова виявлена уразливість виникає на етапі reference_safety. Цей етап відповідає за перевірку безпеки посилань, включаючи перевірку наявності висячих посилань, безпеку доступу до змінних посилань і безпеку доступу до глобальних зберігань посилань тощо.
Основою безпечної верифікації є аналіз базових блоків у кожній функції. Базовий блок - це послідовність коду, яка не містить жодних інструкцій гілкування, окрім вхідних і вихідних. Мова Move визначає базові блоки, проходячи через байт-код і шукаючи всі інструкції гілкування та циклу.
Під час процесу верифікації система підтримує структуру AbstractState, яка містить інформацію про граф запозичень та локальні змінні, щоб забезпечити безпеку посилань у функції. Процес верифікації виконує код базового блоку, генеруючи стан після виконання, а потім об’єднує стани до та після виконання, оновлюючи стан блоку та поширюючи його на наступні блоки.
Помилка виникає в функції join_. Коли довжина параметрів функції разом з довжиною локальних змінних перевищує 256, використання типу u8 для представлення локальних змінних може призвести до переповнення цілого числа. Хоча мова Move має механізм перевірки кількості локальних змінних, він перевіряє лише кількість локальних змінних, не враховуючи довжину параметрів.
Ця вразливість переповнення може призвести до атаки типу "відмова в обслуговуванні". Зловмисник може створити циклічний фрагмент коду, використовуючи переповнення для зміни стану блоку. Коли базовий блок виконується знову, якщо індекс, який потрібно доступити інструкцією, не існує в новій карті локальних змінних, це призведе до збою системи.
Щоб продемонструвати цей вразливість, дослідники надали концептуальне підтвердження (PoC). Налаштувавши певні параметри та кількість локальних змінних, можна викликати переповнення цілого числа, що призводить до паніки системи.
Ця уразливість показує, що навіть у ретельно спроектованих мовах можуть існувати проблеми безпеки. Вона підкреслює важливість аудитів коду та необхідність врахування більшої кількості крайових випадків у дизайні мови. Для мови Move рекомендується додати більше перевірок безпеки під час виконання, а не покладатися лише на механізми безпеки на етапі верифікації.
З розвитком мови Move у сфері Web3, глибоке дослідження та виявлення таких потенційних вразливостей є вкрай важливими для підвищення безпеки всієї екосистеми. Розробники та дослідники безпеки повинні залишатися пильними, постійно стежити за безпекою мови Move та вдосконалювати її.
Ця сторінка може містити контент третіх осіб, який надається виключно в інформаційних цілях (не в якості запевнень/гарантій) і не повинен розглядатися як схвалення його поглядів компанією Gate, а також як фінансова або професійна консультація. Див. Застереження для отримання детальної інформації.
14 лайків
Нагородити
14
9
Репост
Поділіться
Прокоментувати
0/400
GateUser-aa7df71e
· 08-19 18:48
Ще один проект має збанкрутувати, переповненість обов'язково призведе до краху.
Переглянути оригіналвідповісти на0
TokenVelocity
· 08-17 11:11
Два роки працював, щоб прогодувати всіх, втратив усе, тільки я один ношу тягар, 3000 днів мрії про підприємництво пробудилися.
Переглянути оригіналвідповісти на0
GateUser-0717ab66
· 08-16 22:28
Хто переповнить, той сволота
Переглянути оригіналвідповісти на0
ForumLurker
· 08-16 22:27
move знову щось замислює?
Переглянути оригіналвідповісти на0
TokenTaxonomist
· 08-16 22:23
статистично кажучи, ще один еволюційний мертвий кінець для move... не дивно, якщо чесно
Мова Move виявила вразливість переповнення цілих чисел у модулі безпеки, що може призвести до атаки та збоїв системи.
У модулі безпеки Move мови виявлено вразливість переповнення цілого числа
Нещодавно глибоке дослідження виявило нову уразливість цілочисельного переповнення в мові Move. Ця уразливість виникає під час процесу перевірки безпеки посилань і стосується деяких основних концепцій і механізмів мови Move.
Мова Move виконує перевірку коду перед виконанням байт-коду, що складається з чотирьох етапів. Ця нова виявлена уразливість виникає на етапі reference_safety. Цей етап відповідає за перевірку безпеки посилань, включаючи перевірку наявності висячих посилань, безпеку доступу до змінних посилань і безпеку доступу до глобальних зберігань посилань тощо.
Основою безпечної верифікації є аналіз базових блоків у кожній функції. Базовий блок - це послідовність коду, яка не містить жодних інструкцій гілкування, окрім вхідних і вихідних. Мова Move визначає базові блоки, проходячи через байт-код і шукаючи всі інструкції гілкування та циклу.
Під час процесу верифікації система підтримує структуру AbstractState, яка містить інформацію про граф запозичень та локальні змінні, щоб забезпечити безпеку посилань у функції. Процес верифікації виконує код базового блоку, генеруючи стан після виконання, а потім об’єднує стани до та після виконання, оновлюючи стан блоку та поширюючи його на наступні блоки.
Помилка виникає в функції join_. Коли довжина параметрів функції разом з довжиною локальних змінних перевищує 256, використання типу u8 для представлення локальних змінних може призвести до переповнення цілого числа. Хоча мова Move має механізм перевірки кількості локальних змінних, він перевіряє лише кількість локальних змінних, не враховуючи довжину параметрів.
Ця вразливість переповнення може призвести до атаки типу "відмова в обслуговуванні". Зловмисник може створити циклічний фрагмент коду, використовуючи переповнення для зміни стану блоку. Коли базовий блок виконується знову, якщо індекс, який потрібно доступити інструкцією, не існує в новій карті локальних змінних, це призведе до збою системи.
Щоб продемонструвати цей вразливість, дослідники надали концептуальне підтвердження (PoC). Налаштувавши певні параметри та кількість локальних змінних, можна викликати переповнення цілого числа, що призводить до паніки системи.
Ця уразливість показує, що навіть у ретельно спроектованих мовах можуть існувати проблеми безпеки. Вона підкреслює важливість аудитів коду та необхідність врахування більшої кількості крайових випадків у дизайні мови. Для мови Move рекомендується додати більше перевірок безпеки під час виконання, а не покладатися лише на механізми безпеки на етапі верифікації.
З розвитком мови Move у сфері Web3, глибоке дослідження та виявлення таких потенційних вразливостей є вкрай важливими для підвищення безпеки всієї екосистеми. Розробники та дослідники безпеки повинні залишатися пильними, постійно стежити за безпекою мови Move та вдосконалювати її.