소스 검색

HSv3: Don't assert when reading bad client-side privkeys.

George Kadianakis 5 년 전
부모
커밋
3695ef6343
2개의 변경된 파일9개의 추가작업 그리고 1개의 파일을 삭제
  1. 6 0
      src/feature/hs/hs_client.c
  2. 3 1
      src/test/test_hs_client.c

+ 6 - 0
src/feature/hs/hs_client.c

@@ -1500,6 +1500,12 @@ parse_auth_file_content(const char *client_key_str)
     goto err;
     goto err;
   }
   }
 
 
+  if (strlen(seckey_b32) != BASE32_NOPAD_LEN(CURVE25519_PUBKEY_LEN)) {
+    log_warn(LD_REND, "Client authorization encoded base32 private key "
+                      "length is invalid: %s", seckey_b32);
+    goto err;
+  }
+
   auth = tor_malloc_zero(sizeof(hs_client_service_authorization_t));
   auth = tor_malloc_zero(sizeof(hs_client_service_authorization_t));
   if (base32_decode((char *) auth->enc_seckey.secret_key,
   if (base32_decode((char *) auth->enc_seckey.secret_key,
                     sizeof(auth->enc_seckey.secret_key),
                     sizeof(auth->enc_seckey.secret_key),

+ 3 - 1
src/test/test_hs_client.c

@@ -660,7 +660,9 @@ test_parse_auth_file_content(void *arg)
       "x:zdsyvn2jq534ugyiuzgjy4267jbtzcjbsgedhshzx5mforyxtryq"));
       "x:zdsyvn2jq534ugyiuzgjy4267jbtzcjbsgedhshzx5mforyxtryq"));
   /* Some malformed string. */
   /* Some malformed string. */
   tt_assert(!parse_auth_file_content("xx:descriptor:x25519:aa=="));
   tt_assert(!parse_auth_file_content("xx:descriptor:x25519:aa=="));
-
+  /* Bigger key than it should be */
+  tt_assert(!parse_auth_file_content("xx:descriptor:x25519:"
+                     "vjqea4jbhwwc4hto7ekyvqfbeodghbaq6nxi45hz4wr3qvhqv3yqa"));
  done:
  done:
   tor_free(auth);
   tor_free(auth);
 }
 }