Az Elrond (EGLD) vezérigazgatója, Beniamin Mincu június 5-én Twitter-üzenetet írt a Maiar DEX-en történt gyanús tevékenységekről.
Kivizsgáljuk a szokatlan tranzakciókat melyek a Maiar DEX váltón jelentek meg
Itt vagyunk, teljes készültésgben.
Frissítünk amint az elemzéseket tisztán látjuk.
Mi történt?
A WEGLD hack Arda magyarázsatában
Június 5-én 22:04 UTC-kor egy hacker 1650000 EGLD-t lopott el.
Gratulálunk az Elrond csapatának, amely megállás nélkül dolgozott és sikeresen visszaszerezte az összes pénzt.
De honnan lopta el a hacker az EGLD-t? És hogyan?
Itt az ideje a teljes magyarázatnak⬇️
A hack összefoglalása
A hacker az okos szerződés be/kicsomagoló metódusát kihasználva EGLD utalásokat csomagolt be WEGLD-ba. Ezt a “wrap_egld_callback” nevű metódust 3 részletben utalta kiami a becsomagolt Elrond(WEGLD) okosszerződéséből származott.
Összefoglalva, a hacker két szerződést kötött (SC A és SC B):
-Este 22:01-kor a hacker meghívja az SC A-t. SC A meghívja a WEGLD SC-t, amely néhány EGLD-t becsomagol, és visszahívja az SC A „wrap_egld_callback” metódusát.
-Este 22:05-kor meghívja az SC B „visszavonási” módszerét, és 800k EGLD-t kap.
A hack részletes lépései
technikai leírás
Este 10 órakkor 3 számláról 3 okosszerződés vont ki nagyobb mennyiséű EGLD-ot ami úgy tűnt, hogy a semmiből érkezett.
A fenti tx-ben azt látjuk, hogy a hacker úgy kapott EGLD-t, hogy “meghívta” az SC (Smart Contract) “visszavonás” metódusát.
Letöltöttük ennek az SC-nek a bináris kódját az Explorerből, és átkonvertáltuk egy könnyebben érthető formátumba (WAT formátumba).
Megtaláltuk a “visszavonás” metódust, de ami még fontosabb, a “wrap_egld_callback” nevű metódust.
Ez arra utal, hogy a hatalmas mennyiségű ellopott EGLD a WEGLD SC-től származott (ami az EGLD csomagolásáért/kicsomagolásáért felelős).
Az exploreren 22 óra körül a WEGLD SC-n átmenő gyanús tx-ekre vadásztunk.
Találtunk egyet, ahol a WEGLD SC egy új SC módszerét nevezte el. És találd ki… ennek a módszernek a neve “wrap_egld_callback”.
Szóval megnéztük ennek a tx-nek a részleteit.
Ebben a tx-ben az új SC kis mennyiségű EGLD-t küld a WEGLD SC “wrapEgld” metódusának. Ez a metódus visszaküldi a WEGLD-t az új SC “wrap_egld_callback” metódusának.
Valójában a “wrapEgld” meghívásakor megadhatjuk, hogy a WEGLD SC milyen metódussal hívja vissza.
Összefoglalva, a hacker két szerződést kötött (SC A és SC B):
-Este 22:01-kor a hacker meghívja az SC A-t. SC A meghívja a WEGLD SC-t, amely néhány EGLD-t becsomagol, és visszahívja az SC A „wrap_egld_callback” metódusát.
-Este 22:05-kor meghívja az SC B „visszavonási” módszerét, és 800k EGLD-t kap.
A „wrap_egld_callback” metódus kódját megvizsgálva 2 érdekességet fedeztünk fel (vö. képernyőkép):
- Úgy tűnik, hogy a „800000”-es összeg határozza meg az átutalandó EGLD összegét.
- Ezután a „managedExecuteOnDestContextByCaller” metódus átviszi az EGLD-t a WEGLD SC-ből.
A találgatások igazolására két adattárat készítettünk:
- az egyiket a hacker reprodukálására a hacker bináris kódjával,
- a másikat, hogy reprodukálja a hacket a saját Rust SC-val.
Mindkét esetben sikerült elérni, hogy a WEGLD SC 800k EGLD-t küldjön egy általunk választott címre.
A “managedExecuteOnDestContextByCaller” volt a feltörés kulcsfontosságú összetevője.
Ahogy a neve is sugallja, amikor a WEGLD SC meghívja az SC A-t, lehetővé teszi az SC A számára, hogy token átvitelt hajtson végre a hívó WEGLD SC kontextusában.
Így az SC A képes volt arra, hogy a WEGLD SC 800k EGLD-t küldjön SC B-nek.
Gratulálunk, ha végig olvastad: megértehetted a hack részleteit!
Ha úgy tűnt, hogy a hacker által visszavont EGLD a semmiből jött, az azért van, mert a „managedExecuteOnDestContextByCaller” használatával kerültek átvitelre, amelyet az Explorer nem jelenített meg.