XRP Ledger labo desmit gadus vecu kļūdu, kas ļāva «drukāt» jaunus XRP tokenus
Oficiālajā ievainojamības ziņojumā atklāts, ka maksājumu dzinēja pārplūde kopš aptuveni 2015. gada teorētiski ļāva radīt tērējamus XRP ārpus fiksētā 100 miljardu limitu; labojums izlaists septembrī, publiski atklāts 9. oktobrī.
XRP Ledger izstrādātāji piektdien, 9. oktobrī, publiskoja ievainojamības ziņojumu par kritisku kļūdu maksājumu dzinējā: ar speciāli sagatavotiem piedāvājumiem un vienu maksājumu uzbrucējs teorētiski varēja radīt jaunus, tērējamus XRP tokenus, pārkāpjot tīkla fiksēto 100 miljardu vienību limitu. RippleX norāda, ka publiskajos tīklos ekspluatācijas pazīmju nav atrasts.
Kļūda, pēc ziņojuma, pastāvējusi kopš aptuveni 2015. gada, kad tika uzrakstīts pašreizējais maksājumu dzinējs. Tā izpaudās kā veselu skaitļu pārplūde (integer overflow), summējot daudzu orderu summas. Katrs atsevišķais piedāvājums varēja būt derīgs, taču simtiem ļoti lielu XRP summu kopā pārsniedza 64 bitu skaitītāja robežu, un kopsumma «apgriezās» līdz ļoti mazam skaitlim.
Uzbrukuma shēma prasīja atvērt vairākus simtus kontu, kuros katrs piedāvātu niecīgu daudzumu kāda tokena pret ļoti lielu XRP daudzumu, un pēc tam ar vienu maksājumu «nopirkt» visus šos piedāvājumus vienlaikus. Piedāvājumu īpašnieki saņemtu pilnu XRP summu, bet pircējam tiktu ieturēta tikai «apgrieztā» maza kopsumma. Iebūvētais invariants, kas pārbauda, vai transakcija nerada jaunus XRP, izmantoja to pašu skaitīšanas veidu un tāpēc kļūdu nepamanītu.
Pētnieki Keidens Liao (Cayden Liao) un Veria AI trūkumu ziņoja caur XRPL bug bounty programmu 22. septembrī. RippleX to atveidoja lokālā serverī, apstiprināja, ka «izdrukātos» XRP var tērēt nākamajā transakcijā, un paaugstināja smaguma pakāpi līdz kritiskai. Labojums iekļauts xrpld 3.4.1 izlaidumā 25. septembrī: maksājumu dzinējs tagad pārbauda pārplūdi, un «nav jaunu XRP» pārbaude izmanto platāku skaitītāju.
Atšķirībā no parastās protokola grozījumu (amendment) procedūras labojums stājās spēkā uzreiz pēc katra servera atjaunināšanas. RippleX skaidro, ka tā ir pirmā reize vairāk nekā desmit gados, kad transakciju apstrādes izmaiņa apzināti izlaista bez divu nedēļu balsojuma, jo publiska labojuma koda rādīšana pirms aktivizācijas atstātu ekspluatējamu kļūdu atvērtu nedēļām. Vairāk nekā 80 % noklusējuma uzticamo validatoru atjauninājušies izlaišanas dienā.
Tajā pašā 3.4.1 izlaidumā labota arī otra kļūda Batch iekšējo transakciju ietvaru validācijā; attiecīgais labojuma amendment fixBatchV1_2 aktivizēts Mainnet 9. oktobrī. Oficiālais ziņojums uzsver, ka BatchV1_1 līdz labojumam Mainnet nebija aktivizēts, tāpēc līdzekļi no šīs otrās kļūdas nav cietuši. Serveru operatori aicināti uzturēt xrpld 3.4.1 vai jaunāku versiju, lai saglabātu sinhronizāciju ar tīklu.
Avoti
Rakstu sagatavojis MI, pamatojoties uz norādītajiem avotiem.

Komentāri 0
Vēl nav komentāru. Uzraksti pirmo.