I feel I am missing something here, so gox halted BTC withdrawals claiming that its is the protocol fault, we all agree on the bug and it has been known for a long time now, what I cant understand is how users are effected.
ok take a moment and hear me out, or in other words try to explain to me how this works:
1- I request a BTC withdraw
2- Gox hot wallet is empty
3- now 1000 user requests BTC withdrawals.
4- gox fill up the hot wallet to make it possible to withdraw or at the mean time they get enough deposits to proceed with the withdrawals.
5- the attacker is one of those users who did request a withdraw.
6- gox send TX1.
7- attacker change the TX1 to TX2
8- everyone get their Bitcoins regardless which tx is.
9- attacker claims that he didn't receive the BTC so they check their DB for TX1 and they agree on his claim and credit his account ( but again why, what about the other 999 user).
10- all the 999 user got their bitcoins and no one complains.
if we agree on the 10 steps above, then there is something fishy here, now when I see thousands of customers complaining about not getting Bitcoin withdrawals it makes me wonder how is this possible !!? because my logic tells me the 999 user shouldn't be effected, only the attacker who can claim on being "effected".
but for the last couple of weeks some people got their bitcoins when others didn't, how do we explain this ? anyone try to explain this to me ?
MtGox had other issues which resulted in payments failing, being delayed, and needing to be resent. The attackers took advantage of this to "camouflage" their actions. Your right if you send out payments to 50,000 users and 49,999 report no issue but one user over and over reports not getting paid well then "hmm maybe this user is running a scam" however if you send payments to 50,000 users and 30,000 of them report non-payment due to a variety of reasons (caused by Gox) then it becomes easier for the attacker to hide.
MtGox wrote their own client, and they did so horribly bad. Their client isn't worthy of being used by a hobbyist experimenting on testnet but they used it in production for a systme involving millions of dollars of assets. We have no idea how many things they got wrong but looking at the failed transaction we know at a minimum these things were wrong:
a) MtGox double spent their own coins.
b) MtGox paid insufficient fees on tx which were low priority meaning they would not be relayed to miners by most nodes.
c) MtGox created tx which violated the "anti-spam" rules which caused tx to be dropped (not relayed) by some nodes.
d) MtGox attempted to spend immature newly mined coins (newly mined coins can't be spent for 120 blocks).
e) MtGox used non-canonical signatures on transactions which were rejected by newer nodes.
and
f) MtGox failed to account for mutable hashes.
Now if MtGox had done a through e they wouldn't have lost any coins. Yes users would be delayed. Yes it would make them look foolish but had they at least done f right they would have not paid attackers twice.
On the other had if MtGox had done a through e right but messed up f, then your scenario in the OP would be correct. Legit users would have seen no issue, attackers would have gotten double paid.
However MtGox managed to get a through f wrong so legit users were affected AND attackers were able to trick them into making double payments. Worse the two issues compound on each other. If the attackers were the only ones reporting non-payment then it is likely MtGox would have gotten suspicious relatively quickly however since this has been going on for the better part of a month and involves tens of thousands of transactions who knows how many times attackers were able to get away with a double payment.
Moral of the story, a custom bitcoin client must be exactly compliant with other nodes on the network. "Kinda good, most of the time" is not sufficient. It is an undertaking that most people should
not attempt. I consider myself moderately knowledgeable about bitcoin, and I don't use a custom bitcoin client. I use a custom backend which communicates with the
reference client (i.e. bitcoind) for these exact reasons. MtGox's attempt to build a custom client would be laughably bad if released as an open source alternative client with a warning to be used for testing only. The fact that it was used as a closed source production client borders on criminal negligence.