Dos vulnerabilidades de bitcoinjs-lib pueden hacer que las aplicaciones subestimen la comisión para los mineros en una transacción válida de Bitcoin. Los avisos del 26 de octubre indican que las correcciones están disponibles en las versiones 5.2.2, 6.1.9 y 7.0.4. El flujo afectado utiliza transacciones de Bitcoin parcialmente firmadas, o PSBT, en las que las aplicaciones intercambian datos de transacción y firmas entre clientes.
En uno de los fallos, la firma y el cálculo de la comisión pueden usar valores diferentes para una misma entrada. Una demostración en bitcoinjs-lib 7.0.1 mostró una comisión real de 900,000,000 satoshi presentada como de solo 200 satoshi, lo que permitía que la transacción superara la advertencia predeterminada sobre la tasa de comisión. El segundo fallo afecta a entradas finalizadas con registros de valor ausentes. En su ejemplo hipotético, una comisión real de 91,000 satoshi aparecía como de 1,000 satoshi.
Por qué importa
Los errores no crean firmas ni autorizan transferencias por sí mismos. Para que haya pérdidas, una transacción autorizada y válida debe difundirse y ser aceptada por la red de Bitcoin, y el valor adicional debe pagarse como comisión para los mineros. El riesgo se concentra en las aplicaciones que confían en el cálculo de comisiones de bitcoinjs-lib o en sus protecciones frente a comisiones excesivas sin verificar de forma independiente los outputs que se gastan.
Las versiones afectadas incluyen de la 5.2.0 a la 5.2.1, de la 6.0.0 a la 6.1.8 y de la 7.0.0-rc.0 a la 7.0.3 en el caso del fallo de registros en conflicto. El fallo de registros ausentes también afecta a las versiones de la 5.1.0 a la 5.2.1.
Impacto en el mercado
Se trata de un problema de seguridad de aplicaciones y wallets, no de un fallo del consenso de Bitcoin. Los responsables del mantenimiento deberían actualizar a las versiones corregidas, rechazar valores o scripts de entrada en conflicto y verificar el valor de cada entrada antes de firmar, confiar en las comisiones o extraer una transacción.
La corrección ofrece a la firma y a la contabilidad un método compartido para resolver outputs anteriores, exige un importe para cada entrada durante el cálculo de la comisión y elimina las comisiones almacenadas en caché y las transacciones extraídas después de cambios relevantes en los metadatos. Los equipos que no puedan actualizar deberían verificar de forma independiente los valores de los outputs referenciados.
Preguntas frecuentes
-
¿Qué corrigió bitcoinjs-lib?
Corrigió dos errores que podían hacer que las aplicaciones subestimaran las comisiones para los mineros al procesar transacciones de Bitcoin parcialmente firmadas.
-
¿Cuál fue la discrepancia de comisión en una de las demostraciones?
Una demostración en bitcoinjs-lib 7.0.1 mostró una comisión real de 900,000,000 satoshi presentada como de 200 satoshi.
-
¿Pueden las vulnerabilidades mover Bitcoin sin una firma?
No. Los fallos no crean firmas ni autorizan transferencias. Para que haya pérdidas, una transacción autorizada y válida debe difundirse y ser aceptada.
-
¿Qué versiones de bitcoinjs-lib incluyen las correcciones?
Los avisos indican correcciones en las versiones 5.2.2, 6.1.9 y 7.0.4 para sus respectivas líneas de lanzamiento.
-
¿Qué deberían hacer los responsables si no pueden actualizar?
Deberían verificar de forma independiente los valores de los outputs referenciados, rechazar registros en conflicto antes de firmar o confiar en las comisiones y verificar el valor de cada entrada antes de extraer una transacción.