BSC ātrais aizdevuma uzbrukums: pankūku zaķis

2021. gada maijā mēs redzējām vairākus uzlaušanas gadījumus, kuru mērķis bija BSC DeFi preces. Konkrēti, nepilnība, kas saistīta ar atlīdzības kalšanu ienesīguma apkopotājā, Pankūku zaķī, tika izmantota ~ 7M BUNNY žetonu izkaltēšanai no pilnīgi nekā, kā rezultātā tika gūti milzīgi naudas zaudējumi 45 miljonu ASV dolāru apmērā. Pēc asiņainā uzlaušanas 3 līdzīgi uzdevumi - AutoShark, Merlin Labs un Pancake Hunny - tika uzbrukti ar salīdzināmām metodēm. Amber Group '& rsquo; Blockchain Security grupa, kuru vada DrChiachih Wu, sīkāk izstrādā nepilnību un piedāvā detalizētu pārskatu par izmantojumu, atkārtojot uzbrukumu pret pankūku zaķi.

Slēpta uzbrukuma virsma: balanceOf ()

Daudzi cilvēki domā, ka komponēšana ir svarīga DeFi panākumiem. Žetonu līgumiem (piemēram, ERC20) ir būtiska funkcija DeFi lego apakšējā slānī. Tomēr, iekļaujot ERC20 savos DeFi uzdevumos, dizaineri var ignorēt dažus nepārvaramus un neparedzamus apstākļus. Piemēram, jūs varat '& rsquo; neparedziet, kad un cik žetonu jūs saņemsiet, atgūstot esošo marķiera atlikumu. Šī neparedzamība rada slēptu uzbrukuma virsmu.

Daudzos gadījumos saprātīgos nolīgumos savos pakalpojumu pamatojumos ir norādīts ERC20 atlikums. Piemēram, kad lietotājs nodod dažus XYZ marķierus viedajā līgumā, tiek uzburts XYZ.balanceOf (), lai pārbaudītu, cik daudz naudas ir iegūts. Ja jūs & rsquo; atkārtoti iepazīstoties ar Uniswap koda bāzi, jūs, visticamāk, saprotat, ka Uniswap V2Pair līgumā ir daudz balanceOf () zvanu.

Koda bitā Uniswap V2Pair.mint () izmanto esošos atlikumus (atlikums0, atlikums1) un grāmatvedības informāciju (summa0, summa1), lai iegūtu lietotāja pārsūtītos daudzumus (summa0, summa1). Tomēr, ja slikta zvaigzne pārvieto dažas īpašības (token1 vai token2) tieši pirms naudas kaltuves () zvana, upuris piedāvā lielāku likviditāti, nekā paredzēts, ti, tiek izkalts vairāk LP marķieru. Ja ieguvumus nosaka, pamatojoties uz LP žetonu daudzumu, sliktā zvaigzne var gūt labumu, ja ieguvumi pārsniedz izdevumus.

Uniswap V2Pair.burn () ir līdzīgi draudi. Mint () funkcijas izsaucējs var sevi apdraudēt, pilnībā neizprotot iekļautos draudus. Tas notika tad, kad runa ir par pankūku zaķi.

Iegūstiet 110 USDT nākotnes bonusu pilnīgi bez maksas!

Augšējā koda bītā 140. rinda iegūst LP marķiera atlikumu, izmantojot balanceOf (), un saglabā to likviditātē. 144. – 145. Rindā tiek izmantota kopējo LP marķieru daļa, kas pieder Uniswap V2Pair (ti, likviditāte no _ totalSupply), lai iegūtu (summu0, summu1) ar esošajiem atlikumiem (atlikums0, atlikums1) no 2 īpašībām (ti, , token0 un token1). Vēlāk (summa0, summa1) no 2 īpašumiem tiek pārvietota uz adresi 148. – 149. Rindā.

Šeit slikta zvaigzne var kontrolēt (bilance0, bilance1) un likviditāti, izsūtot dažus marķierus0 + marķierus1 vai LP marķierus Uniswap V2Pair līgumā tieši pirms tiek izveidota funkcija Mint (), lai zvanītājs iegūtu vairāk marķiera0 + marķieris1 . Mēs & rsquo; Pastaigāšu pankūkas zaķa avota kodu un atklāšu, kā sliktā zvaigzne var nopelnīt, to darot.

Cilpas analīze: BunnyMinterV2

Pancake Bunny pirmkodā funkcija BunnyMinterV2.mintFor V2 () uzrauga BUNNY žetonu kalšanu kā priekšrocības. Konkrēti, kopējais līdz kalšanai (ti, mintBunny) izriet no ievades kritērijiem, _ izņemšanas maksām un _ veiktspējas maksas. Aprēķins ir saistīts ar 3 funkcijām: _ zapAs setsTo BunnyBNB () (213. rindiņa), priceCalculator.valueOfAs set () (219. rindiņa) un summuBunnyTo Mint () (221. rinda). Tā kā sliktā zvaigzne var izkalt lielu daudzumu ZAĶA, jautājums ir atkarīgs no 3 iepriekš norādītajām funkcijām.

Izlasi rakstu:  Analītiķis Džims Krāmers Ethereum sauc par “Kripto piedevu piperu”, tomēr tas netiks pievienots viņa nostājai

Ļaujiet '& rsquo; s sākas ar funkciju _ zapAs set To BunnyBNB (). Kad ievadītais rekvizīts ir aCake-LP (267. rinda), tiek izmantots īpašs LP marķieru daudzums, lai likvidētu likviditāti un izņemtu (token0, token1 daudzums) no (token0, token1) no likviditātes peldbaseina (line 278). Ar zapBSC līguma palīdzību šie īpašumi tiek pārslēgti BUNNY-BNB LP marķieriem (287. – 288. Rinda). Tad atbilstošs daudzums BUNNY-BNB LP marķieru tiek atgriezts pie zvanītāja (298. līnija). Šeit mums ir problēma.Vai daudzums atbilst LP žetonu daudzumam, kuru jūs domājat sadedzināt? (*) Izpilde

Vietnē V2Router.removeLiquidity () LP žetonu likviditāte (daudzums zapPancake setAs BunnyBNB ()) tiks izsūtīta uz Pair līgumu (500. rinda) un uzburta Pancake Pair.burn (). Pankūka esošais LP marķiera atlikums, ja Pair ir lielāks par 0, reālais sadedzināmais kopējais daudzums būtu lielāks par daudzumu, kas netieši palielina BUNNY kopējo daudzumu, līdz tiks izkalts. Pankūku problēma _ zap

Kā BunnyBNB () ir zapBSC.zapTo () izsaukums. Izrunātais pamatojums tam ir apmainīt 2 rekvizītus, ko apkopo removeLiquidity (), BUNNY-BNB LP marķieros. ZapBSC apmainās ar rekvizītiem kopš Since Swap, sliktā zvaigzne var izmantot ātros kredītus, lai kontrolētu pārslēgtā BUNNY-BNB daudzumu. Pankūka BunnyMinterV2.mint

Atpakaļ V2 (), bunnyBNBAsumma, ko atgrieza zapFor setsAs BunnyBNB () tiks ievadīts priceCalculator.valueOfTo set (), lai novērtētu vērtību, pamatojoties uz BNB (ti, vauleAs BNB), kas ir salīdzināma ar orākulu sistēmu.

Tomēr priceCalculator.valueOf set () iesaka BNB un BUNNY daudzumu (rezerves0, rezerves1) BUNNY_BNB As Pair kā izmaksu plūsmu Pankūka, kas sliktajai zvaigznei ļauj izmantot ātros kredītus, lai kontrolētu izkalto BUNNY žetonu daudzumu. summaZaķis

Mint () funkcija ir matemātikas pamata novērtējums. Ievades ieguldījums tiek palielināts par 5 (bunnyPerProfitBNB = 5e18), kuram pašam nav uzbrukuma virsmas laukuma, tomēr pastiprinājums pastiprina iepriekš norādīto vadību. Cīņa

Kopš par

Tā kā uzbrukumu aktivizē getReward (), mums ir jābūt sertificētiem attiecībā uz priekšrocībām. Iepriekš redzamajā Pankūku ekrānuzņēmumā redzamie citi var tikt parādīti, hakeris To Bunny uzburta init () funkcija, lai izmantotu līgumu, lai apmainītu 1 WBNB uz WBNB- USDT-LP žetonus un iemaksājiet tos VaultFlip

Kā Flip vienošanās tāds, ka viņš gūtu dažas priekšrocības, piesaistot getReward (). Exp iepriekš atklāts, izmantojot funkciju Sagatavot (), mēs atjaunojām vaultFlipWe Flip.deposit () zvanu (62. līnija). Tomēr tāpat izmantoja ZapBSC līgumu, lai pilnveidotu LP marķieru iegūšanu (54.-57. Rinda). Pankūka, viena nav & rsquo; nespēj saņemt pabalstus, kamēr For Zaķa turētājs uzsāk nākamo ražas () zvanu. Pankūka šo faktoru,

Zaķī hakeris nedarīja '& rsquo; t uzsāka uzbrukumu līdz pirmajam ražas novākšanas () darījumam pēc init () darījuma. Tāpēc mūsu simulācijā neviens turētājs nevar iesākt ražu ().

Rekursīvie ātrie kredīti

Līdz ar to mēs izmantojam eth-brownie funkciju, lai atdarinātu turētāju un ar roku sāktu ražas novākšanas () darījumu (25. rinda). Pankūka izmanto līdzekļus, Pankūku zaķa izmantotājs izmantoja 8 dažādus fonda peldbaseinus, kas sastāv no 7 Pāra līgumiem un Bank TubeHere Amber Group, Blockchain Security '& rsquo; s (*) grupa tikko izmantoja šādus 7 pankūku pāra līgumus '& rsquo; zibspuldzes maiņas funkcija aizdevumam 2.3 M WBNB:

Lai pilnveidotu zibspuldzes maiņas zvanus, Pancake Pair.swap () zvanu 2. ievades argumentā (4. vai 72. līnija) ielādējām 74 kritērijus: līmenis un rekvizīts. Līmeņa mainīgais parāda, kuru mijmaiņas () līmeni mēs izsaucam & rsquo; atkal iekšā; rekvizītu mainīgais ir 0 vai 1, kas norāda, ka mums ir nepieciešams iegūt token0 vai token1.

Izlasi rakstu:  VeChain Thor mainnet sasniedz 10 miljonu kvartālu atskaites punktu bez dīkstāves

Izmantojot atzvanīšanas funkciju pancakeCall (), mēs rekursīvi izsaucam Pancake Pair.swap () ar līmeni +1, līdz mēs sasniedzam septīto līmeni. Vadošajā līmenī mēs uzburam čaulas kodu (), lai veiktu patieso darbību 98. rindā. Kad shellcode () atgriežas, rekvizītu mainīgais atgriež iegūto īpašību katrā atbilstošajā līmenī (102. – 104. Rinda).

Pavelciet trigeri

Funkcija shellcode (), ko uzbur septītais pancakeCall () līmenis, ir reāla koda izmantošana. Pirmkārt, mēs saglabājam esošo WBNB atlikumu wbnbAmount (108. rinda), apmainām 15,000 112 WBNB WBNB-USDT-LP marķieros (113. rindiņa) un nosūta tos uz līgumu, kas kaldināja šos LP marķierus (ti, Pankūku pāra līgumu). XNUMX. rindā. Šīs darbības mērķis ir kontrolēt izsaukumu RemoveLiquidity () _ zapAs setsTo BunnyBNB () funkcijas iekšpusē, kā novērtēts iepriekš, ļaujot mums iegūt vairāk WBNB + USDT nekā paredzēts.

2. darbība ir kontrolēt USDT izmaksas, uz kurām atsaucas _ zapAs setsTo BunnyBNB (), lai USDT pārslēgtu uz WBNB. Tā kā _ zapAs setsTo BunnyBNB () izmanto WBNB-USDT pankūku pāri, lai pārslēgtu USDT uz WBNB, mēs varētu pārslēgt atlikušo zibatmiņā WBNB uz USDT uz Pankūku mijmaiņas. To darot, WBNB padarītu neticami lētu, un _ zapAs setsTo BunnyBNB () iegūtu nesamērīgi lielu WBNB daudzumu, ja to pārslēgtu no USDT. Ņemiet vērā, ka izmaksu kontrole šeit notiek Pancake V1 peldbaseinā, nevis Pancake V2 '& rsquo; s Pankūku pāri tāpat kā iepriekšējā darbībā.

Pēdējā darbība ir getReward () izsaukums. Pamatlīguma izsaukums var kalpot 6.9 M BUNNY žetonus (125. rinda). Pēc tam BUNNY žetonus var pārslēgt uz WBNB uz Pankūku mijmaiņas, lai atmaksātu ātro aizdevumu.

Mūsu simulācijā sliktā zvaigzne maksā 1 WBNB un uzvar 104 3.8 WBNB + 45 M USDT (salīdzināms ar ~ XNUMX miljoniem USD).

Par Amber Group

Amber Group ir vadošā starptautiskā kriptogrāfijas finansēšanas kompānija, kas darbojas visā pasaulē un pastāvīgi darbojas Honkongā, Taipejā, Seulā un Vankūverā. 2017. gadā dibinātā Amber Group apkalpo vairāk nekā 500 institucionālos klientus un faktiski ir vairāk nekā 500 miljardu ASV dolāru apmērā tirgojusi vairāk nekā 100 elektronisko ierīču. biržas, kuru īpašumos tiek pārvaldīti vairāk nekā 1.5 miljardi USD. 2021. gadā Amber Group piesaistīja 100 miljonus ASV dolāru B sērijas finansējumam un galu galā bija jaunākais FinTech vienradzis, kura vērtība pārsniedza miljardu. Lai iegūtu vairāk informācijas, lūdzu, apmeklējiet vietni: www.ambergroup.io.

Katrs tirgotājs, kurš tirgo kriptovalūtu biržā Binance, vēlas uzzināt par gaidāmo pumpmonētu vērtības noteikšana, lai īsā laikā gūtu milzīgu peļņu.
Šajā rakstā ir norādījumi par to, kā uzzināt, kad un kura monēta piedalīsies nākamajā “Pump”. Kopiena darbojas katru dienu Telegrammas kanāls Crypto Pump Signals for Binance Signāli Binance publicē 1-2 bezmaksas signālus par gaidāmo "Pump"Un ziņo par veiksmīgu"Pumps ”, ko veiksmīgi ir pabeiguši VIP kopienas organizatori.
Šie tirdzniecības signāli palīdz nopelnīt no 20% līdz 150% peļņas tikai dažu stundu laikā pēc Telegram kanālā publicēto monētu iegādes.Crypto Pump Signals for Binance Signāli Binancei ”. Vai jūs jau gūstat peļņu, izmantojot šos tirdzniecības signālus? Ja nē, tad izmēģiniet! Mēs novēlam jums veiksmi kriptovalūtas tirdzniecībā un vēlamies saņemt tādu pašu peļņu kā VIP lietotājiem Crypto Pump Signals for Binance Signāli kanālam Binance. Var redzēt piemērus Šajā lapā!
Džons Leslijs/ raksta autors

Džons Leslijs ir pieredzējis tirgotājs, kas specializējas kriptovalūtu tirgus tehniskajā analīzē un prognozēšanā. Viņam ir vairāk nekā 10 gadu pieredze ar plašu tirgu un aktīvu klāstu - valūtām, indeksiem un precēm. Džons ir populāru tēmu autors lielākajos forumos ar miljoniem skatījumu un strādā gan kā analītiķis, gan kā profesionāls tirgotājs gan klientiem, gan citiem. pats.

Atstāj atbildi