CVE-2018-17144, cuja correção foi lançada em 18 de setembro nas versões 0.16.3 e 0.17.0rc4 do Bitcoin Core, inclui um componente de negação de serviço e uma vulnerabilidade crítica de inflação. Foi originalmente relatado a vários desenvolvedores que trabalham no Bitcoin Core, bem como a projetos que suportam outras criptomoedas, incluindo ABC e Unlimited em 17 de setembro apenas como um bug de negação de serviço, no entanto, rapidamente determinamos que o problema também era uma vulnerabilidade de inflação com o mesmo causa raiz e correção.
A fim de encorajar atualizações rápidas, foi tomada a decisão de corrigir e divulgar imediatamente a vulnerabilidade menos grave de negação de serviço, ao mesmo tempo que se chega aos mineiros, empresas e outros sistemas afetados, atrasando a publicação da edição completa para dar tempo aos sistemas para atualizar. No dia 20 de Setembro, uma publicação num fórum público relatou o impacto total e, embora tenha sido rapidamente retirada, a alegação continuou a circular.
Neste momento, acreditamos que mais da metade do hashrate do Bitcoin foi atualizado para nós corrigidos. Não temos conhecimento de quaisquer tentativas de explorar esta vulnerabilidade.
No entanto, ainda é fundamental que os usuários afetados atualizem e apliquem os patches mais recentes para garantir que não ocorra nenhuma possibilidade de grandes reorganizações, mineração de blocos inválidos ou aceitação de transações inválidas.
No Bitcoin Core 0.14, foi adicionada uma otimização (Bitcoin Core PR #9049) que evitou uma verificação dispendiosa durante a validação inicial do bloco pré-retransmissão de que múltiplas entradas em uma única transação não gastaram a mesma entrada duas vezes, o que foi adicionado em 2012 (PR # 443). Embora a lógica de atualização UTXO tenha conhecimento suficiente para verificar se tal condição não foi violada em 0.14, ela apenas o fez em uma afirmação de verificação de integridade e não com tratamento completo de erros (no entanto, ela tratou totalmente deste caso duas vezes antes de 0.8 ).
Assim, no Bitcoin Core 0.14.X, qualquer tentativa de gastar duas vezes uma saída de transação dentro de uma única transação dentro de um bloco resultará em uma falha de asserção e em um travamento, conforme relatado originalmente.
No Bitcoin Core 0.15, como parte de uma reformulação maior para simplificar o rastreamento de saída de transações não gastas e corrigir um ataque de esgotamento de recursos, a afirmação foi alterada sutilmente. Em vez de afirmar que a produção marcada como gasta não foi anteriormente gasta, apenas afirma que ela existe.
Assim, no Bitcoin Core 0.15.X, 0.16.0, 0.16.1 e 0.16.2, qualquer tentativa de gastar duas vezes a saída de uma transação dentro de uma única transação dentro de um bloco onde a saída gasta foi criada no mesmo bloco , ocorrerá a mesma falha de asserção (como existe no caso de teste incluído no patch 0.16.3). No entanto, se a saída que está sendo gasta duas vezes foi criada em um bloco anterior, uma entrada ainda permanecerá no mapa CCoin com o sinalizador DIRTY definido e tendo sido marcada como gasta, resultando em tal afirmação. Isso poderia permitir que um minerador inflacionasse o fornecimento de Bitcoin, pois seria então capaz de reivindicar o valor gasto duas vezes.
Cronograma para 17 de setembro de 2018: (todos os horários UTC)
- 14:57 repórter anônimo relata bug de travamento para: Pieter Wuille, Greg Maxwell, Wladimir Van Der Laan do Bitcoin Core, deadalnix do Bitcoin ABC e doente do Bitcoin Unlimited.
- 15:15 Greg Maxwell compartilha o relatório original com Cory Fields, Suhas Daftuar, Alex Morcos e Matt Corallo
- 17:47 Matt Corallo identifica bug da inflação
- 19:15 Matt Corallo primeiro tenta entrar em contato com o CEO do Slushpool para ter uma linha de comunicação aberta para aplicar um patch rapidamente
- 19:29 Greg Maxwell registra a data e hora do hash de um caso de teste que demonstra a vulnerabilidade à inflação (a47344b7dceddff6c6cc1c7e97f1588d99e6dba706011b6ccc2e615b88fe4350)
- 20:15 John Newbery e James O’Beirne são informados sobre a vulnerabilidade para que possam ajudar a alertar as empresas sobre um patch pendente para uma vulnerabilidade DoS
- 20:30 Matt Corallo fala com o CTO e CEO do slushpool e compartilha patch com divulgação da negação de serviço
- 20:48 Slushpool confirmado atualizado
- 21:08 Alerta foi enviado ao Bitcoin ABC de que um patch será publicado publicamente até às 22:00
- 21h30 (aproximadamente) Respondeu ao repórter original com um reconhecimento
- 21:57 Bitcoin Core PR 14247 publicado com patch e teste demonstrando o bug de negação de serviço
- 21:58 Bitcoin ABC publica seu patch
- 22:07 E-mail consultivo com link para Bitcoin Core PR e patch enviado para membros da Optech, entre outros
- 23:21 Bitcoin Core versão 0.17.0rc4 marcada
18 de setembro de 2018:
- 00:24 Bitcoin Core versão 0.16.3 marcada
- 20:44 Binários de lançamento do Bitcoin Core e anúncios de lançamento estavam disponíveis
- 21:47 Bitcointalk e reddit têm banners públicos pedindo às pessoas que atualizem
19 de setembro de 2018:
- 14:06 A lista de discussão distribui uma mensagem adicional pedindo às pessoas que façam upgrade por Pieter Wuille
20 de setembro de 2018:
- 19:50 David Jaenson descobriu a vulnerabilidade de forma independente e ela foi relatada ao e-mail de contato de segurança do Bitcoin Core.