Skip to main content
14 events
when toggle format what by license comment
Aug 17, 2021 at 2:51 history edited Yakitori CC BY-SA 4.0
Old post was incorrect.
Aug 15, 2021 at 22:31 history bounty ended Ismael
Aug 15, 2021 at 22:26 comment added Ismael @Yakitori I think that is the correct answer. I suppose that due to the attack the contract has less ether than it is expecting and actualBalance calculation overflows. Great Job!
Aug 14, 2021 at 1:00 comment added Yakitori @ismael - After digging a bit, I think I found. The newDao contract gets fundsToBeMoved (line 986) which is computed using actualBalance() - which seems to underflow when called on Etherscan and is now equal a to a very big number. Thus, since there's not enough funds in the contract to be sent, the transaction throws. If the answer is ok for you, I'll update it. Anyway, thanks for the heads-up.
Aug 13, 2021 at 21:53 comment added Ismael @Yakitori If I remember correctly the recursive attack wasn't on the rewards contract but the ethers being sent to the newDao created, since balances[msg.sender] isn't reset the attacker could move more funds than their share.
Aug 13, 2021 at 19:35 comment added Yakitori @Ismael I updated it, but it doesn't change anything really - the hacker would only be able to steal his own funds. payOut only sends funds from the rewardAccount, not the original contract.
Aug 13, 2021 at 19:33 history edited Yakitori CC BY-SA 4.0
added 198 characters in body
Aug 13, 2021 at 4:46 comment added Ismael Great work! I've some concerns though. The rewardAccount contract has a fallback function () { accumulatedInput += msg.value; } so an attacker could deposit ether before attacking so payOut won't fail. Don't worry about the rewards points, I'll extend the deadline if necessary, perhaps assign partial points for your research.
Aug 10, 2021 at 14:33 vote accept John1
Aug 9, 2021 at 14:18 comment added Yakitori @John1, could you accept the answer then?
Aug 9, 2021 at 7:03 comment added John1 To confirm, it's not the original DAO contract at 0xbb9bc244d798123fde783fcc1c72d3bb8c189413 that can sends ether, rather the rewardAccount contract at 0xd2e16a20dd7b1ae54fb0312209784478d069c7b0 which has 0 ether now.
Aug 9, 2021 at 2:11 review Late answers
Aug 9, 2021 at 5:31
Aug 9, 2021 at 1:56 review First posts
Aug 9, 2021 at 4:58
Aug 9, 2021 at 1:52 history answered Yakitori CC BY-SA 4.0