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.
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}
David Perry
Chris Moore
David Perry
David Perry
Chris Moore