Urrg, schon wieder: Bug in Parities Multisig-Contract friert eine halbe bis eine ganze Million Ether ein

Frozen. Bild von Marcus Raltner via flickr.com. Lizenz: Creative Commons

Der Blitz schlägt nicht zweimal an derselben Stelle ein? Von wegen. Ein Bug im Multisig-Contract von Parity hat Ethereum-User im Juli 30 Millionen Dollar gekostet. Nun wiederholt sich die Geschichte: Ein neuer Bug friert Ether im Wert von schätzungsweise 100 bis 250 Millionen Euro ein.

Wie so oft bei Ethereum ist es nicht ganz einfach, nachzuvollziehen, was eben geschehen ist. Parity kündigt auf dem Blog einen kritischen Bug an. Eine Schwäche im “Parity Wallet Library Contract des Standard Multi-Sig Contracts” wurde gefunden. Alle User, die Assets in einer mit Parity ab dem 20. Juli generierten Multisig-Wallet hatten, sind betroffen.

Die genauere Erklärung hört sich abenteuerlich an: Es war möglich, den Library Contract in eine gewöhnliche Multisig-Wallet zu verwandeln und sich zu deren Besitzer zu ernennen. Ein User hat dies versehentlich gemacht und danach die Suicide (Selbstmord) Funktion aktiviert. Damit wurde der Code in der Library vollständig gelöscht, was alle Multisig-Contracts, die mithilfe dieses Libraries erstellt worden sind, unbrauchbar gemacht hat.

Mit anderen Worten: Alles, was in diesen Contracts gespeichert wurde, kann nicht mehr bewegt werden. Wie viel dies ist, ist gegenwärtig noch nicht ganz klar. Eine Liste geht von rund 500.000 Ether aus, in sozialen Medien ist von einer Million die Rede. Laut Parity sind die gegenwärtig zirkulierenden Zahlen aber noch nicht bestätigt. Auch die von Parity für Polkadot eingesammelten Guthaben sind unter den Verlusten.

Wie, was, warum ist das geschehen? Die Erklärung ist relativ kühn. Christoph Jentzsch von Slock.it hat mir per twitter geholfen, zu verstehen, was passiert ist (auf die Twitter-Konversation klicken!).

Mit Solidity kann man auf der Ethereum-Blockchain Contracts anlegen. Einer dieser Contract ist ein Multisig-Contract, der es ermöglicht, dass mehrere Parteien eine Transaktion signieren müssen, damit diese gesendet werden kann. Dank der Flexibilität von Ethereum hat man bei der Konstruktion dieser Verträge sehr viel mehr Spielraum als bei Bitcoin. Der Standard-Contract von Geth beispielsweise ermöglicht es, eine Schwelle der täglichen Auszahlung festzulegen, und erst wenn diese überschritten wird, muss eine Transaktion von einer zweiten Partei signiert werden.

Soweit so gut. Die Wallet Parity hat nun für ihren Standard Multisig-Contract einen Library Contract angelegt. Wie andere Software-Libraries dient diese als Abkürzung für Anwendungen, um nicht jeden Schritt des Codes selbst durchgehen zu müssen. An sich eine sinnvolle Sache. Nur hat Parity diese Library selbst zu einem Contract auf der Ethereum Blockchain gemacht. Wie alle Contracts hat auch dieser einen State.

Das Problem war nun, dass der Contract einen Bug hatte. Dieser ermöglichte es an sich jedem beliebigen User, sich mit einer bestimmten Funktion zum Besitzer des Contracts zu machen, und als solcher ermächtigt zu sein, den State des Contracts zu ändern. Dies geschah durch den User devops199, angeblich versehentlich. Das war der erste Teil der Katastrophe.

Der zweite baut darauf auf, dass in Ethereum Contracts eine “Suicide” Funktion haben: Sie können sich selbst löschen. Dies ist praktisch, wenn ein Contract einen Bug hat oder einfach nur unnötig wird, und man die Blockchain reinigen möchte. Es kann jedoch auch verheerende Folgen haben. Devops199 hat kurzerhand – angeblich aus Spaß oder Neugier – die Suicide-Funktion auf den Parity-Multisig-Library-Contract angewandt. Er hat damit den kompletten State des Contracts weggewischt.

Die Folge war: Die Library wurde gelöscht. Es dauerte ein wenig, bis den Usern klar wurde, was das bedeutet: Der Multisig-Contract in Parity hat zwar weiterhin einen unveränderten State. Die Guthaben sind noch vollständig da. Allerdings kann er keinerlei Funktion mehr ausführen, so wie ein normales Programm keine Funktion mehr ausführen kann, wenn die betreffende Library gelöscht ist. Alle Guthaben, die auf diesem Contract gespeichert worden sind, sowohl Ether als auch Token, sind eingefroren.

Die einzige Möglichkeit, die Guthaben zu retten, wäre eine Bergungs-Hardfork. Ob dies möglich sein wird, ohne einen ernsthaften Reputationsschaden für Ethereum zu nehmen, ist schwer zu sagen. Einige in der Community plädieren dafür, andere dagegen.

About Christoph Bergmann (1136 Articles)
Das Bitcoinblog wird von bitcoin.de gesponsort, ist inhaltlich aber unabhängig und gibt die Meinung des Redakteurs Christoph Bergmann wieder. Wenn Ihnen das Blog gefällt, freuen wir uns über Spenden an 1BvayiASVCmGmg4WUJmyRHoNevWWo5snqC. Jeder Satoshi wird dazu verwendet, um das Blog besser zu machen. Weitere Infos, wie Sie uns unterstützen können, finden Sie HIER. Gastbeiträge sind ebenfalls willkommen. Meinen öffentlichen PGP-Schlüssel sowie den Bitmessage-Schlüssel finden Sie HIER

25 Comments on Urrg, schon wieder: Bug in Parities Multisig-Contract friert eine halbe bis eine ganze Million Ether ein

  1. Danke für die schnelle und verständliche Erklärung!

  2. Ich bin Schuld, denn ich habe gerade meine letzten BCH gegen ETH getauscht um beim Neufund-ICBM mitzumachen.

  3. Klar, man kann mit einer unbedachten Aktion gleichzeitig alle mit einem für jeden benutzbaren Contract erstellten Wallets unbrauchbar machen. Logisch…
    Wer denkt sich denn so eine Architektur aus? Hier fragt man sich schon, ob es in der ETH-Community kein Peer-Review von solchen sicherheitskritischen Features gibt?

  4. Grundsätzlich ist die Idee der Siucide-Funktion Quatsch. Ein Suicide macht nur die Ausführung eines Contract unmöglich, spart aber keinen Platz auf der Blockchain oder hat sonstige Vorteile. Es gibt bessere Wege einen Contract zu deaktivieren. Es wir imho sogar empfohlen Suicide nicht zu nutzen. Das zeigt aber mal wieder das Problem, dass viele Leute ungeprüft irgendwelche zusammengefrickelte Software verlassen. Paritätisch sollte jetzt erst mal einen Teil ihrer Ether in belegbare Software-Reviews geben. Mannmann….was eineNullnummer

  5. Ironie des Schicksals, wie Christoph Jentzsch und das eleminieren von Millionen via ETH immer wieder aufeinandertreffen.

  6. Name required // 8. November 2017 at 1:28 // Reply

    ETH ist NICHT die Zukunft, wie viele meinen. Es ziegt vielmehr, wie man es NICHT machen sollte.

    Es gibt in der Vergangenheit viele Beispiele, wie Technik gehypt wurde, aber sie sich nicht durchgestzt hat, weil sie einfach zu komplex war, um im normalen Leben Eingang zu finden.

    Der einfache Bürger hat ja schon Probleme, Bitcoin zu verstehen. Ethereum ist daher – wenn nicht wirklich noch eine “Killer-App” gefunden wird – zum Scheitern verurteilt. Allein schon wegen der vollgestopften Blockchain aber eben auch und vielleicht noch mehr wegen der enormen Risiken, die in einer zu komplexen Technik schlummern, wie man auch hier wieder sieht.

  7. Noch vor kurzem las ich Nachrichten über Ethereum, weil ich Ethereum verstehen wollte, weil ich Hoffnungen in Ethereum setzte. Jetzt lese ich Nachrichten über Ethereum, weil sie unschlagbar amüsant sind.

    Kann man ERC20-Token auch mit einer Selbstzerstörungsfunktion ausstatten? Das wäre für die Schuldner nämlich sehr praktisch.

    Allerdings halte ich Ethereum nicht für zu komplex, schließlich gibt es Monero, das noch viel komplexer ist, obwohl Monero nicht mehr als Anonymität bietet.
    乱馬

    • Sorry für das Off-Topic, aber nicht ich bin vom Thema abgewichen…
      Monero ist nicht komplex, sondern baut durchgehend auf jahrelang verfügbaren und getesteten kryptographischen Funktionen auf. Eine Art Smart Contracts werden durchgehend von allen mir bekannten Monero Entwicklern abgelehnt, da sie eben zu komplex sind und Komplexität der größte Feind der Sicherheit ist. In einem Open Source Projekt wie Monero gibt es regelmäßige Dev Meetings, Peer Reviews, Code Audits etc. und Code wird nur freigegeben, wenn er getestet und für sicher befunden wurde. Bugs können sich selbst dabei einschleichen und haben sich bereits eingeschlichen, wurden aber zum Glück gefixt, bevor sie ausgenutzt wurden. “Nicht mehr als Anonymität” ist stark vereinfacht, denn ich glaube es gibt kaum jemanden, der seine Kontoauszüge für jeden veröffentlichen wollte, was er effektiv mit jeder anderen aktuell verfügbaren Blockchain (meist unbewusst) tut. Fungibilität, die außer Monero nur Bargeld (und in Teilen Gold) bietet ist auch nur mit der Privatsphäre Moneros zu erreichen und für ein Zahlungsmittel essentiell.
      Ich behaupte, dass ich im Stande bin, jede Funktion von Monero zu erklären, falls konkrete Fragen bestehen. Auch gerne als Gastbeitrag hier…

      Mich konnte Ethereum aus diesem Grund auch nie überzeugen, weil ich es nie komplett verstanden habe. Aus finanzieller Sicht hätte ich damals besser “Augen zu und durch” sagen sollen, aber das wäre gegen meine Prinzipien gewesen.
      Das größte Problem ist die Komplexität, in der jeder kleine Entwickler “Smart” Contracts programmieren kann, die wie hier eine verheerende Auswirkung haben können, aber durch die Finalität einer Blockchain nicht mehr gefixt werden können (es sei denn, man bricht die Regeln der Blockchain). Meistens werden dabei keine Peer Reviews und Code Audits durchgeführt und das Resultat sind schwerwiegende Bugs wie dieser.
      Bei der DAO hat man eine Hard Fork durchgeführt, damals waren aber deutlich mehr Ether im Umlauf betroffen… (In Prozent der Marktkapitalisierung)
      DAO hack (2016) – $55M (14%)
      Multisig hack (Juli) – $30M (0.15%)
      Multisig nuke (heute) – $100M-$250M (voraussichtlich 0.3%-1%)
      Ab welcher Quote rettet man Ether, die von einem Bug betroffen sind und wer entscheidet das am Ende?

      • “Ab welcher Quote rettet man Ether, die von einem Bug betroffen sind und wer entscheidet das am Ende?”
        Bei Ether gibt es PoV (Proof of Vitalik) 😉

  8. ETH ist mir nicht so geläufig, aber der Weg über die privaten Keys sollte doch für betroffene Parity Benutzer eine Hintertür bieten. Die wenigen € die die Hardwarewallets kosten sind wohl eine Investition wert.

  9. …andererseits wirft das Ganze grundsätzliche Fragen der Softwareentwicklung und Test auf. Es ist ja nicht so, dass Ethereum die einzige Software ist, die durch Bugs richtig viel Geld verbrannt hat. Wobei hier das Geld ja noch nicht mal weg ist und es durch einen relativ unstrittigen Hardfork wieder verfügbar wäre.
    Ich finde Ethereum erzwingt einen dringend notwendigen Lernprozess: Wie kann man den Prozess zur Erstellung von Software absichern, dass solche Probleme vermieden werden.
    Ohne den “Druck” von jeweils mehreren 100 Millionen Dollar würde Konzepte wie die mathematische formale Codevalidierung nicht in der aktuellen Form vorangetrieben.

    • Name required // 8. November 2017 at 13:47 // Reply

      Die Frage ist, WER am Ende für die Unfähigkeit der Programmierer haftet. Wenn jedesmal Coins normaler Nutzer im Wert von mehreren hundert Miliionen Dollar unbenutzbar werden, weil sie sich auf die Entwickler verlassen haben, dann fällt irgendwann das Vertrauen in diese Währung gegen Null. Und damit auch der Wert. Denn Vertrauen ist bei einer Währung alles. Smart Contracts sind dagegen nur Gimmicks, die eigentlich in einem Coin nix zu suchen haben, da sie die Sicherheit mehr als nötig bedrohen.

    • Name required // 8. November 2017 at 13:53 // Reply

      … ach ja: Eine Hardfork führt dazu, dass wieder ein neuer Coin entsteht bzw. durch einen Rollback auf den Stand VOR dem Problem die zwischenzeitlich erfolgten Transaktionen ungültig werden. Wieso sollte man das gutheißen? Besser, man schafft die Smart Contracts ab, um dem Problem zu begegnen. Aber Vitalik Buterin wird selbstverständlich niemals zugeben, dass das ganze Unsinn ist und einfach nur ein Experiment, was eben den Nutzer im Zweifel viel Geld kosten kann. Genauso wie Google “not evil” ist …

    • Auch bei Codegenerierung/-validierung geht der Trend mehr und mehr zu AI. Wird noch ein Weilchen dauern, aber ich tippe mal irgendwann im nächsten Jahrzehnt werden hauptsächlich AI’s nach Codeschwachstellen suchen.

  10. 07/Nov/2017 @VitalikButerin on brink of second bailout for dumb contracts

    hehe… ich brauche mehr Popcorn! 😀

  11. …der arme Vitalik, der wird vermutlich zur Zeit ganz schön unter Druck sein. Möchte nicht in seiner Haut stecken.

    • Name required // 8. November 2017 at 15:42 // Reply

      Würde er es wie Stratis (STRAT) machen und Sidechains anbieten, könnte er sich da ‘raushalten, da die Verantwortlichen dann die Betreiber der Sidechains wären.

      So ist er wirklich in einer extremen Zwickmühle und seine Glaubwürdigkeit – und noch mehr die von Ethereum – steht auf der Kippe. Entweder diejenigen, die durch den Bug das Geld verloren haben, bleiben auf dem Schaden sitzen, oder diejenigen, die seit dem Zeitpunkt Transaktionen durchgeführt haben (z.B. Börsen, die für eingetauschte Coins andere oder Fiat ausgezahlt haben), welche das natürlich ebenfalls nicht wollen werden.

      Ethereum ist einfach ein extrem experimenteller Coin und es ist niemandem zu raten, in diesen zu investieren, wenn er nicht sehr risikofreudig ist und sich dessen nicht bewußt. Denn durch die Smart Contracts ist einfach eine zu große Unbekannte im System, welche sich im Zweifel leider auf alle Nutzer auswirkt.

      • Ich halte es mittlerweile für ausgeschlossen, dass noch geforkt wird, wenn das zwingend mit einer Rückabwicklung von allem bis zum betreffenden Zeitpunkt verbunden wäre. Mit jeder Stunde wird es unwahrscheinlicher, da mehr Tx von einer Rückabwicklung betroffen wären.
        Aber prinzipiell sollte es doch auch möglich sein, nur die entscheidende Stelle zu tilgen oder nicht? (Im Gegensatz zur DAO-Hardfork konnte ab dem Zeitpunkt ja nichts weiteres mit den betreffenden Tokens getan werden)

        Davon abgesehen, ist das ETH-Team imho nicht verantwortlich zu machen, sondern allein die Parity-Entwickler.

  12. Ethereum versteht sich NICHT als ein Altcoin, der zufällig auch mit Smart Contracts experimentiert. Ethereum versteht sich als die Blockchain FÜR SMART CONTRACTS. Der Ethercoin dient dabei nur als Anreiz für die Node-Betreiber, um diese dazu zu bringen, Nodes zu betreiben. Vom Konzept her ist das schon genial. Die Umsetzung ist jedoch typisch für Software. Ich habe auch manchmal Ideen, die meine Fähigkeiten übersteigen, aber in den Fällen halte ich mich zurück und werfe nicht irgendetwas auf den Markt.
    乱馬

    • Guter Kommentar! Ja, Ethereum versteht sich als dezentraler Supercomputer und ETH waren gar nicht als Zahlungsmittel gedacht, sondern nur um Node Betreiber für die Verrichtete Arbeit in Form von Rechenzyklen zu entlohnen.
      Ethereum an sich ist auch ziemlich solide, nachdem etliche Kinderkrankheiten ausgebessert wurden, die vor allem für Node Betreiber ein Problem waren weil sie ihnen sehr viel Rechenleistung für wenig Entlohnung entbehrt haben. Das Problem ist vielmehr die Komplexität des Systems, die einzelne Programmierer nicht richtig erfassen können…

  13. Was hast du denn schon auf den Markt gebracht?
    Ich will sagen: Etwas so weit zu bekommen zählt mehr als ob es sich dort lange hält. Und wer investiert ohne das Risiko zu überblicken, der ist da eben falsch.
    Ich finde es gut mehr Spielzeug zu haben und noch besser, dass es genug Menschen gibt, die ihr Geld in diese Entwicklung investieren. Denn wenn das niemand tut, wird daraus eben auch nichts.

    • Wenn Du mich meinst, habe ich das größte Diskussionsforum in Polen aufgebaut und betreibe es nun seit 13 Jahren. Ein paar andere mehr oder minder erfolgreiche Startups habe ich auch schon gegründet… Nicht, dass ich denke, das wäre von Bedeutung, aber wenn Du danach fragst…
      In der Kryptowelt befinde ich mich nach mehreren Jahren noch in der Lernphase, aber die Kurve ebbt ab und ich bin mir ziemlich sicher, mein nächstes Projekt, welches ich veröffentliche wird in Richtung Crypto gehen. Du kannst Dir sicher sein, ich teste viel im Hintergrund, bevor ich etwas auf die Menschheit loslasse. Wenn es soweit ist, wirst Du hoffentlich hier davon lesen können und eine konstruktive Kritik ablassen 😉

  14. @Paul Janowitz
    Die Funktionsweise von Monero würde mich sehr interessieren! Ich wollte mich schon lange damit auseinandersetzen jedoch sind die meisten Beiträge entweder „es gibt mehrere Signaturen, Punkt“ oder in Fachchinesisch verfasst.
    Ich denke ein deutschsprachiger, technisch sehr tiefgreifender Beitrag fehlt bei Monero noch.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s