Umgang mit dem Kurzadressenangriff

Ich schreibe einen Vertrag für einen ERC20-Token, basierend auf Zepellin-Verträgen. Mir ist aufgefallen, dass ihr Code den Kurzadressenangriff nicht behandelt. Heißt das, ich sollte mich nicht darum kümmern?

AFAIK, Sie sollten sicher sein, solange Sie eine aktualisierte Version von web3.js verwenden (dieser Exploit befindet sich im Wesentlichen auf der Off-Chain-Seite, in einer ziemlich alten Version von web3.js).

Antworten (3)

Darüber gab es eine Diskussion .

Der Hauptgrund ist, dass es sich um eine Schwachstelle anderer Verträge und nicht um den Token selbst handelt. Es ist ihre Aufgabe, alle Argumente zu prüfen. Also ja, Sie sollten sich als Token-Entwickler nicht darum kümmern, aber als Vertragsentwickler).

Wenn beispielsweise eine Börse direkt mit dem Code des Token-Vertrags interagiert, soll ich davon ausgehen, dass sie sich darum kümmert?
Aus meiner Sicht gibt es keinen Grund, die Verantwortung anderer zu übernehmen. Sie können nicht jeden davor schützen, in ein Knie zu schießen.
@ulu: Ich denke, diese Art von Fehler ist auf das Honeypot-Level gefallen: Ich meine, es ist unwahrscheinlich, dass Sie einen Austausch mit einem Volumen von über 1000 $ pro Tag finden, der immer noch anfällig wäre (obwohl es Ihre selbstbelohnende Übung wäre, einen winzigen zu versuchen Scheck gegen jeden Eintrag in dieser Liste abheben ).

Seit Solidity v0.5.0 ist es nicht mehr notwendig. Aus dem Changelog :

Code-Generator: Zur Laufzeit zurückkehren, wenn calldata zu kurz ist oder außerhalb der Grenzen liegt. Dies geschieht innerhalb des ABI-Decoders und gilt daher auch für abi.decode().

Das Ausführen einer Funktion mit weniger als erforderlich lässt die Transaktion fehlschlagen. Obwohl Sie mehr Daten senden können und es funktioniert, werden die zusätzlichen Daten ignoriert.

Der Kurzadressenangriff ist ein Problem auf Benutzeroberflächenebene.

Es sollte nicht auf der Smart-Contract-Ebene angegangen werden.

Der Angriff auf Kurzadressen wird auf der Ebene der Benutzeroberfläche abgemildert, indem verlangt wird, dass alle Adressen Prüfsummen-Ethereum-Adressen sind:

https://github.com/ethereum/EIPs/blob/master/EIPS/eip-55.md

Wenn die Benutzeroberfläche Ihrer (unbenannten) Multisig-Implementierung die Gültigkeit der Ethereum-Adresse korrekt überprüft, ist sie sicher.