From Which split proposal was used to mount the recursive call vulnerability attack on The DAO?, proposal #59 is very likely the vector uses by the attacker to hack 3,641,694.241898506 Ether ($59,578,117.80) (from Is there any way to determine how long it took for the DAO attacker to deploy the attack?).
From my understanding only individuals voting Yes on the split proposals to be able to withdraw ETH from The DAO (see How to withdraw Ether from The DAO?).
Also from Deconstructing theDAO Attack: A Brief Code Tour:
The mechanism for doing so is to create a split proposal. Split proposals take 7 days to 'mature' and get participants in. Any participants voting "yes" in the split will be given the right to call splitDAO.
splitDAO will create the DAO child contract if it doesn't exist, send the ether controlled by the splitters into the childDAO, pay out any accrued 'reward' pro-rata to the splitters, and return. At least, that's the plan.
And from DAO.report you can see that no one voted Yes to proposal #59:
You can see the same information for proposal #59 in Which split proposal was used to mount the recursive call vulnerability attack on The DAO?.
From the source code for splitDAO(...)
(from EtherScan.io - The DAO) there is a restriction !p.votedYes[msg.sender]
that throws an error if the splitDAO(...)
function call was called by a caller who has not voted Yes:
function splitDAO(
uint _proposalID,
address _newCurator
) noEther onlyTokenholders returns (bool _success) {
Proposal p = proposals[_proposalID];
// Sanity check
if (now < p.votingDeadline // has the voting deadline arrived?
//The request for a split expires XX days after the voting deadline
|| now > p.votingDeadline + splitExecutionPeriod
// Does the new Curator address match?
|| p.recipient != _newCurator
// Is it a new curator proposal?
|| !p.newCurator
// Have you voted for this split?
|| !p.votedYes[msg.sender]
// Did you already vote on another proposal?
|| (blocked[msg.sender] != _proposalID && blocked[msg.sender] != 0) ) {
throw;
}
So, how was the attacker able to drain the ETH from The DAO when they did not vote Yes on proposal #59?
Was there another vector that was employed by the attacker?