I'm trying to understand the winning contract from the Underhanded Solidity Contest.
That contract apparently caused an overflow in the ABI decoder, but I'm having a hard time understanding where in the "stack" (not literal stack, but where in the technologies that comprise Ethereum) the overflow occurred.
From reading the docs and this answer I get that the ABI is not a part of the core ethereum protocol defined in the yellow paper, but my question is this:
What takes:
0x69f30401
"00000000000000000000000000000000000000000000000000000000cafebabe"
"0000000000000000000000000000000000000000000000000000000000000060"
"00000000000000000000000000000000000000000000000000000000000000A0"
"F000000000000000000000000000000000000000000000000000000000000001"
"0000000000000000000000000000000000000000000000000000000000000003"
"F000000000000000000000000000000000000000000000000000000000000001"
"0000000000000000000000000000000000000000000000000de0b6b3a7640000"
Decodes it, and executes it on the EVM? Do transactions themselves contain the above^? How then is that not a part of the core ethereum protocol? I don't understand how you get from ABI to EVM instructions being executed and what code is doing the executing.
If the exploit relies on Solidity decoding the ABI and causing an overflow, does that mean all mining nodes are running Solidity? How can that be?
My mental model seems to be missing something fundamental here. Diagrams are appreciated if you have the time, thanks!