Was ist der Exploit hinter der Multisig-Wallet von Parity vom 19.07.2017?

Gerade jetzt (19.07.2017, 22:00 Uhr MESZ) gibt es eine Warnung von Parity, dass es einen laufenden Exploit in ihrer Multisig-Wallet gibt.

Was ist die Ursache und der Mechanismus dieses Exploits?

Sie können den Diff des Patches überprüfen, der zur Behebung dieser Schwachstelle entwickelt wurde: github.com/paritytech/parity/commit/…
Hier ist ein Video von Jordan Leigh von Decypher Media mit vollständiger Wiedergabe des Angriffs youtube.com/watch?v=VUH4gRDQYsA

Antworten (1)

Die Brieftasche hat eine Funktion freigelegt:

// constructor - just pass on the owner array to the multiowned and
// the limit to daylimit
function initWallet(address[] _owners, uint _required, uint _daylimit) {
    initDaylimit(_daylimit);
    initMultiowned(_owners, _required);
}

die für die Initialisierung der Brieftaschenbesitzer verantwortlich war. Der Autor vergaß jedoch, eine Prüfung einzuschließen, um festzustellen, ob die Brieftasche bereits initialisiert wurde, und erlaubte somit jedem, diese Funktion aufzurufen und das owners[]Array vollständig zu überschreiben, wodurch er vollen Zugriff auf die Brieftasche erhält.

OMG, das ist so einfach und so schlecht, vielen Dank!
Es hätte ausreichen sollen, es als intern festzulegen, und es nur vom Konstruktor aufrufen zu lassen, hätte dies unmöglich gemacht. Die Solidity-Entwickler müssen möglicherweise darüber nachdenken, interne Funktionen intern zu machen
Die Methoden, die extern sein sollen, sind explizit als "extern" gekennzeichnet, aber die Methoden, die intern sein sollen, wurden nicht markiert. Das deutet darauf hin, dass die Programmierer die Vorgabe missverstanden haben – obwohl sie die Entwickler einer großen Wallet sind. Dies war wahrscheinlich eine schlechte Standardauswahl im Design der Solidity-Sprache.