Divulgação de DoS devido ao crescimento excessivo dos conjuntos de entrada para envio

MEDIA TEAM

Antes do Bitcoin Core v25.0, o por peer m_tx_inventory_to_send os conjuntos poderiam crescer muito a ponto de a classificação desses conjuntos durante a construção de mensagens de inventário afetar a capacidade do nó de se comunicar com seus pares. As condições da rede no início de maio de 2023 desencadearam esse DoS e afetaram a propagação de blocos e transações.

Esta questão é considerada Médio gravidade.

Detalhes

Como parte da retransmissão de transações, o Bitcoin Core mantém uma rede por peer
m_tx_inventory_to_send definido com transações que devem ser anunciadas ao par. Ao construir uma mensagem de inventário para um ponto, o conjunto é classificado por dependências de transação e taxas para priorizar transações com taxas altas e evitar o vazamento da ordem que o nó aprendeu sobre as transações. Antes do Bitcoin Core v25.0, ao construir mensagens de inventário, transações relevantes (ainda no mempool, ainda não anunciadas pelo peer, acima do filtro de taxas) eram drenadas a uma taxa de 7 transações por segundo.

No início de maio de 2023, o aumento da atividade da rede fez com que os conjuntos crescessem mais rápido do que estavam sendo esgotados, resultando em um tempo significativo gasto na classificação dos conjuntos no thread de comunicação P2P. Além disso, os peers que apenas ouvem anúncios de transações, mas nunca os anunciam (comumente chamados de “nós espiões”), amplificaram isso ao terem conjuntos enormes (com transações que eles já conhecem) que levam muito tempo para serem classificados. Observou-se que a classificação consumiu quase todo o tempo gasto no thread de comunicação P2P, o que afetou significativamente a propagação de blocos e transações, bem como manteve ativa a conexão com os pares.

Isso foi corrigido em #27610 por 1) remoção antecipada de transações que não estão mais no mempool e 2) aumento dinâmico da taxa de drenagem definida dependendo do tamanho do conjunto.

Atribuição

O crédito vai para Anthony Towns por trabalhar em uma correção e para b10c por relatar inicialmente e restringir o problema à lenta classificação de entrada para envio.

Linha do tempo

  • 02/05/2023 – Problema observado e relatado pela primeira vez
  • 11/05/2023 – A correção foi mesclada (#27610)
  • 25/05/2023 – v25.0 é lançada
  • 09-10-2024 – Divulgação pública
Leave a comment

Leave a Reply

Your email address will not be published. Required fields are marked *