Разработчики xrpl раскрыли и устранили критическую уязвимость платёжного движка, которая теоретически позволяла злоумышленнику создавать XRP буквально из ничего. Самое неприятное, что эта дыра пряталась в коде сети почти десять лет и никто её не замечал.
Что за баг нашли в xrpl
В пятницу команда, поддерживающая XRP Ledger, опубликовала отчёт о критической уязвимости. Её обнаружил независимый исследователь через программу bug bounty ещё в сентябре. Проблема оказалась классическим переполнением целочисленной переменной в платёжном движке - той части софта, которая отвечает за обработку транзакций.
Суть в следующем. Если один платёж "съедал" сотни специально сконструированных предложений из книги ордеров, суммарная сумма, которую должен был заплатить покупатель, превышала максимальное значение, которое система способна хранить. Число "переворачивалось" и превращалось в крошечное. В итоге каждый продавец получал оплату полностью, а покупатель платил почти ничего. Разница по сути и была новыми XRP, которых в природе существовать не должно было.
Почему встроенная защита не сработала
Самое досадное в этой истории то, что встроенная проверка ledger, которая как раз и должна была подтверждать, что ни одна транзакция не создаёт XRP из воздуха, использовала ту же самую сломанную арифметику. Она переполнялась точно так же и просто ничего не замечала.
Разработчики RippleX признали, что при удачном стечении обстоятельств атакующий мог бы создать в рамках одной транзакции объём XRP, который кратно превышает весь существующий total supply токена, а затем вывести эти монеты, обменять их или отправить на биржи.
Атакующий мог бы создать спендабл XRP далеко за пределами общего предложения токена в одной транзакции, а затем переместить, обменять или отправить его на биржи.
Десять лет незамеченной уязвимости
По словам инженеров RippleX, баг присутствовал в коде с 2015 года, то есть с момента написания текущей версии платёжного движка. Он оставался незамеченным просто потому, что ни одна обычная транзакция не создавала условий, близких к переполнению. Нужна была именно специально сконструированная атака с сотнями офферов, которую в обычной жизни никто не повторяет.
Это уже не первый подобный инцидент для сети. Ранее мы разбирали похожую историю про баг, который мог напечатать 18 триллионов XRP и был найден с помощью ИИ, а также случай, когда XRPL экстренно патчил другую уязвимость эмиссии. Складывается ощущение, что платёжный движок xrpl - место, которое регулярно требует пристального внимания аудиторов.
Как закрывали дыру и почему это было нестандартно
Команда заявила, что никаких доказательств реальной эксплуатации бага не нашлось. Патч вышел в версии 3.4.1 25 сентября, и уже в тот же день более 80% доверенных валидаторов сети работали на обновлённой версии.
Что действительно необычно, так это то, что исправление обошло стандартную процедуру amendment, при которой валидаторы сначала голосуют, а затем две недели ждут вступления изменений в силу. Это первый случай за более чем десятилетие существования системы, когда изменение логики обработки транзакций сознательно выпустили в обход этого процесса. Разработчики объяснили это тем, что серьёзность проблемы оправдывала спешку. Открытый исходный код фикса сам по себе раскрыл бы детали бага, оставив его эксплуатируемым на недели вперёд, пока валидаторы голосовали бы по обычной схеме.
Параллели с Zcash и общий контекст доверия к блокчейнам
История с xrpl напоминает недавний переполох вокруг Zcash, когда приватная монета в спешке закрывала похожую уязвимость в своём shielded pool, способную позволить подделку монет. Тогда новость обрушила курс ZEC ещё до того, как сеть выпустила обновление Ironwood и всё уладила.
Подобные истории с багами, позволяющими напечатать монеты из воздуха, в последнее время случаются слишком часто для рынка, который претендует на звание надёжной финансовой инфраструктуры. Можно вспомнить и другую громкую историю, когда XRP Ledger заплатил $250 000 за баг, который мог напечатать лишние монеты, и получил после этого скорее критику, чем похвалу за прозрачность.
Что с курсом XRP на фоне новости
Неделя для токена выдалась не самой удачной. В понедельник курс ripple держался на отметке $1.38, потеряв 1.6% за сутки, что сделало XRP худшим из крупных криптовалют по динамике дня. За семь дней актив просел на 9.4%.
Для тех, кто следит за котировками через пары вроде xrpeur или привычно сверяется с динамикой 1 ripple в рублях, неделя получилась нервной вдвойне: и технические новости давят, и рынок в целом штормит. Прогноз по ripple к доллару на этом фоне строить сложно, аналитики пока предпочитают осторожные формулировки.
Что это значит для держателей и пользователей
Важно понимать, что уязвимость закрыта и, судя по всему, никогда не использовалась против реальных пользователей. Но сам факт, что баг просуществовал в коде почти десять лет незамеченным, заставляет задуматься о том, насколько тщательно аудируется инфраструктура даже у крупных и давно существующих сетей. Для обычного держателя токена это повод лишний раз проверить, что он использует актуальный ripple кошелек, а не устаревший клиент с потенциально уязвимой логикой.
Если вы храните токены через официальный кошелек ripple или сторонние решения вроде rippex, стоит следить за обновлениями софта и не игнорировать уведомления о патчах. Та же логика касается и тех, кто тестирует сеть через xrpfaucet или занимается разработкой - компания firma ripple в лице RippleX явно намерена и дальше оперативно реагировать на находки через bug bounty, но инициатива по безопасности всегда должна исходить и от самих пользователей тоже.
Отдельно стоит упомянуть программу безопасности xrpsec, через которую исследователи сообщают о подобных находках. Именно благодаря ей баг обнаружили до того, как им успели воспользоваться во вред сети. Это хороший пример того, что открытые программы вознаграждения за найденные уязвимости работают, даже если сам процесс исправления иногда приходится ускорять в обход привычных регламентов.


