From 034db1a28287c726878b6cb0268fee1e9df677a7 Mon Sep 17 00:00:00 2001 From: zzz Date: Sat, 6 Oct 2012 14:58:42 +0000 Subject: [PATCH] Validate port/IP in received peer tests --- history.txt | 1 + router/java/src/net/i2p/router/RouterVersion.java | 2 +- .../i2p/router/transport/udp/PeerTestManager.java | 12 ++++++++++-- 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/history.txt b/history.txt index 21e8c6c4d1..070d8aeb5e 100644 --- a/history.txt +++ b/history.txt @@ -8,6 +8,7 @@ * SSU: - Throttle outbound destroys on shutdown - Limit outbound introduction offers + - Validate port/IP in received peer tests 2012-10-05 zzz * configservice.jsp: Add GC button diff --git a/router/java/src/net/i2p/router/RouterVersion.java b/router/java/src/net/i2p/router/RouterVersion.java index a6204817e3..f2522cd4ed 100644 --- a/router/java/src/net/i2p/router/RouterVersion.java +++ b/router/java/src/net/i2p/router/RouterVersion.java @@ -18,7 +18,7 @@ public class RouterVersion { /** deprecated */ public final static String ID = "Monotone"; public final static String VERSION = CoreVersion.VERSION; - public final static long BUILD = 8; + public final static long BUILD = 9; /** for example "-test" */ public final static String EXTRA = ""; diff --git a/router/java/src/net/i2p/router/transport/udp/PeerTestManager.java b/router/java/src/net/i2p/router/transport/udp/PeerTestManager.java index 2623c07cc4..4ea51142c4 100644 --- a/router/java/src/net/i2p/router/transport/udp/PeerTestManager.java +++ b/router/java/src/net/i2p/router/transport/udp/PeerTestManager.java @@ -433,11 +433,18 @@ class PeerTestManager { testIP = new byte[testInfo.readIPSize()]; testInfo.readIP(testIP, 0); } - + PeerTestState state = _activeTests.get(Long.valueOf(nonce)); if (state == null) { - if ( (testIP == null) || (testPort <= 0) ) { + // NEW TEST + if ((testPort > 0 && (testPort < 1024 || testPort > 65535)) || + (testIP != null && !_transport.isValid(testIP))) { + // spoof check, and don't respond to privileged ports + if (_log.shouldLog(Log.WARN)) + _log.warn("Invalid IP/Port rcvd in PeerTest: " + Addresses.toString(testIP, testPort)); + return; + } else if ( (testIP == null) || (testPort <= 0) ) { // we are bob, since we haven't seen this nonce before AND its coming from alice if (_log.shouldLog(Log.DEBUG)) _log.debug("test IP/port are blank coming from " + from + ", assuming we are Bob and they are alice"); @@ -455,6 +462,7 @@ class PeerTestManager { } } } else { + // EXISTING TEST if (state.getOurRole() == PeerTestState.BOB) { if (DataHelper.eq(from.getIP(), state.getAliceIP().getAddress()) && (from.getPort() == state.getAlicePort()) ) {