У Move знову виявлено небезпечну уразливість: переповнення цілих чисел може призвести до краху Ноди
Нещодавно, фахівці з безпеки під час глибокого аналізу мови Move виявили новий вразливість переповнення цілого числа, що може призвести до краху ноди. Ця вразливість існує в модулі перевірки безпеки посилань мови Move і стосується аналізу базових блоків та процесу злиття станів.
Мова Move виконує перевірку коду перед виконанням байт-коду, що складається з 4 етапів. Виявлена вразливість виникає на етапі перевірки посилань безпеки (reference_safety). Цей етап аналізує базові блоки в функції та перевіряє законність посилальних операцій.
Під час верифікації буде підтримуватись структура AbstractState, що містить локальні змінні (locals) та граф позик (borrow graph). Під час аналізу базових блоків буде виконуватись генерація post state для інструкцій у блоці, а потім їх об'єднання з pre state для оновлення стану.
Вразливість виникає в функції join_, що перебуває в стані злиття. Ця функція перебирає змінну locals, але locals містить параметри функції та локальні змінні. Коли сума кількості параметрів і кількості локальних змінних перевищує 256, через використання типу u8 для ітерації може статися переповнення цілого числа.
Зловмисник може створити спеціальні циклічні блоки коду, використовуючи цей переповнення для зміни стану. Під час наступного аналізу деякі інструкції можуть звертатися до неіснуючих локальних індексів, що призводить до паніки і викликає крах Ноди.
Дослідники представили концепт валідації (PoC), налаштувавши 264 локальні змінні, які можуть викликати паніку під час другого етапу аналізу. Це виявляє недостатню кількість перевірок безпеки в Move мові під час виконання.
Ця вразливість ще раз доводить, що навіть мова Move, яка підкреслює безпеку, може мати вразливості. Рекомендується, щоб розробники мови Move додали більше перевірок безпеки під час виконання, а не покладалися лише на статичний аналіз на етапі верифікації. Також нагадуємо розробникам про необхідність посилення аудиту коду, щоб уникнути подібних недоліків.
Ця сторінка може містити контент третіх осіб, який надається виключно в інформаційних цілях (не в якості запевнень/гарантій) і не повинен розглядатися як схвалення його поглядів компанією Gate, а також як фінансова або професійна консультація. Див. Застереження для отримання детальної інформації.
9 лайків
Нагородити
9
5
Репост
Поділіться
Прокоментувати
0/400
SmartContractPhobia
· 08-02 02:38
move провалився, оригінал теж провалився
Переглянути оригіналвідповісти на0
CoconutWaterBoy
· 07-30 03:38
move знову підвів, давно вже варто було поміняти
Переглянути оригіналвідповісти на0
SchrodingerWallet
· 07-30 03:36
move знову провалився.
Переглянути оригіналвідповісти на0
0xDreamChaser
· 07-30 03:34
move знову обвалився? Випуску не вистачає швидкості.
У Move мові виявлено вразливість переповнення цілих чисел, що викликає ризик краху Ноди, на який підписатися.
У Move знову виявлено небезпечну уразливість: переповнення цілих чисел може призвести до краху Ноди
Нещодавно, фахівці з безпеки під час глибокого аналізу мови Move виявили новий вразливість переповнення цілого числа, що може призвести до краху ноди. Ця вразливість існує в модулі перевірки безпеки посилань мови Move і стосується аналізу базових блоків та процесу злиття станів.
Мова Move виконує перевірку коду перед виконанням байт-коду, що складається з 4 етапів. Виявлена вразливість виникає на етапі перевірки посилань безпеки (reference_safety). Цей етап аналізує базові блоки в функції та перевіряє законність посилальних операцій.
Під час верифікації буде підтримуватись структура AbstractState, що містить локальні змінні (locals) та граф позик (borrow graph). Під час аналізу базових блоків буде виконуватись генерація post state для інструкцій у блоці, а потім їх об'єднання з pre state для оновлення стану.
Вразливість виникає в функції join_, що перебуває в стані злиття. Ця функція перебирає змінну locals, але locals містить параметри функції та локальні змінні. Коли сума кількості параметрів і кількості локальних змінних перевищує 256, через використання типу u8 для ітерації може статися переповнення цілого числа.
Зловмисник може створити спеціальні циклічні блоки коду, використовуючи цей переповнення для зміни стану. Під час наступного аналізу деякі інструкції можуть звертатися до неіснуючих локальних індексів, що призводить до паніки і викликає крах Ноди.
Дослідники представили концепт валідації (PoC), налаштувавши 264 локальні змінні, які можуть викликати паніку під час другого етапу аналізу. Це виявляє недостатню кількість перевірок безпеки в Move мові під час виконання.
Ця вразливість ще раз доводить, що навіть мова Move, яка підкреслює безпеку, може мати вразливості. Рекомендується, щоб розробники мови Move додали більше перевірок безпеки під час виконання, а не покладалися лише на статичний аналіз на етапі верифікації. Також нагадуємо розробникам про необхідність посилення аудиту коду, щоб уникнути подібних недоліків.