Revert "Make ClientDNSRejectInternalAddresses testing-only."

This reverts commit 27fa4a98d2.
This commit is contained in:
Sebastian Hahn 2017-11-03 23:00:27 +01:00
parent 0386280487
commit 5a46074e55
6 changed files with 24 additions and 21 deletions

View file

@ -1440,6 +1440,12 @@ The following options are useful only for clients (that is, if
addresses/ports. See SocksPort for an explanation of isolation addresses/ports. See SocksPort for an explanation of isolation
flags. (Default: 0) flags. (Default: 0)
[[ClientDNSRejectInternalAddresses]] **ClientDNSRejectInternalAddresses** **0**|**1**::
If true, Tor does not believe any anonymously retrieved DNS answer that
tells it that an address resolves to an internal address (like 127.0.0.1 or
192.168.0.1). This option prevents certain browser-based attacks; don't
turn it off unless you know what you're doing. (Default: 1)
[[ClientRejectInternalAddresses]] **ClientRejectInternalAddresses** **0**|**1**:: [[ClientRejectInternalAddresses]] **ClientRejectInternalAddresses** **0**|**1**::
If true, Tor does not try to fulfill requests to connect to an internal If true, Tor does not try to fulfill requests to connect to an internal
address (like 127.0.0.1 or 192.168.0.1) __unless a exit node is address (like 127.0.0.1 or 192.168.0.1) __unless a exit node is
@ -2507,7 +2513,7 @@ The following options are used for running a testing Tor network.
4 (for 40 seconds), 8, 16, 32, 60 4 (for 40 seconds), 8, 16, 32, 60
ClientBootstrapConsensusMaxDownloadTries 80 ClientBootstrapConsensusMaxDownloadTries 80
ClientBootstrapConsensusAuthorityOnlyMaxDownloadTries 80 ClientBootstrapConsensusAuthorityOnlyMaxDownloadTries 80
TestingClientDNSRejectInternalAddresses 0 ClientDNSRejectInternalAddresses 0
ClientRejectInternalAddresses 0 ClientRejectInternalAddresses 0
CountPrivateBandwidth 1 CountPrivateBandwidth 1
ExitPolicyRejectPrivate 0 ExitPolicyRejectPrivate 0
@ -2718,13 +2724,6 @@ The following options are used for running a testing Tor network.
we replace it and issue a new key? we replace it and issue a new key?
(Default: 3 hours for link and auth; 1 day for signing.) (Default: 3 hours for link and auth; 1 day for signing.)
[[ClientDNSRejectInternalAddresses]] [[TestingClientDNSRejectInternalAddresses]] **TestingClientDNSRejectInternalAddresses** **0**|**1**::
If true, Tor does not believe any anonymously retrieved DNS answer that
tells it that an address resolves to an internal address (like 127.0.0.1 or
192.168.0.1). This option prevents certain browser-based attacks; don't
turn it off unless you know what you're doing. (Default: 1)
NON-PERSISTENT OPTIONS NON-PERSISTENT OPTIONS
---------------------- ----------------------

View file

@ -169,8 +169,6 @@ static config_abbrev_t option_abbrevs_[] = {
{ "BridgeAuthoritativeDirectory", "BridgeAuthoritativeDir", 0, 0}, { "BridgeAuthoritativeDirectory", "BridgeAuthoritativeDir", 0, 0},
{ "HashedControlPassword", "__HashedControlSessionPassword", 1, 0}, { "HashedControlPassword", "__HashedControlSessionPassword", 1, 0},
{ "VirtualAddrNetwork", "VirtualAddrNetworkIPv4", 0, 0}, { "VirtualAddrNetwork", "VirtualAddrNetworkIPv4", 0, 0},
{ "ClientDNSRejectInternalAddresses",
"TestingClientDNSRejectInternalAddresses", 0, 1, },
{ NULL, NULL, 0, 0}, { NULL, NULL, 0, 0},
}; };
@ -262,7 +260,7 @@ static config_var_t option_vars_[] = {
V(CircuitsAvailableTimeout, INTERVAL, "0"), V(CircuitsAvailableTimeout, INTERVAL, "0"),
V(CircuitStreamTimeout, INTERVAL, "0"), V(CircuitStreamTimeout, INTERVAL, "0"),
V(CircuitPriorityHalflife, DOUBLE, "-100.0"), /*negative:'Use default'*/ V(CircuitPriorityHalflife, DOUBLE, "-100.0"), /*negative:'Use default'*/
V(TestingClientDNSRejectInternalAddresses, BOOL,"1"), V(ClientDNSRejectInternalAddresses, BOOL,"1"),
V(ClientOnly, BOOL, "0"), V(ClientOnly, BOOL, "0"),
V(ClientPreferIPv6ORPort, AUTOBOOL, "auto"), V(ClientPreferIPv6ORPort, AUTOBOOL, "auto"),
V(ClientPreferIPv6DirPort, AUTOBOOL, "auto"), V(ClientPreferIPv6DirPort, AUTOBOOL, "auto"),
@ -648,7 +646,7 @@ static const config_var_t testing_tor_network_defaults[] = {
"0, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 8, 16, 32, 60"), "0, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 8, 16, 32, 60"),
V(ClientBootstrapConsensusMaxDownloadTries, UINT, "80"), V(ClientBootstrapConsensusMaxDownloadTries, UINT, "80"),
V(ClientBootstrapConsensusAuthorityOnlyMaxDownloadTries, UINT, "80"), V(ClientBootstrapConsensusAuthorityOnlyMaxDownloadTries, UINT, "80"),
V(TestingClientDNSRejectInternalAddresses, BOOL,"0"), V(ClientDNSRejectInternalAddresses, BOOL,"0"), // deprecated in 0.2.9.2-alpha
V(ClientRejectInternalAddresses, BOOL, "0"), V(ClientRejectInternalAddresses, BOOL, "0"),
V(CountPrivateBandwidth, BOOL, "1"), V(CountPrivateBandwidth, BOOL, "1"),
V(ExitPolicyRejectPrivate, BOOL, "0"), V(ExitPolicyRejectPrivate, BOOL, "0"),
@ -693,7 +691,14 @@ static const config_var_t testing_tor_network_defaults[] = {
#undef OBSOLETE #undef OBSOLETE
static const config_deprecation_t option_deprecation_notes_[] = { static const config_deprecation_t option_deprecation_notes_[] = {
/* Deprecated since 0.3.2.1-alpha. */ /* Deprecated since 0.2.9.2-alpha... */
{ "AllowDotExit", "Unrestricted use of the .exit notation can be used for "
"a wide variety of application-level attacks." },
{ "ClientDNSRejectInternalAddresses", "Turning this on makes your client "
"easier to fingerprint, and may open you to esoteric attacks." },
/* End of options deprecated since 0.2.9.2-alpha. */
/* Deprecated since 0.3.2.0-alpha. */
{ "HTTPProxy", "It only applies to direct unencrypted HTTP connections " { "HTTPProxy", "It only applies to direct unencrypted HTTP connections "
"to your directory server, which your Tor probably wasn't using." }, "to your directory server, which your Tor probably wasn't using." },
{ "HTTPProxyAuthenticator", "HTTPProxy is deprecated in favor of HTTPSProxy " { "HTTPProxyAuthenticator", "HTTPProxy is deprecated in favor of HTTPSProxy "
@ -4211,7 +4216,6 @@ options_validate(or_options_t *old_options, or_options_t *options,
CHECK_DEFAULT(TestingSigningKeySlop); CHECK_DEFAULT(TestingSigningKeySlop);
CHECK_DEFAULT(TestingAuthKeySlop); CHECK_DEFAULT(TestingAuthKeySlop);
CHECK_DEFAULT(TestingLinkKeySlop); CHECK_DEFAULT(TestingLinkKeySlop);
CHECK_DEFAULT(TestingClientDNSRejectInternalAddresses);
#undef CHECK_DEFAULT #undef CHECK_DEFAULT
if (options->SigningKeyLifetime < options->TestingSigningKeySlop*2) if (options->SigningKeyLifetime < options->TestingSigningKeySlop*2)

View file

@ -1344,7 +1344,7 @@ connection_ap_handshake_rewrite(entry_connection_t *conn,
/* Hang on, did we find an answer saying that this is a reverse lookup for /* Hang on, did we find an answer saying that this is a reverse lookup for
* an internal address? If so, we should reject it if we're configured to * an internal address? If so, we should reject it if we're configured to
* do so. */ * do so. */
if (options->TestingClientDNSRejectInternalAddresses) { if (options->ClientDNSRejectInternalAddresses) {
/* Don't let clients try to do a reverse lookup on 10.0.0.1. */ /* Don't let clients try to do a reverse lookup on 10.0.0.1. */
tor_addr_t addr; tor_addr_t addr;
int ok; int ok;

View file

@ -4204,7 +4204,7 @@ typedef struct {
/** If true, do not believe anybody who tells us that a domain resolves /** If true, do not believe anybody who tells us that a domain resolves
* to an internal address, or that an internal address has a PTR mapping. * to an internal address, or that an internal address has a PTR mapping.
* Helps avoid some cross-site attacks. */ * Helps avoid some cross-site attacks. */
int TestingClientDNSRejectInternalAddresses; int ClientDNSRejectInternalAddresses;
/** If true, do not accept any requests to connect to internal addresses /** If true, do not accept any requests to connect to internal addresses
* over randomly chosen exits. */ * over randomly chosen exits. */

View file

@ -949,7 +949,7 @@ connection_ap_process_end_not_open(
connection_mark_unattached_ap(conn, END_STREAM_REASON_TORPROTOCOL); connection_mark_unattached_ap(conn, END_STREAM_REASON_TORPROTOCOL);
return 0; return 0;
} }
if (get_options()->TestingClientDNSRejectInternalAddresses && if (get_options()->ClientDNSRejectInternalAddresses &&
tor_addr_is_internal(&addr, 0)) { tor_addr_is_internal(&addr, 0)) {
log_info(LD_APP,"Address '%s' resolved to internal. Closing,", log_info(LD_APP,"Address '%s' resolved to internal. Closing,",
safe_str(conn->socks_request->address)); safe_str(conn->socks_request->address));
@ -1366,7 +1366,7 @@ connection_edge_process_resolved_cell(edge_connection_t *conn,
goto done; goto done;
} }
if (get_options()->TestingClientDNSRejectInternalAddresses) { if (get_options()->ClientDNSRejectInternalAddresses) {
int orig_len = smartlist_len(resolved_addresses); int orig_len = smartlist_len(resolved_addresses);
SMARTLIST_FOREACH_BEGIN(resolved_addresses, address_ttl_t *, addr) { SMARTLIST_FOREACH_BEGIN(resolved_addresses, address_ttl_t *, addr) {
if (addr->hostname == NULL && tor_addr_is_internal(&addr->addr, 0)) { if (addr->hostname == NULL && tor_addr_is_internal(&addr->addr, 0)) {
@ -1459,7 +1459,7 @@ connection_edge_process_relay_cell_not_open(
if (tor_addr_family(&addr) != AF_UNSPEC) { if (tor_addr_family(&addr) != AF_UNSPEC) {
const sa_family_t family = tor_addr_family(&addr); const sa_family_t family = tor_addr_family(&addr);
if (tor_addr_is_null(&addr) || if (tor_addr_is_null(&addr) ||
(get_options()->TestingClientDNSRejectInternalAddresses && (get_options()->ClientDNSRejectInternalAddresses &&
tor_addr_is_internal(&addr, 0))) { tor_addr_is_internal(&addr, 0))) {
log_info(LD_APP, "...but it claims the IP address was %s. Closing.", log_info(LD_APP, "...but it claims the IP address was %s. Closing.",
fmt_addr(&addr)); fmt_addr(&addr));

View file

@ -112,7 +112,7 @@ test_relaycell_resolved(void *arg)
MOCK(connection_mark_unattached_ap_, mark_unattached_mock); MOCK(connection_mark_unattached_ap_, mark_unattached_mock);
MOCK(connection_ap_handshake_socks_resolved, socks_resolved_mock); MOCK(connection_ap_handshake_socks_resolved, socks_resolved_mock);
options->TestingClientDNSRejectInternalAddresses = 0; options->ClientDNSRejectInternalAddresses = 0;
SET_CELL(/* IPv4: 127.0.1.2, ttl 256 */ SET_CELL(/* IPv4: 127.0.1.2, ttl 256 */
"\x04\x04\x7f\x00\x01\x02\x00\x00\x01\x00" "\x04\x04\x7f\x00\x01\x02\x00\x00\x01\x00"
@ -151,7 +151,7 @@ test_relaycell_resolved(void *arg)
/* But we may be discarding private answers. */ /* But we may be discarding private answers. */
MOCK_RESET(); MOCK_RESET();
options->TestingClientDNSRejectInternalAddresses = 1; options->ClientDNSRejectInternalAddresses = 1;
r = connection_edge_process_resolved_cell(edgeconn, &cell, &rh); r = connection_edge_process_resolved_cell(edgeconn, &cell, &rh);
tt_int_op(r, OP_EQ, 0); tt_int_op(r, OP_EQ, 0);
ASSERT_MARK_CALLED(END_STREAM_REASON_DONE| ASSERT_MARK_CALLED(END_STREAM_REASON_DONE|