Was ist eine Re-entrancy-Attacke (Smart-Contract-Risiko)? Definition und Erklärung

Verfasst von Erik Freutel, Wirtschaftsmathematiker & aktiver Trader seit 2012

Zuletzt überprüft am 1. September 2025

Was ist eine Re-entrancy-Attacke (Smart-Contract-Risiko)? Definition und Erklärung

Re-Entrancy-Attacken (engl. Reentrancy Attacks) gehören zu den gefährlichsten Schwachstellen in Smart Contracts. Sie erlauben es Angreifern, durch wiederholte externe Funktionsaufrufe Gelder mehrfach auszuzahlen – selbst wenn das Guthaben eigentlich schon leer ist.

Stell Dir vor, Du hast ein dezentrales Bankkonto auf der Blockchain – und jemand findet einen Trick, um sich denselben Betrag immer wieder auszahlen zu lassen, bevor das System merkt, dass eigentlich nichts mehr da ist. Genau so funktioniert eine Re-Entrancy-Attacke. Was absurd klingt, ist in der Welt von Ethereum und DeFi bittere Realität. Dabei greifen Hacker gezielt Schwachstellen in schlecht geschützten Smart Contracts aus. Das perfide daran: Alles läuft technisch gesehen „korrekt“ ab – doch eine einzige falsche Reihenfolge in der Code-Logik, z. B. beim Auszahlen von Geldern, macht den Unterschied zwischen sicherem System und Millionenschaden.

In diesem Artikel zeige ich Dir, anhand eines einfachen Beispiels, wie eine Re-Entrancy-Attacke funktioniert, wo genau die Schwachstellen liegen und – ganz wichtig – wie man sich als Entwickler oder Nutzer davor schützen kann. Dazu werfen wir einen praktischen Blick in den Code, erklären Strategien wie Reentrancy Guards und führen Dich Schritt für Schritt durch gängige Sicherheitsmaßnahmen.

Das Wichtigste in Kürze

  • Eine Re-Entrancy-Attacke nutzt wiederholte externe Funktionsaufrufe eines Smart Contracts – meist über eine Fallback-Funktion – um Gelder mehrfach abzuheben, bevor eine Statusaktualisierung erfolgen kann.

  • Die Schwachstelle entsteht häufig durch eine falsche Reihenfolge im Code: Wird zuerst Ether versendet und danach der Kontostand aktualisiert, kann ein Angreifer mehrfach „re-entrancen“ und sich selbst auszahlen.

  • Schutzmechanismen wie das Checks-Effects-Interactions-Pattern oder Reentrancy Guards reduzieren das Risiko erheblich – und gehören längst zum Standardrepertoire verantwortungsvoller Smart Contract-Entwicklung.

Wie läuft eine Re-Entrancy-Attacke konkret ab?

Um das Ganze greifbarer zu machen, denken wir uns den Smart Contract „TheBank“ aus: Nutzer zahlen Geld ein und können das später wieder abheben. Klingt nach einem typischen DeFi-Szenario, oder? Doch kaum jemand schaut in den Code – bis ein smarter Angreifer, nennen wir ihn „TheAttacker“, sich das Ganze etwas genauer ansieht. Dabei entdeckt er, dass die withdraw()-Funktion zuerst Ether an den Nutzer sendet und erst danach das Guthaben reduziert. Ein klarer Fall von: Schwäche entdeckt, Tür steht offen.

Was tut TheAttacker? Genau das, was ein raffiniert vorgehender Angreifer eben macht: Er schreibt seinen eigenen Smart Contract mit einer eingebauten Fallback-Funktion. Sobald dieser Zahlung empfängt, ruft er im selben Atemzug nochmal withdraw() auf – bevor der ursprüngliche Contract checken kann, dass schon Geld weggegangen ist. Der Effekt? TheBank zahlt weiter aus, obwohl längst nichts mehr drin sein sollte. Und die Schleife läuft so lange, bis der Tank leer ist – und niemand eine Notbremse gezogen hat.

Dieses Szenario wirkt zwar wie aus einem schlechten Thriller, ist aber erschreckend real – besonders im Bereich DeFi, wo Geschwindigkeit oft wichtiger genommen wird als Sicherheit. Eine Re-Entrancy-Attacke ist dabei wie ein stiller Banküberfall: Der Alarm geht nicht los – weil technisch gesehen alles „richtig“ abläuft.

Was ist eine Re-Entrancy-Attacke im Detail?

Unter der Haube handelt es sich bei einer Re-Entrancy-Attacke um eine clevere Manipulation der Aufrufreihenfolge von Funktionen in einem Smart Contract. Ziel ist es, eine Funktion mehrfach auszuführen, bevor wichtige Statusänderungen greifen. Besonders gefährdet sind dabei Verträge, die externe Aufrufe an andere Contracts zulassen, bevor sie ihre eigene Buchhaltung erledigen.

Der Ablauf ist fast immer derselbe:

  1. Der Nutzer ruft etwa withdraw() auf.
  2. Der Contract löst eine externe Zahlung aus (meist über call.value()).
  3. Der empfangende Contract nutzt seine Möglichkeit, den ursprünglichen Contract erneut mit withdraw() anzusprechen – bevor der Kontostand aktualisiert wurde.

Das ist deshalb so gefährlich, weil Smart Contracts selbst keine Intuition haben – sie folgen nur ihrer strikten Logik. Und wenn der Code schlecht strukturiert ist, führt das dazu, dass ein und dieselbe Auszahlung mehrfach akzeptiert wird, weil der ursprüngliche Zustand – sprich: "Konto X hatte Betrag Y" – für jedes Re-Entrancy-Call noch gültig bleibt.

Gerade für Anfänger in der Smart-Contract-Entwicklung ist diese Logik oft trügerisch. Man schaut sich ein Tutorial an, kopiert ein paar Zeilen, und glaubt, damit schon „echte Blockchain-Apps“ zu bauen. Doch solange man nicht versteht, wann ein Zustand wirklich gültig ist, wird man zur leichten Beute für Angriffe wie diese.

Wie funktionieren Re-Entrancy-Attacken im Code?

Schauen wir uns ein kompakteres Beispiel an, um einmal live zu erleben, wie sich Re-Entrancy im Code manifestiert:

mapping(address => uint256) public balances;

function withdraw(uint256 _amount) public {
    require(balances[msg.sender] >= _amount);
    msg.sender.call{value: _amount}(""); // externer Call zuerst
    balances[msg.sender] -= _amount;     // Statusaktualisierung zu spät
}

Zwei fatale Entscheidungen springen sofort ins Auge:

  1. Der externe Call (msg.sender.call) wird vor der Aktualisierung des Kontostands ausgeführt.
  2. Es fehlt jeglicher Schutz – etwa ein Reentrancy-Blocker oder Mutexe.

Ein speziell programmierter Angreifer-Contract kann genau an dieser Stelle seine fallback()-Funktion einsetzen. Die fangt die Auszahlung ab, ruft erneut withdraw() auf – und schon läuft das Ding in einer Endlosschleife, bis das Guthaben leergeräumt ist.

Es gibt übrigens verschiedene Spielarten dieser Attacke:

  • Single Function Re-Entrancy: Wieder und wieder dieselbe Funktion.
  • Cross-Function-Reentrancy: Eine greift auf die andere zu, die dieselben Mittel zur Auszahlung besitzt.
  • Cross-Contract Reentrancy: Die Attacke läuft über mehrere Verträge hinweg.

Für deine eigene Sicherheit lohnt sich der Blick in Tools wie Slither, MythX oder BlockWatchdog. Sie analysieren den Code auf diese und andere Schwachstellen. Besonders für Entwickler im DeFi-Bereich ist das Pflichtprogramm.

Warum sind Re-Entrancy-Attacken so gefährlich?

Die Schwere dieser Angriffe zeigt sich nicht nur im technischen Detail, sondern auch in ihren verheerenden Auswirkungen. Man erinnert sich sofort an den legendären DAO-Hack von 2016, bei dem über 60 Millionen Dollar in Ether abgezogen wurden – durch genau diese Art der Rückruffunktion. Die Folgen? Ein Hard Fork, unzählige Diskussionen und ein herber Vertrauensverlust.

Ein paar der konkreten Risiken:

  • Finanzielle Komplettverluste: Das gesamte Kapital in einem Contract kann binnen Sekunden verschwinden.
  • Kollaps von Ökosystemen: Wenn z. B. ein DeFi-Protokoll als verlässliche Sicherheit dienen soll, wird durch so einen Angriff das gesamte System instabil.
  • Hohe Anforderungen an die Architektur: Alles muss stimmen – sonst reicht ein „vergessener“ Effekt im falschen Moment, und die Schlacht ist verloren.

Die gute Nachricht: Nach all den Rückschlägen haben Entwickler gelernt. Und zwar viel. Heute gelten verschiedene Schutzmuster als absolute Grundregeln. Sie werden in jedem ernstzunehmenden Blockchain-Kurs für Anfänger gelehrt – und das aus gutem Grund.

Wie schützt man Smart Contracts vor Re-Entrancy-Attacken?

Der Code ist das Rückgrat jeder dApp – und seine Logik entscheidet über Sicherheit oder Schaden. Zum Glück gibt es klare Strategien, um sich gegen Re-Entrancy zu wehren. Diese Schutzmuster sind mittlerweile Standard – und das sollten sie auch sein.

1. Checks-Effects-Interactions Pattern

Dieses Prinzip hat sich als unglaublich effektiv erwiesen. Man strukturiert seine Funktionen nach drei klaren Schritten:

  1. Check – Sind die Voraussetzungen erfüllt? Berechtigungen und Konsistenz prüfen.
  2. Effect – Interne Zustandsänderungen vornehmen, wie z. B. Guthaben reduzieren.
  3. Interaction – Danach (und nur dann!) erfolgt der externe Call.
function withdraw(uint _amount) public {
    require(balances[msg.sender] >= _amount);
    balances[msg.sender] -= _amount; // zuerst Effekt!
    payable(msg.sender).transfer(_amount); // dann erst Ether senden!
}

Klingt simpel – ist aber unfassbar wirksam. Schon allein durch das Umstellen dieser Zeilen wird aus einem angreifbaren Contract ein solider Schutzschild.

2. Reentrancy Guards

Der zweite Schutzschild ist ein Blocker, der Wiederholung auf Codeebene verhindert. Solche Reentrancy Guards blockieren schlicht jede neue Ausführung, solange eine andere Aktivität in derselben Funktion läuft.

Beispiel aus OpenZeppelin:

bool internal locked;

modifier noReentrancy() {
    require(!locked, "No reentrancy");
    locked = true;
    _;
    locked = false;
}

Das ist so etwas wie ein Security-Tor, das sich automatisch verriegelt, sobald jemand im Gang steht. Und es macht verdammt viel aus. Denn viele Angriffe brauchen nur Millisekunden – mit so einem Guard ist der Trader schneller als der Angreifer.

3. Sicherheits-Audits

Egal wie gut der Code scheint: Ein externer Blick erkennt Dinge, die man selbst nie bemerkt hätte. Deswegen setzen professionelle Projekte auf regelmäßige Audits – ob durch CertiK, MythX oder anderen spezialisierten Dienstleistern. Häufig entdeckt man hier nicht nur Re-Entrancy-Probleme, sondern viele kleinere Fehler, die in Summe zu großen Lücken werden können.

Was können Nutzer tun, um Risiken zu vermeiden?

Nicht nur Entwickler stehen in der Pflicht – auch Nutzer wie Du sind gefragt. Denn DeFi-Investments sind echtes Geld. Und wer heute DeFi nutzt, übernimmt auch Verantwortung für die Wahl der Plattformen.

Was Du konkret tun kannst:

  • Halte dich fern von Projekten ohne Code-Audit – auch wenn die APYs verlockend hoch klingen.
  • Schau in die Repositories: Nutzt das Projekt bekannte Schutzmuster wie „Checks-Effects-Interactions“?
  • Teste Dein Vertrauen: Frag dich ehrlich: „Würde ich diesem Code auch ohne Krypto-Hype mein Geld geben?“

Denn viele Krypto-Projekte leben vom Hype – doch Sicherheit ist immer noch Handarbeit und Wissen. Wer blind investiert, macht sich selbst zur Zielscheibe.

Gibt es Vorbilder aus anderen Märkten?

Ja, solche strukturellen Angriffe gibt es auch außerhalb der Blockchain. Etwa in der Webentwicklung: Wenn eine API mehrmals angesprochen wird, bevor die Datenbank aktualisiert wurde, kann auch dort ein „Double Spend“ passieren – beispielsweise doppelte Abbuchungen im Online-Shop.

Auch an Kryptobörsen gibt’s Parallelen. Dort nutzen Bots teils Loop-Geschwindigkeiten, um Orders mehrfach durchzujagen, bevor Preisänderungen greifen – ein Spiel mit Millisekunden. Klingt bekannt? Genau: Das ist nichts anderes als Re-Entry in Finanzform. Auch Forex-Märkte haben damit zu kämpfen, wenn etwa Stop-Loss-Latenzen ausgenutzt werden.

Die Erkenntnis? Re-Entrancy ist kein Blockchain-Phänomen. Es ist ein Logikproblem – überall da, wo Abläufe aus dem Takt geraten, bevor ihr Zustand gesichert ist.

Warum ist dieses Wissen für Anfänger so wichtig?

Viele Fehler passieren nicht, weil jemand böswillig handelt – sondern weil er es einfach nicht besser weiß. Und genau hier liegt die Gefahr für Smart Contract Anfänger. Ein Solidity-Tutorial ist in fünf Minuten gelesen, aber Sicherheit braucht Verständnis, nicht Copy+Paste.

Wer blind in Code vertraut, ohne ihn tiefgehend zu durchdringen, riskiert mehr als nur Testnet-Kleingeld. Deshalb ist es so entscheidend, dass gerade Neueinsteiger verstehen: Fehler wie Re-Entrancy sind kein „Expertenproblem“. Sie sind das erste, womit ein Angreifer rechnet.

Inside steht für genau diesen Einblick: Wir zeigen, wie Angriffe entstehen – bevor sie zuschlagen. Wissen ist hier nicht Macht. Wissen ist Schutz.

Besser einmal abgesichert als hundertmal geschädigt?

Re-Entrancy-Angriffe sind kein Fall für verschwitzte Nerds hinter sieben Monitoren. Sie sind reale Probleme – mit echten Verlusten. Wer glaubt, sein Projekt sei zu klein, um geknackt zu werden, irrt: Angreifer suchen nicht die großen Firmen, sondern die einfachen Fehler.

Ein simpler Denkfehler in der Reihenfolge, ein fehlender Guard – und schon steht der Contract offen. Kein Coin bleibt da lange drin. Deshalb: Arbeite mit Mustern. Baue bewusst sichere Architektur. Lass deinen Code prüfen – und zwar nicht nur von Dir selbst.

Bist Du Nutzer? Dann frag Dich: „Verdient dieser Contract mein Vertrauen – oder ist es nur ein Hype-Versprechen ohne Substanz?“

Der Markt wird mit der Zeit sicherer. Aber nur, wenn wir alle dazulernen – und handeln. Du. Ich. Jeder.

FAQ zum Thema Re-Entrancy-Attacke (Smart-Contract-Risiko)

Was genau ist eine Re-Entrancy-Attacke?

Eine Re-Entrancy-Attacke ist ein raffinierter Trick, bei dem ein Angreifer eine Smart-Contract-Funktion mehrfach aufruft – bevor intern der nächste logische Schritt passiert, etwa die Kontostandsänderung. Möglich wird das durch eine clevere Verwendung der fallback()-Funktion im eigenen Angreifer-Contract: Sie ruft dieselbe Funktion immer wieder zurück auf – mit jeder Auszahlung ein bisschen mehr Beute.

Woran erkenne ich solche Schwachstellen im Code?

Schau genau hin: Wenn ein Smart Contract erst Ether sendet und danach den Kontostand reduziert – ist Vorsicht geboten! Typische Red Flag: msg.sender.call{value: _amount} vor der Zeile, die das Guthaben anpasst. Ohne Reentrancy Guard ist das keine Sicherheitslücke, das ist eine Einladung.

Wie kann ich mich als Entwickler schützen?

Stichwort: „Checks-Effects-Interactions“. Programmiere immer in dieser Reihenfolge. Und baue Dir zusätzlich einen Reentrancy Guard ein – z. B. mit dem OpenZeppelin-Modifier. Lieber fünf Zeilen hinzufügen als später fünf Millionen retten müssen.

Muss ich mir als Nutzer Sorgen machen?

Klares Ja – gerade wenn Dein Geld in einem Smart Contract liegt, solltest Du nicht blind vertrauen. Schau nach Audits, öffentlichem Code, aktiver Community. Und sei besonders skeptisch bei Versprechungen hoher Renditen ohne Risikohinweis – sowas endet selten gut.

Sind alle Smart Contracts gefährdet?

Nicht zwingend alle – aber jeder einzelne, der mit Geldern arbeitet und schlecht abgesichert ist, läuft Gefahr, überlistet zu werden. Ein Angreifer braucht nicht tausend Zeilen Code – er braucht bloß die eine Zeile zur richtigen Zeit. Und die sucht er – garantiert.

Erik Freutel

Mein Name ist Erik Freutel, Gründer von InsideTrading.de. Hier schreibe ich als Börsenbegeisterter über meine Erfahrungen als Trader, Investor und Wirtschaftsmathematiker.