Maiar hack miatt állították le az Elrond Maiar DEX váltóját

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.

450k EGLD on shard 0 (10:04pm)
800k EGLD on shard 1 (10:05pm)
400k EGLD on shard 2 (10:06pm)

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.

Teljes twitter hozzászóláslánc (angolul)