Browse Source

Fix: do not accept or log invalid tunnel protocol values

Rod Hynes 6 years ago
parent
commit
b7d5a16488
1 changed files with 14 additions and 3 deletions
  1. 14 3
      psiphon/server/tunnelServer.go

+ 14 - 3
psiphon/server/tunnelServer.go

@@ -440,10 +440,21 @@ func (sshServer *sshServer) runListener(
 		// value, if present, in special cases where the listening port
 		// cannot distinguish the protocol.
 		tunnelProtocol := listenerTunnelProtocol
-		if clientTunnelProtocol != "" &&
-			protocol.UseClientTunnelProtocol(
+		if clientTunnelProtocol != "" {
+
+			if !common.Contains(runningProtocols, clientTunnelProtocol) {
+				log.WithContextFields(
+					LogFields{
+						"clientTunnelProtocol": clientTunnelProtocol}).
+					Warning("invalid client tunnel protocol")
+				clientConn.Close()
+				return
+			}
+
+			if protocol.UseClientTunnelProtocol(
 				clientTunnelProtocol, runningProtocols) {
-			tunnelProtocol = clientTunnelProtocol
+				tunnelProtocol = clientTunnelProtocol
+			}
 		}
 
 		// process each client connection concurrently