XRP Ledger исправил баг десятилетней давности, который мог нарушить лимит предложения в 100 млрд XRP

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