The 1 Million Ether Parity Multisig Bug

November 6th, 2017. All standard multisig wallets from parity suddenly stop working. Silently, a bug report comes in on github. It's Devops199.

I accidentally killed it

Not many people realise it at this point, but all funds sitting in Parity standard multi sig wallets are frozen, never to be accessed again. It takes nearly half a day before the news hits the public. But when it does, it hits hard.

The parity Statements

We started digging on Etherscan to find the root cause of the problem, to see if anything could be reverted or saved.

It was this transaction that clarified what happened. During Parity's code refactoring - after the disaster that happened in June 2017 - developers at Parity Technologies extracted common code from the standard multisig wallets and put it in a precompiled and deployed contract. This way, all new multisig contracts could use this contract by calling it and users could save up on a quite some gas.

Parity Technologies deployed it here.

It seems however that the code wasn't rigorously tested and contained a bug. A rather big bug to be honest.

Instead of implementing the initWalletcode, it was also extracted into the library.

In short, the initWalletcode could also be executed on the WalletLibrary Library, which is the only library all of these multisig wallets use.

This converted the library into an actual multisig wallet.

Moments later, the same person called the following function.

The library is now killed, making it useless. All calls to this contract will fail. Well, almost all calls. The multisig contracts have effectively been reduced to

contract Wallet {  
    function () payable {
          Deposit(...)
    }
} 

Funds are locked up, never to be returned again (*).

Now what?

At this point, there's not much we can do. All users that had/have a standard multisig wallet by parity were affected and all of their funds are locked up.

As you can see in the image below, the wallet library address is hardcoded without a way to overwrite it.

The White hat group compiled a list of all known affected wallets. If you are using a multisig wallet, we advise you to check if you are among the victims.

We, at FundRequest were lucky to have been using the geth-multisig, so our funds are uneffected. We're deeply sorry for all the people that lost their funds.


Hours after the actual event, reddit started flooding with people screaming they either

  • want a hard fork to save the funds
  • are very much opposed to a new hard fork
  • want a hard fork combined with the planned constantinople release

At the time of writing, no official word has come from the Ethereum foundation about any hard fork, so it's all absolutely speculative. However, we want to know what your stance on this matter would be?

Are you Pro? Opposed? Is code law or is there a gray area? We'd like to know.

Comments

comments powered by Disqus