У Move мові виявлено новий дефект переповнення цілого числа
Нещодавно дослідники безпеки виявили новий вразливість переповнення цілих чисел під час детального аналізу мови Move. Ця вразливість виникає в процесі перевірки безпеки посилань мови Move і може призвести до аварії вузлів.
Мова Move перед виконанням байт-коду проходить перевірку коду, яка складається з чотирьох етапів. Ця уразливість існує на етапі reference_safety. Перевірка безпеки посилань головним чином перевіряє, чи існують висячі посилання, чи є доступ до змінних посилань безпечним, чи є доступ до глобальних зберігань посилань безпечним тощо.
Процес верифікації аналізує кожен базовий блок. Базовий блок – це послідовність коду без умовних переходів, за винятком входу та виходу. Move ідентифікує базові блоки, перебираючи байт-код, шукаючи умовні переходи та циклічні команди.
Основний процес перевірки безпеки посилань: виконати код для кожного блоку, згенерувати стан після виконання, потім об'єднати початковий і кінцевий стан, оновити стан блоку та поширити його на наступні блоки. Цей процес повторюється, поки стан більше не змінюється або не виникає помилка.
Вразливість виникає під час процесу злиття. Якщо довжина параметрів функції разом з довжиною локальних змінних перевищує 256, це призводить до переповнення типу u8. Хоча є перевірка кількості локальних змінних, але довжина параметрів не враховується.
Використовуючи цей переповнення, можна змінити стан блоку, зробивши новий і старий стан різними. Коли базовий блок виконується знову, доступ до індексу, якого немає в новому стані, призведе до аварії програми.
Дослідники представили код для концептуальної перевірки, який може спровокувати цю уразливість, що призводить до збоїв вузлів. Це свідчить про те, що навіть статично типізовані мови можуть мати проблеми безпеки, тому аудит коду є важливим. Рекомендується, щоб мова Move додала більше перевірок безпеки під час виконання, а не лише на етапі валідації.
Виявлення цього вразливості ще раз підтверджує, що немає абсолютно безпечного коду. Навіть у мовах з суворою типізацією можуть бути вразливості. Дослідники безпеки продовжать поглиблений аналіз мови Move, шукаючи більше потенційних проблем.
Ця сторінка може містити контент третіх осіб, який надається виключно в інформаційних цілях (не в якості запевнень/гарантій) і не повинен розглядатися як схвалення його поглядів компанією Gate, а також як фінансова або професійна консультація. Див. Застереження для отримання детальної інформації.
9 лайків
Нагородити
9
7
Репост
Поділіться
Прокоментувати
0/400
BlockchainRetirementHome
· 11год тому
Чи потрібно зупинити Move?
Переглянути оригіналвідповісти на0
MemeEchoer
· 11год тому
Знову впав, сьогодні вже скільки разів?
Переглянути оригіналвідповісти на0
AirdropBlackHole
· 11год тому
Ця хвиля гарячих новин зайняла позицію~ move знову вибухнув
Виявлено нову вразливість переповнення цілого числа в мові Move, що може призвести до краху Ноди.
У Move мові виявлено новий дефект переповнення цілого числа
Нещодавно дослідники безпеки виявили новий вразливість переповнення цілих чисел під час детального аналізу мови Move. Ця вразливість виникає в процесі перевірки безпеки посилань мови Move і може призвести до аварії вузлів.
Мова Move перед виконанням байт-коду проходить перевірку коду, яка складається з чотирьох етапів. Ця уразливість існує на етапі reference_safety. Перевірка безпеки посилань головним чином перевіряє, чи існують висячі посилання, чи є доступ до змінних посилань безпечним, чи є доступ до глобальних зберігань посилань безпечним тощо.
Процес верифікації аналізує кожен базовий блок. Базовий блок – це послідовність коду без умовних переходів, за винятком входу та виходу. Move ідентифікує базові блоки, перебираючи байт-код, шукаючи умовні переходи та циклічні команди.
Основний процес перевірки безпеки посилань: виконати код для кожного блоку, згенерувати стан після виконання, потім об'єднати початковий і кінцевий стан, оновити стан блоку та поширити його на наступні блоки. Цей процес повторюється, поки стан більше не змінюється або не виникає помилка.
Вразливість виникає під час процесу злиття. Якщо довжина параметрів функції разом з довжиною локальних змінних перевищує 256, це призводить до переповнення типу u8. Хоча є перевірка кількості локальних змінних, але довжина параметрів не враховується.
Використовуючи цей переповнення, можна змінити стан блоку, зробивши новий і старий стан різними. Коли базовий блок виконується знову, доступ до індексу, якого немає в новому стані, призведе до аварії програми.
Дослідники представили код для концептуальної перевірки, який може спровокувати цю уразливість, що призводить до збоїв вузлів. Це свідчить про те, що навіть статично типізовані мови можуть мати проблеми безпеки, тому аудит коду є важливим. Рекомендується, щоб мова Move додала більше перевірок безпеки під час виконання, а не лише на етапі валідації.
Виявлення цього вразливості ще раз підтверджує, що немає абсолютно безпечного коду. Навіть у мовах з суворою типізацією можуть бути вразливості. Дослідники безпеки продовжать поглиблений аналіз мови Move, шукаючи більше потенційних проблем.