Skip to content

Commit 883ab67

Browse files
committed
docs(review): document I2P peer support review evidence
1 parent cc709ef commit 883ab67

5 files changed

Lines changed: 207 additions & 93 deletions

File tree

docs/pr-reviews-manual/pr-2050/destination-spoofing-analysis.md

Lines changed: 73 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
---
22
semantic-links:
33
pr: "https://github.com/torrust/torrust-tracker/pull/2050"
4+
superseding-pr: "https://github.com/torrust/torrust-tracker/pull/2059"
45
i2p-bittorrent-spec: "https://i2p.net/en/docs/applications/bittorrent/"
56
i2p-samv3: "https://i2p.net/en/docs/api/samv3"
67
related-artifacts:
@@ -16,6 +17,12 @@ This document records the destination-identity threat model for the I2P peer
1617
support proposed in PR #2050, evaluates deployment options, and defines the
1718
minimum requirements before the feature can be merged.
1819

20+
> **Review status (2026-08-18):** PR #2050 is the historical source under
21+
> review. The signed review baseline is `2050-i2p-peer-support-reviewed`, and
22+
> the active implementation proposal is draft
23+
> [PR #2059](https://github.com/torrust/torrust-tracker/pull/2059). Section 6
24+
> is the canonical security acceptance checklist for that draft.
25+
1926
It complements the [I2P addressing primer](i2p-addressing-primer.md) and the
2027
main [review report](review-pass-1.md).
2128

@@ -60,7 +67,7 @@ Assume an I2P swarm contains Alice, Bob, and Carol.
6067
Potential consequences:
6168

6269
- disclosure of I2P peer Destinations or compact Destination hashes to an
63-
unauthorized requester;
70+
unauthorized requester;
6471
- peer-record takeover because the swarm is keyed by `PeerAddress`;
6572
- manipulation of peer availability, announces, and swarm statistics;
6673
- unexpected connection attempts toward an impersonated peer;
@@ -69,6 +76,52 @@ Potential consequences:
6976
Authentication can restrict _who_ may announce, but it does not prove that an
7077
authenticated user owns the Destination they supply.
7178

79+
### 2.1 Fabricated-Destination spam and swarm pollution
80+
81+
Destination spoofing also enables a high-volume abuse case that does not
82+
require an attacker to know a victim's Destination. An attacker can submit
83+
many announces containing distinct, structurally valid, but attacker-unowned
84+
Destinations. The current query-parameter model validates Destination syntax;
85+
it does not prove that an announcer controls the corresponding private keys.
86+
87+
```text
88+
Attacker ── many HTTP announces ──► Torrust Tracker
89+
ip=<fabricated Destination 1>.i2p
90+
ip=<fabricated Destination 2>.i2p
91+
ip=<fabricated Destination N>.i2p
92+
```
93+
94+
Each accepted Destination can create a distinct `PeerAddress::I2p` record.
95+
At scale, this is more than a repeated instance of a victim-impersonation
96+
attack: it is a resource-exhaustion and swarm-integrity risk.
97+
98+
Potential consequences:
99+
100+
- memory, persistence, cleanup, metrics, and registry-index pressure from
101+
large numbers of short-lived peer records;
102+
- CPU consumption for request parsing, Base64 decoding, Destination
103+
validation/hashing, and swarm updates;
104+
- polluted peer lists that cause genuine clients to perform useless I2P lookup
105+
or connection work for nonexistent peers;
106+
- inflated availability and administrative statistics; and
107+
- aggregate bandwidth/CPU pressure from repeatedly generating peer responses,
108+
even when each individual response is bounded.
109+
110+
Trusted transport identity prevents an attacker from claiming arbitrary random
111+
Destinations: an I2P-enforced listener derives identity from the authenticated
112+
transport context. It does **not** prevent all high-volume abuse, because an
113+
attacker may still repeatedly announce from a genuine Destination or operate
114+
multiple genuine I2P identities. Those cases are conventional announce-rate
115+
limiting and Sybil-resistance concerns, separate from the claimed-identity
116+
trust boundary.
117+
118+
The secure deployment must therefore combine identity enforcement with
119+
operational abuse controls: bounded Destination input before decoding, per-
120+
Destination and trusted-source announce rate limits, limits on active I2P
121+
peers per swarm and globally, bounded `numwant`/response sizes, efficient peer
122+
expiry, and privacy-aware abuse metrics. These controls must not use an
123+
untrusted query Destination as their only identity key.
124+
72125
---
73126

74127
## 3. Why an I2P-only listener is insufficient
@@ -242,6 +295,17 @@ authenticated I2P identity.
242295
- [ ] Document an operational deployment where the I2P forwarding listener is
243296
loopback-only and cannot be reached directly from the public Internet.
244297

298+
### Operational abuse controls
299+
300+
Identity enforcement removes arbitrary claimed identities, but it is not a
301+
replacement for ordinary denial-of-service and Sybil controls. The design and
302+
deployment must define bounded Destination input before decoding, rate limits
303+
keyed by trusted Destination and trusted tunnel/proxy source, peer-count and
304+
response-size limits, expiry/cleanup behavior, and privacy-aware metrics. Test
305+
the configured limits with repeated announces from one trusted identity and
306+
with multiple trusted identities; do not use the unauthenticated query `ip`
307+
value as the sole rate-limit key.
308+
245309
---
246310

247311
## 7. Future architecture decision
@@ -260,12 +324,15 @@ The ADR should decide:
260324
5. Logging/redaction requirements for Destinations.
261325
6. Listener/network separation and migration behavior.
262326
7. Test/deployment requirements for secure operation.
327+
8. Rate-limiting, peer-admission, peer-expiry, and observability controls for
328+
fabricated-Destination spam and genuine-identity Sybil abuse.
263329

264330
---
265331

266-
## 8. Recommendation for PR #2050
332+
## 8. Recommendation for draft PR #2059
267333

268-
Keep PR #2050 as a draft until destination spoofing is addressed by one of the
269-
safe policy choices in Section 6. This is not merely a future enhancement: it
270-
is the trust boundary that determines whether the tracker records verified I2P
271-
peer identities or attacker-controlled claims.
334+
Keep PR #2059 as a draft until destination spoofing is addressed by one of the
335+
safe policy choices in Section 6. **No policy is selected or implemented in
336+
the current draft.** This is not merely a future enhancement: it is the trust
337+
boundary that determines whether the tracker records verified I2P peer
338+
identities or attacker-controlled claims.

docs/pr-reviews-manual/pr-2050/i2p-addressing-primer.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
---
22
semantic-links:
33
pr: "https://github.com/torrust/torrust-tracker/pull/2050"
4+
superseding-pr: "https://github.com/torrust/torrust-tracker/pull/2059"
45
i2p-bittorrent-spec: "https://i2p.net/en/docs/applications/bittorrent/"
56
i2p-common-structures-spec: "https://i2p.net/en/docs/specs/common-structures"
67
related-artifacts:
@@ -16,6 +17,12 @@ peer-support review. It is a review aid, not a replacement for the official
1617
[I2P BitTorrent specification](https://i2p.net/en/docs/applications/bittorrent/)
1718
or the [I2P common-structures specification](https://i2p.net/en/docs/specs/common-structures).
1819

20+
> **Review status (2026-08-18):** PR #2050 is the historical source for this
21+
> review. The signed review baseline is `2050-i2p-peer-support-reviewed`, and
22+
> the active proposal is draft [PR #2059](https://github.com/torrust/torrust-tracker/pull/2059).
23+
> This primer describes the required merge behavior for that draft; it does not
24+
> claim that all requirements are implemented.
25+
1926
---
2027

2128
## 1. Why I2P does not use an IP address and port

0 commit comments

Comments
 (0)