Disclosure of CPU DoS due to malicious P2P message (≤ version 0.19.2)

Bitcoin Core writes:
Disclosure of CPU DoS due to malicious P2P message (≤ version 0.19.2)

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.