
Ein Fix für den batchOverflow-Bug https://medium.com/@peckshield/alert-new-batchoverflow-bug-in-multiple-erc20-smart-contracts-cve-2018-10299-511067db6536
Ein Fix für den batchOverflow-Bug, gefunden vom Team von PeckShield.
Der ursprüngliche Vertrag prüfte nur, ob der Absender genügend whatever hat, um den Gesamtbetrag (Eingabewert x Anzahl der Adressen) zu zahlen. Wenn ein Overflow auftritt, kann dieser Betrag null sein, was den Test in line 12 bestehen lassen würde.

Ein möglicher Fix besteht darin, einen weiteren Test hinzuzufügen, der prüft, ob das Guthaben des Absenders abzüglich des Betrags kleiner als sein aktuelles Guthaben ist. Wenn ein Overflow auftritt, wären die Guthaben gleich, was die Transaktion ungültig machen würde. Das behebt das Problem jedoch immer noch nicht. Wenn der Angreifer ein kleines Guthaben hat, sagen wir 10 whatever, könnte der Angreifer _value so konstruieren, dass es auf einen Betrag überläuft, der kleiner ist als das aktuelle Guthaben, das er derzeit hält, und damit diese Hürde passieren.
Ein besserer Fix wäre einfach zu prüfen, ob der übertragene Gesamtbetrag größer oder gleich dem _value ist. Wenn ein Overflow aufgetreten ist, würde dieser Test nicht bestehen. Um diese Hürde zu überwinden, bräuchte ein Angreifer mindestens diese magische Zahl / 20, was immer noch ein sehr großer Betrag ist und wahrscheinlich unmöglich zu erreichen ist, ohne einen anderen Bug auszunutzen.
Stelle sicher, dass du truffle installiert hast, und führe den Befehl truffle test aus dem Wurzelverzeichnis deines Projekts aus. Es sollte ungefähr so aussehen.
