Start / Bibliothek
Referenz

Bibliothek der Smart-Contract-Schwachstellen

Jede Schwachstellenklasse erklärt, mit einem verwundbaren Beispiel und seiner korrigierten Version.

Reentrancy

Ein externer Aufruf vor der State-Aktualisierung erlaubt einem Angreifer, die Funktion erneut zu betreten, bevor die Salden verringert werden. Befolge Checks-Effects-Interactions und nutze einen Reentrancy-Guard.

// vulnerable
function withdraw(uint a) public {
  require(bal[msg.sender] >= a);
  (bool ok,) = msg.sender.call{value:a}("");
  bal[msg.sender] -= a; // too late
}
// fixed
function withdraw(uint a) public nonReentrant {
  require(bal[msg.sender] >= a);
  bal[msg.sender] -= a;                 // effects first
  (bool ok,) = msg.sender.call{value:a}("");
  require(ok);
}

Authentifizierung über tx.origin

tx.origin zur Autorisierung erlaubt einem Zwischenvertrag, im Namen des Nutzers zu handeln. Nutze msg.sender.

Oracle-/Preismanipulation

Einen Spotpreis aus einer einzigen Pool zu lesen macht ihn durch einen großen Swap manipulierbar, oft per Flash Loan finanziert. Bevorzuge einen zeitgewichteten Durchschnittspreis (TWAP) oder ein aggregiertes Oracle.

Fehlende Zugriffskontrolle

Eine sensible Funktion ohne einschränkenden Modifier kann von jedem aufgerufen werden. Sichere privilegierte Funktionen mit onlyOwner oder Rollenprüfungen.

Ungeprüfter externer Aufruf

Den Rückgabewert eines Low-Level-Calls zu ignorieren lässt den Vertrag nach einem fehlgeschlagenen Transfer weiterlaufen. Prüfe immer den zurückgegebenen Boolean.

Geschäftslogik-Fehler

Ein invertierter Vergleich oder falsche Anteilsberechnung bricht eine Invariante. Diese Fehler sind vertragsspezifisch, entgehen generischen Detektoren und sind oft die teuersten. Beschreibe das erwartete Verhalten und vergleiche es mit dem Code.

Willst du das sichere Ausnutzen üben? Siehe Lernen. Bereit, deinen Vertrag zu scannen? Scanner öffnen.

▶ Scanner öffnen