]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
Validating SOCKS5 hostname more correctly.
authorrl1987 <rl1987@sdf.lonestar.org>
Sun, 12 Oct 2014 18:04:15 +0000 (21:04 +0300)
committerNick Mathewson <nickm@torproject.org>
Tue, 4 Nov 2014 05:36:42 +0000 (00:36 -0500)
src/or/buffers.c
src/test/test_socks.c

index d174f8147a82bfce6b60783551f87f3b151d76a9..e98f56932d98ecfb284ab933815838e2b7a5a035 100644 (file)
@@ -2048,7 +2048,15 @@ parse_socks(const char *data, size_t datalen, socks_request_t *req,
           req->address[len] = 0;
           req->port = ntohs(get_uint16(data+5+len));
           *drain_out = 5+len+2;
-          if (!tor_strisprint(req->address) || strchr(req->address,'\"')) {
+
+          if (string_is_valid_ipv4_address(req->address)) {
+            log_unsafe_socks_warning(5,req->address,req->port,safe_socks);
+
+            if (safe_socks)
+              return -1;
+          }
+
+          if (!string_is_valid_hostname(req->address)) {
             log_warn(LD_PROTOCOL,
                      "Your application (using socks5 to port %d) gave Tor "
                      "a malformed hostname: %s. Rejecting the connection.",
index 2b8f824b500f6a0cb8d3e0189ab51907c2fc1bba..b9520b5c5c54d82d603ea27cc5bf7b3876e050d8 100644 (file)
@@ -229,6 +229,17 @@ test_socks_5_supported_commands(void *ptr)
   tt_int_op(0,==, buf_datalen(buf));
   socks_request_clear(socks);
 
+  /* SOCKS 5 Should reject RESOLVE [F0] request for IPv4 address
+   * string if SafeSocks is enabled. */
+
+  ADD_DATA(buf, "\x05\x01\x00");
+  ADD_DATA(buf, "\x05\xF0\x00\x03\x07");
+  ADD_DATA(buf, "8.8.8.8");
+  ADD_DATA(buf, "\x01\x02");
+  tt_assert(fetch_from_buf_socks(buf,socks,get_options()->TestSocks,1)
+            == -1);
+  socks_request_clear(socks);
+
   /* SOCKS 5 Send RESOLVE_PTR [F1] for IP address 2.2.2.5 */
   ADD_DATA(buf, "\x05\x01\x00");
   ADD_DATA(buf, "\x05\xF1\x00\x01\x02\x02\x02\x05\x01\x03");