Live data from Hacker News

153k Ether Stolen in Parity Multi-Sig Attack

etherscan.io

541–550 of 754 posts

Re: 153k Ether Stolen in Parity Multi-Sig Attack

#541

Earlier quoted context omitted.

The real lesson is: don't store your coins on a third party anything . This was a third-party wallet. Everyone used it because everyone else used it. Exactly like Mt Gox. There was no reason to store coins on Mt Gox, just like there was no reason to use this wallet. A moment's reflection would have prevented this foolish decision.

This wasn't a third party wallet actually. It is the local Parity wallet and node. What this was, was a bug in the multisig contract that Parity would give you to deploy. So it is a contract you personally deploy onto the ethereum network and then interact with. You do own it, you own the private keys for the address, etc. But the bug allowed any other address to add themselves as owners and withdraw from it. Luckily…

Exactly, you are deploying code to the cloud that you didn't write and trusting it with your money.

So many things wrong about that, it's the cryptocurrency equivalent of installing random software packages on your critical servers.

Re: 153k Ether Stolen in Parity Multi-Sig Attack

#545
post #34

Earlier quoted context omitted.

Why would an unmarked function get the broadest possible scope in a language designed for contracts? I'm always surprised by the decisions made around Ethereum, and just how much value people have poured into it.

For the same reason every variable in JavaScript is global by default... I.e. I don't have a clue how that could seem like a good idea.

In javaScript, the following lines does different things:

  "use strict";
  foo = 1;
  var bar = 1;
"foo=1" changes the variable foo (this is very useful) and "var bar=1" creates variable bar and adds it to the function/lexical scope. If the variable foo is not created/declared, it will throw an error! But without "use strict", "foo=1" would add variable foo to the global scope! Which might create unexpected bugs if you are used to other languages that does the sane thing and adds it to the local function/lexical scope. So I suggest to always "use strict" !

Re: 153k Ether Stolen in Parity Multi-Sig Attack

#546

Let's play hypotheticals. If you were the attacker and you now have the ETH in your wallet, how do you cash out without anyone identifying you and maximising your profits? Also has the attacker broken a law by exploiting a bug in the contract?

Trade ETH with some other cryptocurrency that is anonymous (Zcash?). Then trade that into BTC. Then cash out.

Re: 153k Ether Stolen in Parity Multi-Sig Attack

#548

Earlier quoted context omitted.

That's a valid point. But its hard to be humble when you work on something that was designed to topple national banks.

Then you shouldn't be working on it . If you can't be humble, you should not be working on things that can hurt people because you're creating risk for them that they can't actually measure. (It's why I consciously avoid such projects; knowing one's propensity to arrogance makes it unethical not to.) If it's important, you need to be good. If it's very important, you need to be good and sure .

I don't disagree, it's just easier said than done.

Re: 153k Ether Stolen in Parity Multi-Sig Attack

#549
post #521

Just skimming through the Solidity docs, I see a lot of unwise decisions there aside from the weird visibility defaults. All state is mutable by default (this includes struct fields, array elements, and locals). Functions can mutate state by default. Both are overridable by explicit specifiers, much like C++ "const", but you have to remember to do so. Even then, the current implementation doesn't enforce this for fun…

Fixing the language is one step. It will still not prevent hax0rs from targeting the bytecode of the VM itself.

Perfect is the enemy of good.

Re: 153k Ether Stolen in Parity Multi-Sig Attack

#550
post #546

Let's play hypotheticals. If you were the attacker and you now have the ETH in your wallet, how do you cash out without anyone identifying you and maximising your profits? Also has the attacker broken a law by exploiting a bug in the contract?

Trade ETH with some other cryptocurrency that is anonymous (Zcash?). Then trade that into BTC. Then cash out.

While Zcash allows for keeping the sender, receiver, and amount private, making that optional and having the ability to analyze address balances will allow for blockchain analysis to potentially figure out the sender, receiver, and amount by correlating all public transactions and address balances. A better cryptocurrency would be Monero which forces all transactions to be private and keeps all address balances private, preventing a blockchain analysis company or government agency from figuring out transaction details.
Post reply on HN