Duas vulnerabilidades do bitcoinjs-lib podem levar as aplicações a subestimar a taxa de mineração de uma transação Bitcoin válida. Os avisos de 26 de outubro indicam correções nas versões 5.2.2, 6.1.9 e 7.0.4. O fluxo afetado utiliza transações Bitcoin parcialmente assinadas, ou PSBTs, nas quais as aplicações transferem dados de transações e assinaturas entre clientes.
Numa das falhas, a assinatura e a contabilização da taxa podem usar valores diferentes para a mesma entrada. Uma demonstração no bitcoinjs-lib 7.0.1 mostrou uma taxa real de 900,000,000 satoshi reportada como apenas 200 satoshi, permitindo que a transação passasse pelo aviso predefinido de taxa. A segunda falha envolve entradas finalizadas sem registos de valor. O exemplo hipotético mostrou uma taxa real de 91,000 satoshi reportada como 1,000 satoshi.
Porque é importante
Os bugs não criam assinaturas nem autorizam transferências por si só. Para haver perda, é necessário que uma transação autorizada e válida seja transmitida e aceite pela rede Bitcoin, com o valor excedente pago como taxa de mineração. O risco concentra-se nas aplicações que confiam no cálculo de taxas do bitcoinjs-lib ou nas proteções contra taxas excessivas sem verificarem de forma independente as saídas gastas.
As versões afetadas incluem 5.2.0 a 5.2.1, 6.0.0 a 6.1.8 e 7.0.0-rc.0 a 7.0.3 no caso da falha de registos em conflito. A falha de registos em falta também afeta as versões 5.1.0 a 5.2.1.
Impacto no mercado
Trata-se de um problema de segurança de aplicações e carteiras, não de uma falha de consenso da Bitcoin. Os responsáveis pela manutenção devem atualizar para as versões corrigidas, rejeitar valores de entrada ou scripts em conflito e verificar o valor de cada entrada antes de assinar, confiar nas taxas ou extrair uma transação.
A correção fornece à assinatura e à contabilização um método partilhado para resolver saídas anteriores, exige um montante para cada entrada durante o cálculo da taxa e limpa as taxas guardadas em cache e as transações extraídas após alterações relevantes nos metadados. As equipas que não possam atualizar devem verificar de forma independente os valores das saídas referenciadas.
Perguntas frequentes
-
O que corrigiu o bitcoinjs-lib?
Corrigiu dois bugs que poderiam levar as aplicações a subestimar as taxas de mineração ao processarem transações Bitcoin parcialmente assinadas.
-
Qual foi a dimensão da discrepância da taxa numa das demonstrações?
Uma demonstração no bitcoinjs-lib 7.0.1 mostrou uma taxa real de 900,000,000 satoshi reportada como 200 satoshi.
-
As vulnerabilidades podem transferir Bitcoin sem uma assinatura?
Não. As falhas não criam assinaturas nem autorizam transferências. Para haver perda, é necessário que uma transação autorizada e válida seja transmitida e aceite.
-
Que versões do bitcoinjs-lib contêm as correções?
Os avisos indicam correções nas versões 5.2.2, 6.1.9 e 7.0.4, correspondentes às respetivas linhas de lançamento.
-
O que devem fazer os responsáveis se não puderem atualizar?
Devem verificar de forma independente os valores das saídas referenciadas, rejeitar registos em conflito antes de assinar ou confiar nas taxas e verificar o valor de cada entrada antes de extrair uma transação.