A malformed GETDATA message could trigger an infinite loop on the receiving node, using 100% of the CPU allocated to this thread and not making further progress on this connection.

This issue is considered Low severity.

Details

Before Bitcoin Core 0.20.0, an attacker (or buggy client, even) could send us a GETDATA message that would cause our net_processing thread to start spinning at 100%, and not make progress processing messages for the attacker peer anymore. It would still make progress processing messages from other peers, so it is just a CPU DoS with low impact beyond that (not making progress for attacker peers is a non-issue). It also increases per-peer long-term memory usage up by 1.5 MB per attacker peer.

John Newbery opened PR #18808 to fix this issue by only disclosing the lack of progress.

Attribution

Credits to John Newbery for finding this bug, responsibly disclosing it and fixing it.

Timeline

  • 2020-04-29 John Newbery opens #18808
  • 2020-05-08 John Newbery reports his finding by email
  • 2020-05-12 #18808 is merged
  • 2020-06-03 Bitcoin Core version 0.20.0 is released with a fix
  • 2021-09-13 The last vulnerable Bitcoin Core version (0.19.x) goes EOL
  • 2024-07-03 Public disclosure.