Loading changes/bug33545 0 → 100644 +4 −0 Original line number Diff line number Diff line o Minor bugfixes (hidden services): - Block a client-side assert by disallowing the registration of an x25519 client auth key that's all zeroes. Fixes bug 33545; bugfix on 0.4.3.1-alpha. Patch based on patch from "cypherpunks". No newline at end of file src/feature/control/control_hs.c +8 −1 Original line number Diff line number Diff line Loading @@ -55,6 +55,13 @@ parse_private_key_from_control_port(const char *client_privkey_str, goto err; } if (fast_mem_is_zero((const char*)privkey->secret_key, sizeof(privkey->secret_key))) { control_printf_endreply(conn, 553, "Invalid private key \"%s\"", key_blob); goto err; } retval = 0; err: Loading src/feature/hs/hs_client.c +7 −0 Original line number Diff line number Diff line Loading @@ -2132,6 +2132,13 @@ parse_auth_file_content(const char *client_key_str) "can't be decoded: %s", seckey_b32); goto err; } if (fast_mem_is_zero((const char*)auth->enc_seckey.secret_key, sizeof(auth->enc_seckey.secret_key))) { log_warn(LD_REND, "Client authorization private key can't be all-zeroes"); goto err; } strncpy(auth->onion_address, onion_address, HS_SERVICE_ADDR_LEN_BASE32); /* We are reading this from the disk, so set the permanent flag anyway. */ Loading src/feature/hs/hs_client.h +1 −1 Original line number Diff line number Diff line Loading @@ -45,7 +45,7 @@ typedef enum { REGISTER_SUCCESS_AND_DECRYPTED, /* We failed to register these credentials, because of a bad HS address. */ REGISTER_FAIL_BAD_ADDRESS, /* We failed to register these credentials, because of a bad HS address. */ /* We failed to store these credentials in a persistent file on disk. */ REGISTER_FAIL_PERMANENT_STORAGE, } hs_client_register_auth_status_t; Loading src/feature/hs/hs_descriptor.c +6 −2 Original line number Diff line number Diff line Loading @@ -1434,10 +1434,14 @@ decrypt_descriptor_cookie(const hs_descriptor_t *desc, tor_assert(!fast_mem_is_zero( (char *) &desc->superencrypted_data.auth_ephemeral_pubkey, sizeof(desc->superencrypted_data.auth_ephemeral_pubkey))); tor_assert(!fast_mem_is_zero((char *) client_auth_sk, sizeof(*client_auth_sk))); tor_assert(!fast_mem_is_zero((char *) desc->subcredential, DIGEST256_LEN)); /* Catch potential code-flow cases of an unitialized private key sneaking * into this function. */ if (BUG(fast_mem_is_zero((char *)client_auth_sk, sizeof(*client_auth_sk)))) { goto done; } /* Get the KEYS component to derive the CLIENT-ID and COOKIE-KEY. */ keystream_length = build_descriptor_cookie_keys(desc->subcredential, DIGEST256_LEN, Loading Loading
changes/bug33545 0 → 100644 +4 −0 Original line number Diff line number Diff line o Minor bugfixes (hidden services): - Block a client-side assert by disallowing the registration of an x25519 client auth key that's all zeroes. Fixes bug 33545; bugfix on 0.4.3.1-alpha. Patch based on patch from "cypherpunks". No newline at end of file
src/feature/control/control_hs.c +8 −1 Original line number Diff line number Diff line Loading @@ -55,6 +55,13 @@ parse_private_key_from_control_port(const char *client_privkey_str, goto err; } if (fast_mem_is_zero((const char*)privkey->secret_key, sizeof(privkey->secret_key))) { control_printf_endreply(conn, 553, "Invalid private key \"%s\"", key_blob); goto err; } retval = 0; err: Loading
src/feature/hs/hs_client.c +7 −0 Original line number Diff line number Diff line Loading @@ -2132,6 +2132,13 @@ parse_auth_file_content(const char *client_key_str) "can't be decoded: %s", seckey_b32); goto err; } if (fast_mem_is_zero((const char*)auth->enc_seckey.secret_key, sizeof(auth->enc_seckey.secret_key))) { log_warn(LD_REND, "Client authorization private key can't be all-zeroes"); goto err; } strncpy(auth->onion_address, onion_address, HS_SERVICE_ADDR_LEN_BASE32); /* We are reading this from the disk, so set the permanent flag anyway. */ Loading
src/feature/hs/hs_client.h +1 −1 Original line number Diff line number Diff line Loading @@ -45,7 +45,7 @@ typedef enum { REGISTER_SUCCESS_AND_DECRYPTED, /* We failed to register these credentials, because of a bad HS address. */ REGISTER_FAIL_BAD_ADDRESS, /* We failed to register these credentials, because of a bad HS address. */ /* We failed to store these credentials in a persistent file on disk. */ REGISTER_FAIL_PERMANENT_STORAGE, } hs_client_register_auth_status_t; Loading
src/feature/hs/hs_descriptor.c +6 −2 Original line number Diff line number Diff line Loading @@ -1434,10 +1434,14 @@ decrypt_descriptor_cookie(const hs_descriptor_t *desc, tor_assert(!fast_mem_is_zero( (char *) &desc->superencrypted_data.auth_ephemeral_pubkey, sizeof(desc->superencrypted_data.auth_ephemeral_pubkey))); tor_assert(!fast_mem_is_zero((char *) client_auth_sk, sizeof(*client_auth_sk))); tor_assert(!fast_mem_is_zero((char *) desc->subcredential, DIGEST256_LEN)); /* Catch potential code-flow cases of an unitialized private key sneaking * into this function. */ if (BUG(fast_mem_is_zero((char *)client_auth_sk, sizeof(*client_auth_sk)))) { goto done; } /* Get the KEYS component to derive the CLIENT-ID and COOKIE-KEY. */ keystream_length = build_descriptor_cookie_keys(desc->subcredential, DIGEST256_LEN, Loading