Reentrancy-Angriff, der Grund für die Absage des ETH-Updates

Wie bereits gestern berichtet musste das Ethereumupdate verschoben werden. Grund hierfür ist eine Sicherheitslücke, welche durch das  Constatinopleupdate geöffent werden würde. Genauer gesagt, hätten dadurch Reentrancy Angriffe durchgeführt werden können.

Mit dem Hard-Fork sollte nicht nur das Validierungsverfahren geändert, sondern auch die Transaktionsgebühren (Gas) gesenkt werden.

ReentrancyAngriff, die Theorie

Smartcontract A hat eine Funktion, welche Smartcontract B Geld sendet, also eine Transaktion ausführt.
Während die Transaktion läuft hat Smartcontract B die Chance eine neuen Funktion in Smartcontract A aufrufen, somit die Kontrolle übernehmen und weitere Transaktionen auszuführen.

Es ist für die Abwicklung von Transaktionen nötig, dass die Smartcontracts miteinander kommunizieren können. Das ändern des Speichers war theoretisch schon vor dem Update möglich, wurde aber von einem Gaslimit unterbunden.

Damit Smartcontract B weitere Transaktionen in Smartcontract A durchführen kann und schlussendlich Token stiehlt, muss Smart B Zugriff auf den Speicher von A haben.

Dies wurde vor dem Update damit unterbunden, dass solche Aktionen eine hohe Gasgebühr verlangten.
Mit dem Update jedoch wurden diese Gebühr für „storage operations“ drastisch gesenkt.

Dadurch, dass die Gasgebühren von 5000 auf 200 Gas gesenkt wurden, ist es nun zum Problem geworden, wie das Geld in einem Smartcontract aufgeteilt wird, wenn mehrere Geld erhalten sollen.

In der Theorie soll ein Smartcontract das Geld aufteilen, nach vorher festgelegten Verteilung.

Das Update macht es nun möglich, dass A den Smartcontract verändern kann und dieser nun dies aussführt, was A möchte und nun z.B. auch B 100% bezahlt.

Damit diese Lücke ausgenutzt werden kann müssen folgende Faktoren gegeben sein.

  1. Es muss eine Funktion A vorhanden sein, bei der auf ein Übertragen / Senden eine Zustandsänderungsoperation folgt. Dies kann manchmal nicht offensichtlich sein.
  2. Es muss eine vom Angreifer aus zugreifbare Funktion B vorhanden sein, die den Status ändert und deren Statusänderungen mit denen der Funktion A kollidieren.
  3. Funktion B muss mit weniger als 1600 Gas ausführbar sein.

Quelle:

https://medium.com/chainsecurity/constantinople-enables-new-reentrancy-attack-ace4088297d9