commit 33da2abd0571a4c4e21d5841bab1be336bca3a5a Author: teor (Tim Wilson-Brown) teor2345@gmail.com Date: Wed Jul 6 16:50:48 2016 +1000
Authorities reject descriptors without ntor keys
Before, they checked for version 0.2.4.18-rc or later, but this would not catch relays without version lines, or buggy or malicious relays missing an ntor key. --- changes/reject-tap | 4 ++++ src/or/dirserv.c | 16 ++++++++++++++++ 2 files changed, 20 insertions(+)
diff --git a/changes/reject-tap b/changes/reject-tap new file mode 100644 index 0000000..85fffc5 --- /dev/null +++ b/changes/reject-tap @@ -0,0 +1,4 @@ + o Major bug fixes (circuit building): + - Authorites should not trust the version a relay claims (if any), + instead, they should check specifically for an ntor key. + Fixes bug 19163; bugfix on 0.2.4.18-rc. diff --git a/src/or/dirserv.c b/src/or/dirserv.c index 64ebde6..ef3a305 100644 --- a/src/or/dirserv.c +++ b/src/or/dirserv.c @@ -255,6 +255,22 @@ dirserv_router_get_status(const routerinfo_t *router, const char **msg, return FP_REJECT; }
+ /* dirserv_get_status_impl already rejects versions older than 0.2.4.18-rc, + * and onion_curve25519_pkey was introduced in 0.2.4.8-alpha. + * But just in case a relay doesn't provide or lies about its version, or + * doesn't include an ntor key in its descriptor, check that it exists, + * and is non-zero (clients check that it's non-zero before using it). */ + if (router->onion_curve25519_pkey == NULL || + tor_mem_is_zero((const char*)router->onion_curve25519_pkey->public_key, + CURVE25519_PUBKEY_LEN)) { + log_fn(severity, LD_DIR, + "Descriptor from router %s is missing an ntor curve25519 onion " + "key.", router_describe(router)); + if (msg) + *msg = "Missing ntor curve25519 onion key. Please upgrade!"; + return FP_REJECT; + } + if (router->cache_info.signing_key_cert) { /* This has an ed25519 identity key. */ if (KEYPIN_MISMATCH ==
tor-commits@lists.torproject.org