Um nó pode ficar paralisado por horas ao processar os órfãos de uma transação não confirmada especialmente criada.
Esta questão é considerada Alto gravidade.
Detalhes
Depois de aceitar uma transação em seu mempool, o nó percorreria seu cache de transações órfãs para descobrir se essa nova transação aceita possibilita a aceitação de alguma. Essa busca era quadrática: para cada saída na transação recém-aceita, ela passaria por todas as transações órfãs armazenadas em cache (limitado a 100). Ao criar especialmente as transações órfãs para serem inválidas, mas caras para validar, um nó pode ficar paralisado por várias horas.
A barraca foi consertada por Pieter Wuille em RP #15644
interrompendo a resolução órfã para processar novas mensagens quando uma correspondência for encontrada (independentemente de o órfão ser válido ou não).
Atribuição
Créditos a sec.eine por divulgar o bug de forma responsável e fornecer feedback sobre a correção.
Linha do tempo
- 19/03/2019 sec.eine relata o problema a Greg Maxwell por e-mail
- 21/03/2019 Greg Maxwell responde com informações sobre o patch proposto
- 22/03/2019 sec.eine dá feedback sobre o patch (“parece sólido e (..) não atrai atenção”)
- 22/03/2019 Pieter Wuille abre PR #15644
- 01/04/2019 PR #15644 foi mesclado
- 18/05/2019 Bitcoin Core versão 0.18.0 é lançada com uma correção
- 2020-07-22 O problema é parcialmente divulgado durante um clube de revisão de relações públicas
- 2020-08-01 A última versão vulnerável do Bitcoin Core (0.17.x) chega ao EOL
- 2024-07-03 Divulgação pública.