From f4754b9dfb84859166843fb2a1888fb3cfebf73c Mon Sep 17 00:00:00 2001 From: Martin Zumsande Date: Tue, 11 Apr 2023 15:27:13 -0400 Subject: [PATCH] net: restrict self-advertisements with privacy networks Stop advertising 1) our i2p/onion address to peers from other networks 2) Local addresses of non-privacy networks to i2p/onion peers Doing so could lead to fingerprinting ourselves. Co-authored-by: Vasil Dimov --- src/net.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/net.cpp b/src/net.cpp index 9379f5be78a..ac94f14fcc8 100644 --- a/src/net.cpp +++ b/src/net.cpp @@ -164,6 +164,16 @@ bool GetLocal(CService& addr, const CNode& peer) LOCK(g_maplocalhost_mutex); for (const auto& entry : mapLocalHost) { + // For privacy reasons, don't advertise our privacy-network address + // to other networks and don't advertise our other-network address + // to privacy networks. + const Network our_net{entry.first.GetNetwork()}; + const Network peers_net{peer.ConnectedThroughNetwork()}; + if (our_net != peers_net && + (our_net == NET_ONION || our_net == NET_I2P || + peers_net == NET_ONION || peers_net == NET_I2P)) { + continue; + } int nScore = entry.second.nScore; int nReachability = entry.first.GetReachabilityFrom(peer.addr); if (nReachability > nBestReachability || (nReachability == nBestReachability && nScore > nBestScore))