11---
22semantic-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
1617support proposed in PR #2050 , evaluates deployment options, and defines the
1718minimum 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+
1926It complements the [ I2P addressing primer] ( i2p-addressing-primer.md ) and the
2027main [ review report] ( review-pass-1.md ) .
2128
@@ -60,7 +67,7 @@ Assume an I2P swarm contains Alice, Bob, and Carol.
6067Potential 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:
6976Authentication can restrict _ who_ may announce, but it does not prove that an
7077authenticated 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:
2603245 . Logging/redaction requirements for Destinations.
2613256 . Listener/network separation and migration behavior.
2623267 . 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.
0 commit comments