aboutsummaryrefslogtreecommitdiff
path: root/src/p2p
diff options
context:
space:
mode:
authorLee *!* Clagett <code@leeclagett.com>2024-12-19 15:26:29 -0500
committerLee *!* Clagett <code@leeclagett.com>2025-01-03 19:13:06 -0500
commite99ef92a18801a237e46ea6959a8bcc565db8ffe (patch)
tree8acbd14428ef965017798571e608ccc5adbc48be /src/p2p
parent2fe0f04c1e2eafdea998aa96fa5c116cc871696b (diff)
downloadmonzero-core-e99ef92a18801a237e46ea6959a8bcc565db8ffe.tar.gz
monzero-core-e99ef92a18801a237e46ea6959a8bcc565db8ffe.tar.xz
monzero-core-e99ef92a18801a237e46ea6959a8bcc565db8ffe.zip
Fix --anonymous-inbound data leak
Diffstat (limited to 'src/p2p')
-rw-r--r--src/p2p/net_node.inl25
1 files changed, 14 insertions, 11 deletions
diff --git a/src/p2p/net_node.inl b/src/p2p/net_node.inl
index 08cd70cae..284de3c6d 100644
--- a/src/p2p/net_node.inl
+++ b/src/p2p/net_node.inl
@@ -2493,6 +2493,20 @@ namespace nodetool
std::vector<peerlist_entry> local_peerlist_new;
zone.m_peerlist.get_peerlist_head(local_peerlist_new, true, max_peerlist_size);
+ /* Tor/I2P nodes receiving connections via forwarding (from tor/i2p daemon)
+ do not know the address of the connecting peer. This is relayed to them,
+ iff the node has setup an inbound hidden service.
+
+ \note Insert into `local_peerlist_new` so that it is only sent once like
+ the other peers. */
+ if(outgoing_to_same_zone)
+ {
+ local_peerlist_new.insert(
+ local_peerlist_new.begin() + crypto::rand_range(std::size_t(0), local_peerlist_new.size()),
+ peerlist_entry{zone.m_our_address, zone.m_config.m_peer_id, 0}
+ );
+ }
+
//only include out peers we did not already send
rsp.local_peerlist_new.reserve(local_peerlist_new.size());
for (auto &pe: local_peerlist_new)
@@ -2503,17 +2517,6 @@ namespace nodetool
}
m_payload_handler.get_payload_sync_data(rsp.payload_data);
- /* Tor/I2P nodes receiving connections via forwarding (from tor/i2p daemon)
- do not know the address of the connecting peer. This is relayed to them,
- iff the node has setup an inbound hidden service. The other peer will have
- to use the random peer_id value to link the two. My initial thought is that
- the inbound peer should leave the other side marked as `<unknown tor host>`,
- etc., because someone could give faulty addresses over Tor/I2P to get the
- real peer with that identity banned/blacklisted. */
-
- if(outgoing_to_same_zone)
- rsp.local_peerlist_new.push_back(peerlist_entry{zone.m_our_address, zone.m_config.m_peer_id, std::time(nullptr)});
-
LOG_DEBUG_CC(context, "COMMAND_TIMED_SYNC");
return 1;
}