Skip to content

Commit 054d744

Browse files
committed
posts: disclose historical DoS vulnerability (header spam)
1 parent d2943c5 commit 054d744

File tree

1 file changed

+48
-0
lines changed

1 file changed

+48
-0
lines changed
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
---
2+
title: Disclosure of memory DoS using low-difficulty headers (≤ version 0.14.3)
3+
name: blog-disclose-header-spam-checkpoint-bypass
4+
id: en-blog-disclose-header-spam-checkpoint-bypass
5+
lang: en
6+
type: advisory
7+
layout: post
8+
9+
## If this is a new post, reset this counter to 1.
10+
version: 1
11+
12+
## Only true if release announcement or security annoucement. English posts only
13+
announcement: 1
14+
15+
excerpt: >
16+
After Bitcoin Core 0.12.0 and before Bitcoin Core 0.15.0 a node could be spammed with minimum difficulty headers, which could possibly be leveraged to crash it by OOM.
17+
---
18+
19+
After Bitcoin Core 0.12.0 and before Bitcoin Core 0.15.0 a node could be spammed with minimum
20+
difficulty headers, which could possibly be leveraged to crash it by OOM.
21+
22+
This issue is considered **Medium** severity.
23+
24+
## Details
25+
26+
Before the introduction of [headers
27+
pre-synchronisation](https://github.com/bitcoin/bitcoin/pull/25717), nodes relied exclusively on
28+
checkpoints to avoid getting spammed by low-difficulty headers.
29+
30+
In Bitcoin Core 0.12.0 a check for headers forking before the last checkpoint's height was moved to
31+
after storing the header in `mapBlockIndex`. This allowed an attacker to grow the map unboundedly by
32+
spamming headers whose parent is the genesis block (which only need difficulty 1 to create), as such
33+
blocks bypassed the checkpoint logic.
34+
35+
## Attribution
36+
37+
Credits to Cory Fields for finding and responsibly disclosing the bug.
38+
39+
## Timeline
40+
41+
- 2017-08-08 Cory Fields privately reports the bug
42+
- 2017-08-11 Pieter Wuille opens [PR #11028](https://github.com/bitcoin/bitcoin/pull/11028) to fix it
43+
- 2017-08-14 PR #11028 is merged
44+
- 2017-09-14 Bitcoin Core version 0.15.0 is released with a fix
45+
- 2018-10-03 The last vulnerable version of Bitcoin Core (0.14.3) goes end of life
46+
- 2024-07-03 Public disclosure.
47+
48+
{% include references.md %}

0 commit comments

Comments
 (0)