DAO exploit. Yet another reason why voting should never expire

  • Thread starter Thread starter demo
  • Start date Start date
D

demo

Guest
http://hackingdistributed.com/2016/06/18/analysis-of-the-dao-exploit/
And so it goes:
  1. Proposea split and wait until the voting period expires. (DAO.sol, createProposal)
  2. Execute the split. (DAO.sol, splitDAO)
  3. Let the DAO send your new DAO its share of tokens. (splitDAO -> TokenCreation.sol, createTokenProxy)
  4. Make sure the DAO tries to send you a reward before it updates your balance but after doing (3). (splitDAO -> withdrawRewardFor -> ManagedAccount.sol, payOut)
  5. While the DAO is doing (4), have it run splitDAO again with the same parameters as in (2) (payOut -> _recipient.call.value -> _recipient())
  6. The DAO will now send you more child tokens, and go to withdraw your reward before updating your balance. (DAO.sol, splitDAO)
  7. Back to (5)!
  8. Let the DAO update your balance. Because (7) goes back to (5), it never actually will :).


Told ya. Voting period must never expire. Polls must be permanent. Any decision must be revertable. Any hardcoded number must be voted, and be voted using numbers. The opinion of the newcomers and of the future generations must be respected.
 
Last edited by a moderator:
Back
Top