XRP Ledger закрив десятилітній баг, який міг зламати ліміт емісії у 100 млрд токенів

Розробники XRP Ledger 9 жовтня розкрили, що помилка цілочисельного переповнення в платіжному рушії мережі дозволяла зловмиснику створювати XRP з нічого й таким чином обходити ліміт у 100 млрд токенів, встановлений при запуску реєстру у 2012 році. Вразливість закрили у випуску xrpld 3.4.1 від 25 вересня. За офіційним звітом про розкриття вразливості, RippleX не знайшла доказів, що баг колись використовували в публічній мережі. Про помилку 22 вересня повідомили дослідник Cayden Liao та Veria AI через програму bug bounty XRPL. Інженери RippleX відтворили атаку на окремому сервері, підтвердили, що новостворені XRP можна витратити в наступній транзакції, і підвищили рівень критичності знахідки з високого до критичного. Як баг міг карбувати XRP Вразливість ховалася в обробці переповнення платіжного рушія. Коли один платіж споживав багато пропозицій на вбудованій біржі реєстру, софт підсумовував заборгованість покупця 64-бітним цілочисельним додаванням без перевірки на переповнення. Кількох сотень пропозицій, кожна з яких вимагала дуже великої суми XRP, вистачало, щоб підсумок перевищив максимум 64-бітного числа й завернувся у крихітне значення. Далі кожен власник пропозиції отримував повну оплату, а з покупця списували лише завернуту суму — різниця осідала на рахунках атакуючого у вигляді свіжостворених XRP. Дві захисні перевірки мали це виявити, але не виявили. Інваріант «жодних нових XRP» підсумовує зміни чистих балансів тим самим способом, тож завертався так само й не бачив нічого підозрілого. Перевірка балансу окремого рахунку спрацьовує лише тоді, коли один рахунок тримає більше за весь обсяг емісії; атака це обходила, розподіляючи створені токени між сотнями рахунків. Чому виправлення оминуло процедуру амендментів Зміни в обробці транзакцій XRP Ledger зазвичай проходять через амендменти: нове правило залишається неактивним, доки його не підтримають понад 80% довірених валідаторів упродовж двох тижнів. RippleX свідомо оминула цю процедуру вперше за понад десять років її існування — експлойт був дешевий, не вимагав особливого доступу й міг створювати XRP, придатні для витрат. Оскільки xrpld має відкритий код, виправлення, опубліковане звичайним шляхом, тижнями лежало б на видноті й залишалося б використовним у mainnet. Такий обхід ніс окремий ризик зупинки мережі через різні версії вузлів, проте звичайні транзакції ніколи не доходять до вразливого коду. Понад 80% валідаторів зі списку default UNL працювали на версії 3.4.1 у день її випуску — ще до публікації вихідного коду. Що це означає для фіксованої пропозиції XRP Інцидент показує, наскільки цінність XRP залежить від доказової обмеженості емісії. Усі 100 млрд токенів створили при запуску, і установи, які будують на цьому реєстрі, сприймають цей ліміт як гарантію. Баг існував відтоді, як у 2015 році написали нинішній платіжний рушій, але RippleX не знайшла доказів його використання. Той самий випуск закрив і окрему ваду валідації обгортки Batch-транзакцій, яку активували в mainnet 9 жовтня. RippleX заявила, що додає до процесу релізів крок повторної перевірки: кожну знахідку, позначену як виправлену, тестуватимуть заново на кандидаті у випуск. Розкриття відбулося на тлі розширення інституційних функцій XRP Ledger — зокрема делегування дозволів для банків та стейблкоїнів, — тоді як динаміка пропозиції XRP та ескроу залишається в центрі уваги холдерів.