Signing in Bitcoin Core 26.2 no longer assumes a TapMiniscript is sane (#29853), getnetworkhashps throws an error on invalid parameters (#28554), and setmocktime has an enforced maximum (#29869). Builds also work with miniupnpc 2.2.8.
Received messages could reach 32 MiB before Bitcoin Core 0.10.1, so an attacker could force that much RAM allocation per connection and possibly crash the node. Bitcointalk user Evil-Knievel reported it; #5843 cut the limit to 2 MiB, later raised to 4 MB for Segwit. A disclosure announced for 2015 was postponed, and the details came out in 2024.
IPv6 made it cheap to bloat Bitcoin Core's unbounded ban list, and each GETADDR message then forced a scan of that list for every address returned, up to 2500 of them. Rated High, the memory crash and CPU drain were both fixed by #19219, released in 0.20.1 and 0.21.0.
Two bugs in version message handling, a signed-integer overflow and an abs64 logic error, let an attacker skew a victim's adjusted time until it rejected new blocks as dated too far in the future. The attacker had to be among the first 200 peers to connect. Rated Medium, the flaw was fixed in Bitcoin Core 0.21.0.
Opening a rogue BIP72 payment link could crash Bitcoin-Qt: its r parameter could point at a huge file, and the app would try to allocate memory for it while the download ran quietly in the background. The Medium-severity bug disappeared when #17165 removed BIP70 support, shipped in 0.20.0.
Crafted orphan transactions, invalid but costly to validate, could stall a node for hours, because every newly accepted transaction set off a quadratic search of the orphan cache. Pieter Wuille's #15644 breaks off that work to handle new messages as soon as a match turns up. The High-severity fix reached users in Bitcoin Core 0.18.0.
A malformed GETDATA message could leave the net_processing thread spinning at 100% CPU in Bitcoin Core versions before 0.20.0, adding 1.5 MB of memory per attacking peer. Other peers kept being served, hence the Low rating. John Newbery found the bug and fixed it in #18808.
Headers built directly on the genesis block, needing only difficulty 1, slipped past checkpoint logic from Bitcoin Core 0.12.0 until 0.15.0, so a spammer could grow mapBlockIndex without limit and possibly crash the node out of memory. Cory Fields reported the Medium-severity bug in 2017, and #11028 closed it.
One INV packed with 50,000 block items could make a node queue 50,000 getheaders responses of about 1 kB each, and a peer refusing to read them kept that 50 MB send buffer full. John Newbery's #18962, pitched as a bandwidth saving, sent one GETHEADERS per INV and shipped in 0.20.0.
Withholding GETDATA replies, then spamming bogus announcements to evict a transaction from the 50,000-entry g_already_asked_for map, let an attacker re-announce it over and over and stop the victim from requesting it from anyone else. John Newbery disclosed the bug, rated Medium; Pieter Wuille's #19988 fixed it in Bitcoin Core 0.21.0.
A second buffer overflow in miniupnpc, found by Wladimir J. Van Der Laan, leaked data and could be chained with CVE-2015-6031 into remote code execution, which he demonstrated against Ubuntu's miniupnpc 1.6-precise. His exploit did not port directly to Bitcoin Core, and version 0.12 carried the fix in February 2016.
Bug fixes fill Bitcoin Core 27.1: the GUI's fee bump for unsigned transactions is repaired, its proxy IP field no longer accepts a port, and GetAddedNodeInfo() now detects addnode CJDNS peers (#30085). TapMiniscript handling during signing changes too (#29853).
BIP324 v2 transport turns on by default in Bitcoin Core 27.0, and the new CoinGrinder algorithm looks for the lightest input set at feerates of 30 sat/vB and up. Network-adjusted time leaves consensus code in favour of system time, so accurate clocks matter more for operators. libbitcoinconsensus is deprecated, with removal planned for v28.
Nodes on Bitcoin Core 25.2 stop processing mutated blocks (#29412). The update also fixes a getrawtransaction segfault (#29003), a use-after-free in WalletBatch::EraseRecords (#29176) and a GUI crash when selecting "Mask values".
I2P sessions in Bitcoin Core 26.1 use both ECIES-X25519 and ElGamal encryption (#29200), and the node now logs progress while loading the mempool. Fixes include a refusal to process mutated blocks (#29412) and a wallet that skips BnB coin selection when SFFO is on (#28994).
Experimental BIP324 v2 transport debuts in Bitcoin Core 26.0, off by default and enabled with -v2transport. A new loadtxoutset RPC loads assumeutxo snapshots, giving a usable node in minutes while the original chainstate finishes validating in the background, and submitpackage sends raw transactions to the mempool as a package.
Stale fee estimates are no longer served by Bitcoin Core 24.2 (#27622), and RPC handling of invalid bech32 addresses is corrected (#27727). Most other changes touch the build system and CI, including a fix for the macOS Qt package build with the Xcode 15 linker (#28543).
Parallel compact block downloads land in Bitcoin Core 25.1 (#27626). Other fixes cover a REST crash on /deploymentinfo (#27853), server shutdown after a remote client disconnects (#28551) and wallet migration, which now refuses invalid scripts (#28125).
Descriptor wallet rescans get faster in Bitcoin Core 25.0 when BIP158 compact block filters are available through -blockfilterindex=1, and a new scanblocks RPC searches those filters. Relay policy now accepts transactions from 65 non-witness bytes upward. Under -blocksonly, maximum mempool memory falls from 300MB to 5MB.
Three P2P changes carry Bitcoin Core 23.2: no more peers.dat corruption (#26909), no premature clearing of other peers' download state (#27608) and faster inv-to-send queues (#27610). The rest is build and CI work, such as compiling bdb with clang-16 on aarch64.