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…

INLOCK - ezúttal legyél Te a Bank!
Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *