¿Es viable un ataque a un bitcoind local a través de un img o un flash incorporado?

En este hilo en los foros de Bitcoin, se sugirió que un ataque local a bitcoind podría ser posible a través de etiquetas img mal formadas o (más probable en mi opinión) a través de flash incorporado. Esto también trae a colación la posibilidad de explotación a través de Java et al.

Desafortunadamente, no sé lo suficiente sobre flash para determinar si se impide que se conecte a un cliente de escucha en localhost. Asumiría que está aislado de cualquier otra cosa en la red local, pero honestamente no sé si se han molestado en restringir el acceso a localhost.

Respuestas (1)

Esta página dice que un subprograma Flash solo puede acceder al puerto y al nombre de host de la URL desde la que se descargó:

Adobe Flash, un complemento que se cree que está instalado en aproximadamente el 99% de todos los escritorios, incorpora un modelo de seguridad generalmente inspirado en las verificaciones del mismo origen del navegador. Los subprogramas Flash tienen su contexto de seguridad derivado de la URL desde la que se cargan (a diferencia del sitio que los incrusta o etiqueta), y dentro de este ámbito, el control de permisos sigue el mismo principio básico que aplican los navegadores al acceso DOM: protocolo, El nombre de host y el puerto del recurso solicitado se comparan con los del solicitante , con privilegios de acceso universal otorgados al contenido almacenado en el disco local. Dicho esto, existen diferencias importantes, y algunas extensiones interesantes, que hacen que Flash sea capaz de iniciar interacciones entre dominios en un grado mayor que el que normalmente se permite para el contenido nativo del navegador.

Pero aparentemente eso se aplica al resultado de una solicitud, no a la solicitud en sí, por lo que es posible que un subprograma Flash pueda enviar una solicitud a su bitcoind para transferir monedas, pero no verificar si funcionó o no. El uso de cifrado de billetera ayudaría a mitigar esto.

He podido encontrar saldos utilizando solicitudes HTTP 'POST' simples:

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

No sé si es posible usar solo una solicitud 'GET' regular.

Editar: solo intenté 'adivinar' la contraseña incorrecta 100 veces seguidas y luego hacerlo bien. bitcoind no dejó de aceptar conjeturas ni disminuyó la velocidad en absoluto, y aceptó la conjetura final correcta:

$ 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}
Interesante. Entonces, suponiendo que estuviera usando una contraseña RPC de palabras de diccionario y una billetera sin cifrar, un subprograma Flash teóricamente podría iniciar una transferencia. ¿No hay una cantidad de intentos de contraseña incorrectos en los que JSON RPC de Bitcion simplemente deje de aceptar solicitudes por un tiempo? Incluso sin un exploit de Flash, la falta de tal característica haría que el RPC de bitcoin fuera completamente apto para la fuerza bruta...
Creo que tendría que adivinar un nombre de usuario y una contraseña. Edité mi respuesta para mostrar que puedes adivinar mal 100 veces sin ser penalizado.
Aaaay ahora me dirijo a github para abrir un problema relacionado con: RPC puede usar fuerza bruta: P ¡Gracias!
Pregunta respondida : hay un retraso forzado de 250 ms entre los inicios de sesión de RPC si su contraseña de RPC tiene menos de 20 caracteres.
Mis 100 intentos tomaron 43 segundos, así que eso es plausible.