BigSpender Checking BigSpender Vulnerability Bitcoin Wallet
BigSpender Checking BigSpender Vulnerability Bitcoin Wallet

BigSpender: Checking BigSpender Vulnerability in Bitcoin Wallet

Una herramienta para comprobar la vulnerabilidad BigSpender en los monederos Bitcoin. Este repositorio reúne un conjunto de scripts para el doble gasto a cero-confirmaciones, utilizando el Replace-by-Fee de Bitcoin.

Para algunos monederos vulnerables, permite a un remitente malicioso realizar los siguientes ataques:

  1. Doble gasto básico: Los atacantes pueden explotar este problema enviando a la víctima una transacción de cierto valor pero con comisiones mínimas (estará pendiente durante mucho tiempo) y pidiendo algunos bienes o servicios a cambio, para luego cancelar la transacción inmediatamente. Como los monederos vulnerables no reflejan las cancelaciones y siguen mostrando un saldo incorrecto, la víctima verá que el saldo de su monedero ha aumentado y creerá que la transacción se ha completado. Por lo tanto, la víctima puede proporcionar al atacante los bienes o servicios sin recibir realmente ningún pago. Nota: A diferencia de otros esquemas de doble gasto, este esquema es fácil de usar y totalmente determinista (sin condiciones de carrera). No requiere casi ninguna inversión financiera por parte del atacante (aparte de honorarios insignificantes) y no requiere ninguna condición previa adicional.
  2. Ataque amplificado: El problema puede ser amplificado aún más por un atacante. Se puede crear una serie de transacciones reemplazables de este tipo para inflar artificialmente el saldo de una víctima y ampliar el ataque. Por ejemplo, los atacantes con sólo 10 dólares pueden aumentar el saldo en 1.000 dólares enviando una serie de 100 transacciones de 10 dólares, cada una de las cuales cancela la transacción anterior.
  3. Denegación de servicio: Incluso si el propietario de un monedero no es engañado por este ataque, no puede “enviar todas” sus tenencias ya que el saldo presentado es ahora mayor que el saldo real. Cuando intentan enviarlo todo, falla. Este hecho también inhabilita otros tipos de intentos de envío (por ejemplo, enviar sólo una fracción del saldo del monedero) si el algoritmo de selección de monedas del monedero elige fondos de esta transacción inexistente.

Los atacantes pueden hacer un DoS masivo “BigSpender” enviando una cantidad minúscula (“polvo”) a muchos usuarios de un monedero vulnerable y cancelarlo (por lo que no requiere mucho capital). No se requiere el consentimiento de las víctimas, que quedan incapacitadas para utilizar sus fondos.

También se descubrió que en algunos monederos la recuperación es difícil – incluso después de desinstalar y volver a instalar el software del monedero, la restauración desde la misma semilla da como resultado el mismo saldo falso y la imposibilidad de enviar.

Puedes leer más aquí.

Infografía sobre BigSpender
Infografía sobre BigSpender – Fuente: Chetu
Tabla de Contenido

Uso

  1. Instalar:
$ git clone https://github.com/KZen-networks/big-spender
$ cd ./big-spender
$ chmod +x index
$ yarn install
  1. Establecer variable de entorno para la clave privada.
    Debe tener al menos un UTXO de un saldo suficiente (0.001 BTC debería ser suficiente, testnet soportado).
    Si aún no dispones de dicha clave privada, sigue las breves instrucciones que encontrarás aquí.
$ export PRIVATE_KEY=<32 bytes hex>
  1. Utiliza la herramienta CLI:
$ ./index --help
Usage: index [options] [command]

Options:
  -h, --help                    display help for command

Commands:
  address|a [options]           Generate a random Bitcoin address
  rbf [options]                 Send N transactions: each replaces the previous one with a higher fee. Last one goes back to sender.
  listen|l [options] <address>  Listen for changes in the transactions history of the given address
  signing-address|sa [options]  Get the address of the signing private key
  help [command]                display help for command

Ejemplo

Usa 2 shells.

  1. La primera shell simulará la cartera de la víctima. Genera una dirección aleatoria (para cada método CLI, utiliza mainnet añadiendo -n mainnet):
$ ./index address
tb1qtdcxk5x8yqa2phx2xpevhvtv4eyg2ngslmq0ga

A continuación, escucha los cambios en el historial (actividad de transacciones entrantes/salientes) en esta dirección:

$ ./index listen tb1qtdcxk5x8yqa2phx2xpevhvtv4eyg2ngslmq0ga
Listening for changes...
  1. El segundo shell simulará al atacante. Recuerda establecer primero la variable de entorno PRIVATE_KEY.
    A continuación, utiliza el método Replace-by-Fee para crear K transacciones (por defecto K = 2).
    Las primeras (K – 1) transacciones se enviarán a la dirección que acabamos de crear, y la última volverá al remitente.
$ ./index rbf --toAddress=tb1qpqrjep77dn9asqqx5e6rzntdx9egu7ml3tggad
broadcasting #0...
txid #0: 6853984d159dfca63957bf04ebef3a0d1c9d7adf1fabfa8b1e1d242db8faaa79
broadcasting #1 back to the sender...
txid #1: e6d8bcceb33af3de5d478715364c44642ce61a45ca259921b759d52bf08ebbf0
  1. Vuelve al primer shell y observa los cambios:
----------
history changed!
historyTxs = [ { height: 0,
    tx_hash:
     '6853984d159dfca63957bf04ebef3a0d1c9d7adf1fabfa8b1e1d242db8faaa79' } ]
----------
history changed!
historyTxs = []

Ejemplo de uso de la herramienta para verificar que la vulnerabilidad no se aplica (ZenGo wallet):

Demo BigSpender
Demo BigSpender

Mi Carro Close (×)

Tu carrito está vacío
Ver tienda