Виявлення критичної вразливості в коді XRP Ledger

Спеціалісти компанії Veria Labs виявили критичну вразливість у коді платіжного механізму XRP Ledger, яка існувала з 2015 року. Ця помилка загрожувала фундаментальному принципу мережі про фіксовану емісію в 100 мільярдів токенів XRP, дозволяючи додавати нові монети в обхід правил. Команда RippleX підтвердила наявність дефекту, відтворивши атаку на локальному сервері та переконавшись, що неправомірно випущені монети можна витрачати у подальших платежах. Слідів реальної експлуатації цієї вразливості в публічних мережах не знайшли.

Вразливість ґрунтувалася на цілочисельному переповненні в механізмі розрахунків вбудованої біржі. Для атаки зловмиснику потрібно було створити сотні облікових записів та виставити з них заявки на продаж невеликої кількості токенів за надмірно високі ціни. Після цього він міг відправити спеціально сформовану транзакцію, яка одночасно виконувала всі ці заявки. Через переповнення покупець сплатив би лише кілька сотень дропів і комісію, а продавці отримали б повну вартість своїх ордерів. На цій різниці зловмисник фактично отримував нові XRP, які міг переводити та продавати. Захисний механізм, що мав блокувати випуск монет, спирається на ту саму арифметику, тому не фіксував порушення. За оцінками дослідників, однієї такої транзакції могло вистачити для створення близько 18 трильйонів XRP, що в 180 разів перевищує загальну пропозицію.

Проблему виявив штучний інтелект, розроблений компанією Veria Labs. Цей агент також створив працюючий експлойт для демонстрації атаки. За знахідку Ripple виплатила Veria Labs максимальну винагороду за програмою пошуку вразливостей у розмірі 250 тисяч доларів. Дослідники називають це найбільшою відомою виплатою за баг, повністю знайдений штучним інтелектом. Команда також застосувала формальну верифікацію коду та планує розширити пошук помилок за допомогою ШІ.

Позачергове оновлення мережі після виявлення загрози

Veria Labs повідомила про проблему 22 вересня. Уже 25 вересня вийшла нова версія серверного програмного забезпечення xrpld 1 з виправленням. Через критичність загрози від стандартної процедури поправок, яка вимагає двотижневого голосування валідаторів, відмовилися. Виправлення почало діяти на кожному вузлі відразу після оновлення. Такий підхід застосували вперше за понад десять років існування системи поправок. Більше 80 відсотків валідаторів зі списку за замовчуванням встановили нову версію в день релізу.

Оновлення також усунуло окрему помилку в функції Batch, яка дозволяє об'єднувати до восьми транзакцій в одну операцію. Сервер не перевіряв, в яке поле обгорнута кожна вкладена транзакція. Це дозволяло зловмиснику записати в реєстр некорректну структуру, яка могла порушити роботу обозревачів блокчейна та індексаторів. За певних умов це могло призвести до зупинки підтвердження нових реєстрів, оскільки вузли з різними версіями програмного забезпечення обробляли б таку операцію по-різному. Оскільки на момент виявлення функція Batch ще не працювала в основній мережі, кошти користувачів не постраждали. Цю помилку усунули через стандартне голосування валідаторів. Поправка fixBatchV1_2 набрала чинності 9 жовтня. Вихідний код цього оновлення опублікували лише через приблизно два тижні.