¿Se debe solicitar a un usuario de JSON-RPC que use una contraseña al hacer una copia de seguridad de la billetera?

Me sorprendió poder hacer una copia de seguridad de mi billetera a través de JSON RPC sin solicitar la contraseña de la billetera (o incluso sin una contraseña secundaria de solo respaldo)

Me preocupa que esto pueda crear un ataque DOS si ocurriera lo siguiente

  1. Se crea un servicio de billetera de solo lectura para realizar operaciones de bajo riesgo con la billetera
  2. Ese servicio de bajo riesgo se explota de alguna manera a través de una interfaz web, etc.
  3. El proceso en segundo plano (ahora en control del atacante) emite el backupwalletcomando

Creo que puede ser un riesgo dependiendo de una serie de escenarios:

  • El usuario puede guardar el archivo con muchos nombres aleatorios diferentes y llenar el disco (ataque DOS)
  • El usuario puede sobrescribir los archivos del sistema con una copia de la billetera (DOS nuevamente)
  • Si los archivos anteriores no se anulan y se devuelve un error (debido a un archivo duplicado, un archivo bloqueado, etc.), el atacante puede inferir información sobre el sistema de archivos remoto.
  • Si el sistema admite canalizaciones, tal vez la billetera se pueda canalizar a otro sistema remoto (/dev/???)

Por lo tanto, me pregunto si se debe crear una contraseña separada solo de respaldo para solucionar este problema. Es decir, no quiero usar la contraseña de "descifrar billetera".

  • También me gustaría forzar que todas las copias de seguridad vayan a un directorio específico (y no a ninguna otra unidad/ruta)

  • ¿Es esta una buena idea y, de ser así, cómo debería incorporarse a la red?

Ahora que lo pienso, el método Stop() también debería tener una contraseña (separada de la cuenta JSONRPC) en mi humilde opinión
Probablemente haya cientos de vectores de ataque si permite el acceso sin filtrar para enviar comandos JSON-RPC. "backupwallet" es probablemente el más rápido. Por ejemplo, podría causar degradación/denegación de servicio al ejecutar el comando RPC getnewaddress sin parar.

Respuestas (1)

El JSON-RPC nunca tuvo la intención de estar abierto al público, por lo tanto, se requiere rpcusery rpcpassword. Para mayor seguridad, también debe configurarse para escuchar solo la interfaz de bucle invertido o las IP permitidas limitadas a unas pocas fuentes confiables.

La contraseña de la billetera se usa para acceder a las claves privadas encriptadas, por eso todo lo que implica agregar nuevas claves privadas o firmar con las claves privadas requiere que la billetera esté desbloqueada.

backupwalletexporta las claves en su forma cifrada y, por lo tanto, no requiere la frase de contraseña.

Si tiene que permitir el acceso de JSON-RPC a usuarios que no son de confianza, coloque un filtro delante.