From ad64e9c21ec5e8d770fce1d506ad4de7b7d434e5 Mon Sep 17 00:00:00 2001 From: zzz <zzz@i2pmail.org> Date: Thu, 26 Jan 2023 07:13:54 -0500 Subject: [PATCH] SSU2: Zero out intermediate handshake KDF results in-memory when done Minor cleanup in est. mgr --- .../net/i2p/router/transport/udp/EstablishmentManager.java | 2 +- .../i2p/router/transport/udp/InboundEstablishState2.java | 6 ++++++ .../i2p/router/transport/udp/OutboundEstablishState2.java | 6 ++++++ 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/router/java/src/net/i2p/router/transport/udp/EstablishmentManager.java b/router/java/src/net/i2p/router/transport/udp/EstablishmentManager.java index 4914b7628b..82491dc811 100644 --- a/router/java/src/net/i2p/router/transport/udp/EstablishmentManager.java +++ b/router/java/src/net/i2p/router/transport/udp/EstablishmentManager.java @@ -826,10 +826,10 @@ class EstablishmentManager { if (_transport.isTooClose(to.getIP())) return; DatagramPacket pkt = fromPacket.getPacket(); - int off = pkt.getOffset(); int len = pkt.getLength(); if (len < MIN_LONG_DATA_LEN) return; + int off = pkt.getOffset(); byte data[] = pkt.getData(); int type = data[off + TYPE_OFFSET] & 0xff; if (type == SSU2Util.SESSION_REQUEST_FLAG_BYTE && len < MIN_SESSION_REQUEST_LEN) diff --git a/router/java/src/net/i2p/router/transport/udp/InboundEstablishState2.java b/router/java/src/net/i2p/router/transport/udp/InboundEstablishState2.java index 15555ca2c7..c4f8df7e6d 100644 --- a/router/java/src/net/i2p/router/transport/udp/InboundEstablishState2.java +++ b/router/java/src/net/i2p/router/transport/udp/InboundEstablishState2.java @@ -7,6 +7,7 @@ import java.net.InetSocketAddress; import java.net.SocketAddress; import java.net.UnknownHostException; import java.security.GeneralSecurityException; +import java.util.Arrays; import java.util.ArrayList; import java.util.List; @@ -829,6 +830,11 @@ class InboundEstablishState2 extends InboundEstablishState implements SSU2Payloa "\nGenerated header key 2 for A->B: " + Base64.encode(h_ab) + "\nGenerated header key 2 for B->A: " + Base64.encode(h_ba)); ****/ + Arrays.fill(ckd, (byte) 0); + Arrays.fill(k_ab, (byte) 0); + Arrays.fill(k_ba, (byte) 0); + Arrays.fill(d_ab, (byte) 0); + Arrays.fill(d_ba, (byte) 0); _handshakeState.destroy(); if (_createdSentCount == 1) _rtt = (int) ( _context.clock().now() - _lastSend ); diff --git a/router/java/src/net/i2p/router/transport/udp/OutboundEstablishState2.java b/router/java/src/net/i2p/router/transport/udp/OutboundEstablishState2.java index 0e98bac858..092e203375 100644 --- a/router/java/src/net/i2p/router/transport/udp/OutboundEstablishState2.java +++ b/router/java/src/net/i2p/router/transport/udp/OutboundEstablishState2.java @@ -6,6 +6,7 @@ import java.net.InetSocketAddress; import java.net.SocketAddress; import java.net.UnknownHostException; import java.security.GeneralSecurityException; +import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -766,6 +767,11 @@ class OutboundEstablishState2 extends OutboundEstablishState implements SSU2Payl "\nGenerated header key 2 for A->B: " + Base64.encode(h_ab) + "\nGenerated header key 2 for B->A: " + Base64.encode(h_ba)); ****/ + Arrays.fill(ckd, (byte) 0); + Arrays.fill(k_ab, (byte) 0); + Arrays.fill(k_ba, (byte) 0); + Arrays.fill(d_ab, (byte) 0); + Arrays.fill(d_ba, (byte) 0); _handshakeState.destroy(); if (_requestSentCount == 1) _rtt = (int) ( _context.clock().now() - _lastSend ); -- GitLab