Wie wurde der rekursive Call-Schwachstellenangriff über Vorschlag Nr. 59 durchgeführt, als es keine Ja-Stimmen gab?

Aus welchem ​​Split-Vorschlag wurde der rekursive Call-Schwachstellenangriff auf The DAO gestartet? , Vorschlag Nr. 59 ist sehr wahrscheinlich der Vektor, den der Angreifer verwendet, um 3.641.694,241898506 Ether (59.578.117,80 $) zu hacken (von Gibt es eine Möglichkeit, festzustellen, wie lange es gedauert hat, bis der DAO-Angreifer den Angriff ausgeführt hat? ).

Nach meinem Verständnis stimmen nur Einzelpersonen zu den geteilten Vorschlägen, um ETH aus The DAO zurückziehen zu können (siehe Wie kann man Ether aus The DAO zurückziehen? ).

Auch von Deconstructing theDAO Attack: A Brief Code Tour :

Der Mechanismus dafür besteht darin, einen geteilten Vorschlag zu erstellen. Geteilte Vorschläge brauchen 7 Tage, um „reif“ zu werden und Teilnehmer einzuladen. Alle Teilnehmer, die im Split mit „Ja“ stimmen, erhalten das Recht, splitDAO anzurufen.

splitDAO erstellt den untergeordneten DAO-Vertrag, falls er nicht existiert, sendet den von den Splittern kontrollierten Ether an das untergeordnete DAO, zahlt alle aufgelaufenen „Belohnungen“ anteilig an die Splitter aus und kehrt zurück. So ist zumindest der Plan.

Und aus DAO.report können Sie sehen, dass niemand für Vorschlag Nr. 59 mit Ja gestimmt hat:

Geben Sie hier die Bildbeschreibung ein

Geben Sie hier die Bildbeschreibung ein

Dieselben Informationen für Vorschlag Nr. 59 finden Sie in Welcher Split-Vorschlag wurde verwendet, um den rekursiven Anruf-Schwachstellenangriff auf The DAO zu starten? .

Aus dem Quellcode für splitDAO(...)(von EtherScan.io - The DAO ) gibt es eine Einschränkung !p.votedYes[msg.sender], die einen Fehler auslöst, wenn der splitDAO(...)Funktionsaufruf von einem Aufrufer aufgerufen wurde, der nicht mit Ja gestimmt hat:

    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;
        }     

Also, wie war der Angreifer in der Lage, die ETH von The DAO abzuziehen, als sie bei Vorschlag Nr. 59 nicht mit Ja gestimmt haben?

Gab es einen anderen Vektor, den der Angreifer benutzte?

Antworten (1)

Benutzer - DTO in einem DAOhub.org-Beitrag Wie wurde der rekursive Anruf-Schwachstellenangriff über Vorschlag Nr. 59 durchgeführt, als es keine Ja-Stimmen gab? wies darauf hin:

Es gab zwei Ja-Stimmen, nur sehr wenige Token und werden auf Null abgerundet:

0xc0ee9db1a9e07ca63e4ff0d5fb6f86bf68d47b89
0xf835a0247b0063c04ef22006ebe57c5f11977cc4

Aber beide Konten haben 0 Die DAO-Token - die Token wurden möglicherweise weg übertragen:

user@Kumquat:~$ theDAOVoter --listaccounts --account=0xc0ee9db1a9e07ca63e4ff0d5fb6f86bf68d47b89
  # Account                                                            ETH                        DAO The DAO transfer blocked by OPEN proposal?
--- ------------------------------------------ --------------------------- -------------------------- ------------------------------------------------------------
  0 0xc0ee9db1a9e07ca63e4ff0d5fb6f86bf68d47b89        0.000000645417097014         0.0000000000000000 
--- ------------------------------------------ --------------------------- -------------------------- ------------------------------------------------------------
  1 Total                                             0.000000645417097014         0.0000000000000000
user@Kumquat:~$ theDAOVoter --listaccounts --account=0xf835a0247b0063c04ef22006ebe57c5f11977cc4
  # Account                                                            ETH                        DAO The DAO transfer blocked by OPEN proposal?
--- ------------------------------------------ --------------------------- -------------------------- ------------------------------------------------------------
  0 0xf835a0247b0063c04ef22006ebe57c5f11977cc4        0.000000645417097014         0.0000000000000000 
--- ------------------------------------------ --------------------------- -------------------------- ------------------------------------------------------------
  1 Total                                             0.000000645417097014         0.0000000000000000

Von der Transaktionsliste 0xc0ee9db1a9e07ca63e4ff0d5fb6f86bf68d47b89 gab es viele Übertragungen von 25.805,6141471 DAOs bis vor 1 Tag und 2 Stunden (17.06.2016 12:27:23 Uhr), einschließlich einer Übertragung von 0xf835a0247b1970c5f74f0223 Die letzte Übertragung erfolgte an 0xca04d260356d19f0d7255041542c9cbc866f2cb3 .

Und von 0xc0ee9db1a9e07ca63e4ff0d5fb6f86bf68d47b89 und 0xf835a0247b0063c04ef22006ebe57c5f11977cc4 können Sie sehen, wie beide Konten über die Vorschläge Nr. 59 und Nr. 64 abstimmen.

Hier sind einige Daten zu Vorschlag Nr. 64:

=======================================================================
Proposal 64. OPEN until Thu Jun 16 16:02:14 2016 [-2d 05h 59m 39s]
Votes       YEA 3069670 (99.99%) nay 250 (0.01%) Quorum 0.27% of 20%
Creator     0x547389052a8dc86365c46641b5184956ec22749d
Recipient   0x547389052a8dc86365c46641b5184956ec22749d
Deposit     0 ETH
Amount      0 ETH
New curator Y
-----------------------------------------------------------------------
0x54738 Split
=======================================================================

Vorschlag Nr. 64 könnte also ein weiterer Angriffsvektor sein? (Aber ich weiß nicht, was den Angriff über Vorschlag Nr. 59 gestoppt hat).

Ist es wirklich sinnvoll, alle Community-Wiki-Beiträge zu erstellen?
Weiß nicht. Bitte beraten.
Ich bin mir selbst nicht sicher, aber ich sehe nicht oft Leute, die zu Wiki-Beiträgen beitragen. Und ich denke, es ist besser, die Bearbeitungswarteschlange zu verwenden oder eine separate Antwort zu erstellen. Hier und hier sind einige Ressourcen.