Nem akar ez menni a bZx-nek…

Ha esetleg nem mondana sokat a bZx neve, azon nincs mit csinálkozni, hiszen egy olyan Defi margin/lending szolgáltatóról beszélünk, ami még a nyár elején égette el sikeresen azzal a saját reputációját, hogy a flashloanok megjelenésekor egy smart contract hiba miatt több tíz ezer Etherrel károsította meg az ügyfeleit.

Egy normális világban egy ekkora fiaskó után az ilyen projekteket szokás lehúzni… de ez nyilván nem így zajlik a DeFi univerzumban. Ezt számos példa bizonyítja, lásd: YAM, Sushi vagy éppen a bZx.

Avatott szemek az alábbi kis kód diff kapcsán már egyből a fejükhöz csapnak:

A támadási trükk mindösszesen annyi volt a bZx iETH tokenjét kezelő smartcontractban, hogy amennyiben ugyanarról a címről ugyanarra a címre küldtél (_from == _to), akkor egyszerűen duplikálódott az iETH tokened anélkül, hogy ténylegesen megjelent volna mögötte az adott mennyiségű valódi ETH fedezet.

Az ügy azért igazán kellemetlen, mert a sokadik incidens után sem érezte fontosnak a bZx, hogy auditáltassa a contractját, helyette inkább élesben teszteltette az ügyfelekkel, mire valakinek feltűnt a bug és jól ki is használta:

https://twitter.com/bZxHQ/status/1305189177730891776

A bejelentést követően a DuneAnalytics csapata végzett egy post-mortem elemzést, ahol kitúrták, hogy az iETH contractban 4,7 ezer ETH-t loptak ezzel a módszerrel el összesen 9 különálló tranzakcióban.

Mondanám, hogy így utólag biztos belátja a bZx, hogy csak olcsóbb lett volna auditáltatni a kódot, de végső soron most sem a saját pénzüket herdálták el és az előző két fiaskó után sem érezték, hogy csak kéne auditáltatniuk magukat.

Ui: Akit nem hagy nyugodni, hogy mi volt a hiba a smart contractban:

  • Kiolvasta a küldő (_from) és a fogad (_to) address egyenlegét.
  • Kivonta az elküldött mennyiséget a _from egyenlegéből, majd hozzáadta a küldött mennyiséget a _to egyenlegéhez.

AHELYETT HOGY:

  • Kiolvassa a _from-ból az egyenleget.
  • Levonja belőle az elküldendő token mennyiséget
  • EZEK UTÁN olvassa ki a _to-ból az egyenleget (ezzel lehetővé téve, hogy amennyiben _from == _to, akkor frissüljön az egyenleg)
  • Hozzáadja a _to egyenlegéhez a küldött mennyiséget.

Apróság…

ETH/Parity végzetes hiba és a mancs őrjárat

Tegnap éjszaka futótűzként terjed el, hogy valami nagyon durva bug van a Parity wallet klienssel. Egészen pontosan annak multi sig smart contract részével. Amennyiben valaki korábban használt ilyen wallettel multi sig smart contractot, akkor annak a pénze lenyúlhatóvá vált.

A történetről tényleg csak annyit, hogy itt még nem érdemes kongatni a vészharangokat, ez nem az Ethereum network és pláne nen a blockchain hibája. Egyszerűen a Paritynek sikerült elrontani az implementációt, ez a kockázat sajnos mindig benne van. A Parity amúgy sem a tökéletes implementációról híres, nagyon sokat támadják pl a blockchain szinkronizációs megoldásai miatt is. Tessék használni a Mistet és a Go Ethereumot, ha már egyszer magyar vonatkozása van utóbbinak azáltal, hogy Szilágyi Péter (alias karalábé) tartja karban.

Szóval aki értetlenül állt a tegnap esti hatalmas árfolyam droppoláson, az most már értheti, hogy mi is történt. A hír bejelentését követően pánikszerűen kezdték el kimenekíteni a pénzüket a befektetők ETH-ből lényegében mindegy milyen áron. Ennek hatására egészen 185 dollárig verték le az árat, amiből folyamatosan próbál visszatérni az árfolyam, de a hírek lassú terjedése miatt késleltetve újra és újra bekövetkezik a beszakadás. Ebben a percben is éppen benézett az árfolyam egészen 208-ig.

Folytatás…