Ist ein Angriff auf eine lokale Bitcoin über ein img oder einen eingebetteten Flash realisierbar?

In diesem Thread in den Bitcoin-Foren wurde vorgeschlagen, dass ein lokaler Angriff auf Bitcoin durch fehlerhafte Img-Tags oder (meiner Meinung nach wahrscheinlicher) durch eingebetteten Flash möglich sein könnte. Damit ergibt sich auch die Möglichkeit der Ausbeutung über Java et al.

Leider weiß ich nicht genug über Flash, um festzustellen, ob es daran gehindert wird, eine Verbindung zu einem lauschenden Client auf localhost herzustellen. Ich würde davon ausgehen, dass es von allem anderen im lokalen Netzwerk getrennt ist, aber ich weiß ehrlich gesagt nicht, ob sie sich die Mühe gemacht haben, den Zugriff auf localhost einzuschränken.

Antworten (1)

Diese Seite besagt, dass ein Flash-Applet nur auf den Port und den Hostnamen der URL zugreifen kann, von der es heruntergeladen wurde:

Adobe Flash, ein Plugin, von dem angenommen wird, dass es auf etwa 99 % aller Desktops installiert ist, enthält ein Sicherheitsmodell, das im Allgemeinen von Browser-Same-Origin-Checks inspiriert ist. Der Sicherheitskontext von Flash-Applets wird von der URL abgeleitet, von der sie geladen werden (im Gegensatz zu der Website, die sie mit oder -Tags einbettet), und innerhalb dieses Bereichs folgt die Berechtigungskontrolle demselben Grundprinzip, das von Browsern auf den DOM-Zugriff angewendet wird: Protokoll, Hostname und Port der angeforderten Ressource werden mit denen des Anforderers verglichen, wobei den auf der lokalen Festplatte gespeicherten Inhalten universelle Zugriffsrechte gewährt werden. Allerdings gibt es wichtige Unterschiede – und einige interessante Erweiterungen – die Flash in die Lage versetzen, domänenübergreifende Interaktionen in einem größeren Ausmaß zu initiieren, als dies normalerweise für native Browserinhalte zulässig ist.

Aber anscheinend gilt das für das Ergebnis einer Anfrage, nicht für die Anfrage selbst, also ist es möglich, dass ein Flash-Applet eine Anfrage an Ihre Bitcoin sendet, um Münzen zu transferieren, aber nicht prüft, ob es funktioniert hat oder nicht. Die Verwendung von Wallet-Verschlüsselung würde helfen, dies zu mildern.

Ich konnte Salden mit einfachen HTTP-'POST'-Anfragen finden:

$ echo '{"method":"getbalance","params":[""]}' | POST http://$user:$pass@localhost:8332/
{"result":-6203.99412537,"error":null,"id":null}

Ich weiß nicht, ob es möglich ist, nur eine normale 'GET'-Anfrage zu verwenden.

Bearbeiten: Ich habe gerade versucht, 100 Mal hintereinander das falsche Passwort zu "erraten" und es dann richtig zu machen. bitcoind hörte nicht auf, Vermutungen zu akzeptieren oder verlangsamte sich überhaupt und akzeptierte die endgültige richtige Vermutung:

$ i=100; while ((i>0)); do ((i--)); echo $(echo $i; date;
  echo '{"method":"getbalance","params":[""]}' |
  POST http://$user:guess$i@localhost:8332/ 2>&1 | grep -i body);
  done; echo '{"method":"getbalance","params":[""]}' |
  POST http://$user:$pass@localhost:8332/
99 Tue Apr 24 09:10:10 PDT 2012 <BODY><H1>401 Unauthorized.</H1></BODY>
98 Tue Apr 24 09:10:10 PDT 2012 <BODY><H1>401 Unauthorized.</H1></BODY>
[...]
1 Tue Apr 24 09:10:53 PDT 2012 <BODY><H1>401 Unauthorized.</H1></BODY>
0 Tue Apr 24 09:10:53 PDT 2012 <BODY><H1>401 Unauthorized.</H1></BODY>
{"result":-6203.99412537,"error":null,"id":null}
Interessant. Angenommen, Sie verwenden ein aus einem Wörterbuch bestehendes RPC-Passwort und eine unverschlüsselte Brieftasche, könnte ein Flash-Applet theoretisch eine Übertragung initiieren. Gibt es keine Anzahl von schlechten Passwortversuchen, bei denen der JSON RPC von Bitcion einfach für eine Weile aufhört, Anfragen zu akzeptieren? Selbst ohne einen Flash-Exploit würde das Fehlen einer solchen Funktion Bitcoins RPC absolut Brute-Force-fähig machen ...
Es müsste einen Benutzernamen sowie ein Passwort erraten, denke ich. Ich habe meine Antwort bearbeitet, um zu zeigen, dass Sie 100 Mal falsch raten können, ohne bestraft zu werden.
Aaaaand ich gehe jetzt zu github, um ein Issue zu eröffnen bezüglich: RPC ist Brute-Force-fähig :P Danke!
Beantwortete Frage : Es gibt eine erzwungene Verzögerung von 250 ms zwischen RPC-Anmeldungen, wenn Ihr RPC-Passwort < 20 Zeichen lang ist.
Meine 100 Versuche haben 43 Sekunden gedauert, das ist also plausibel.