XRP Ledger naprawia dziesięcioletni błąd płatności, który mógł doprowadzić do emisji podrobionego XRP
Najważniejsze informacje
- •Przepełnienie liczb całkowitych w silniku płatności XRP Ledger, obecne od napisania kodu w 2015 roku, mogło pozwolić atakującemu na stworzenie w jednej transakcji możliwych do wydania XRP przekraczających całkowitą podaż tokena.
- •Błąd, zgłoszony we wrześniu przez badacza w ramach programu bug bounty XRPL, ujawniał się tylko wtedy, gdy jedna płatność konsumowała setki specjalnie spreparowanych ofert z księgi zleceń, co powodowało zawinięcie należnej kwoty do znikomej wartości, podczas gdy sprzedający otrzymywali pełną zapłatę.
- •Wbudowany w księgę mechanizm bezpieczeństwa, mający zapewniać, że żadna transakcja nie wybija XRP, opierał się na tej samej wadliwej arytmetyce i zawodził po cichu razem z podatnym kodem.
- •Poprawka trafiła do wersji 3.4.1 25 września i tego samego dnia została przyjęta przez ponad 80% zaufanych walidatorów — był to pierwszy raz, gdy zmiana przetwarzania transakcji celowo ominęła dwutygodniowy proces głosowania nad poprawkami.
- •Opiekunowie nie znaleźli dowodów na wykorzystanie podatności, a ujawnienie przypomina wcześniejszy strach przed fałszerstwem związanym z błędem soundness w shielded puli Zcash.

Deweloperzy stojący za XRP Ledger ujawnili i naprawili krytyczną podatność, której nienaprawienie mogłoby pozwolić atakującemu na tworzenie XRP z niczego — wada pozostawała uśpiona w kodzie sieci przez około dekadę.
W opublikowanym w piątek raporcie opiekunowie księgi poinformowali, że we wrześniu badacz zgłosił błąd przez program bug bounty XRPL. Problemem było przepełnienie liczb całkowitych w silniku płatności, czyli komponencie oprogramowania odpowiedzialnym za przetwarzanie płatności.
Błąd arytmetyczny ujawnił się tylko w nietypowych warunkach. Gdy pojedyncza płatność konsumowała setki specjalnie spreparowanych ofert z księgi zleceń, suma należna od kupującego przekraczała maksymalną wartość, jaką system mógł przechować, i „zawijała się” do znikomej liczby. Silnik płacił każdemu sprzedającemu w pełni, ale obciążał kupującego niemal niczym, a różnica stanowiła świeżo wybity XRP, który nigdy nie powinien istnieć.
Problem pogłębiało to, że wbudowany w księgę mechanizm bezpieczeństwa — mający potwierdzać, że żadna transakcja nie tworzy XRP — opierał się na tej samej wadliwej arytmetyce. Zawijał się identycznie i niczego nie wykrywał. Według opiekunów atakujący mógł stworzyć w jednej transakcji możliwe do wydania XRP daleko wykraczające poza całkowitą podaż tokena, a następnie przenieść je, wymienić lub wysłać na giełdy. Ten mechanizm to gwarancja, na której księga opiera się, by zapewnić, że żadna transakcja nie może wybić nowego XRP — i zawiódł po cichu razem z kodem, który miał nadzorować.
Inżynierowie RippleX potwierdzili, że błąd istniał od momentu napisania obecnego silnika płatności w 2015 roku. Pozostał niezauważony, ponieważ żadna zwykła płatność nie zbliża się nawet do wywołania przepełnienia, a zespół podał, że brak dowodów na jego wykorzystanie.
Poprawka trafiła do wersji 3.4.1 25 września, a jeszcze tego samego dnia ponad 80% zaufanych walidatorów sieci ją uruchamiało. Co istotne, poprawka ominęła zwykły proces popek (amendment process) księgi, który wymaga od walidatorów głosowania i odczekania dwóch tygodni przed wejściem zmiany w życie. Był to pierwszy przypadek od wprowadzenia systemu ponad dekadę temu, gdy zmiana przetwarzania transakcji została celowo wdrożona w ten sposób. Opiekunowie uznali, że waga problemu usprawiedliwiała odstępstwo, ponieważ publikacja poprawki open-source ujawniłaby błąd, pozostawiając go przez tygodnie podatnym na wykorzystanie. Teraz, gdy wada jest jawna, każdy walidator nadal na wcześniejszej wersji ma pod ręką zarówno powód, jak i remedium — aktualizacja do 3.4.1 usuwa wadliwą arytmetykę z przetwarzania płatności na danym węźle.
To ujawnienie przywodzi na myśl strach przed fałszerstwem, który w tym roku wstrząsnął Zcash, gdy ta prywatnościowa kryptowaluta śpieszyła się z załataniem błędu soundness w swojej shielded puli, który mógł umożliwiać podrabianie monet. Tamto wydarzenie posłało ZEC na dno, zanim aktualizacja sieci o nazwie Ironwood rozwiązała problem. Oba incydenty dotyczyły tego samego rodzaju gwarancji: że zasób blockchaina nie może zostać stworzony z niczego, niezależnie od tego, jak sprytnie skonstruowano transakcję.
XRP nie przeszedł przez tydzień bez szwanku. Token był notowany po 1,38 dolara w poniedziałek, spadając o 1,6% w ciągu 24 godzin — najgorzej spośród głównych kryptowalut — i o 9,4% w ciągu ostatnich siedmiu dni.