Commit 55cb6c3f authored by Nick Mathewson's avatar Nick Mathewson 🤹
Browse files

Merge branch 'bug33545_043_squashed' into maint-0.4.3

parents bfea7a73 f2f718bc
Loading
Loading
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
+8 −1
Original line number Diff line number Diff line
@@ -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:
+7 −0
Original line number Diff line number Diff line
@@ -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. */
+1 −1
Original line number Diff line number Diff line
@@ -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;

+6 −2
Original line number Diff line number Diff line
@@ -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