瀏覽代碼

Warn and ignore the MyFamily setting if BridgeRelay is also set

Roger explains at
  http://archives.seul.org/tor/talk/Nov-2011/msg00209.html :

  "If you list your bridge as part of your family in the relay
  descriptor, then everybody can learn your bridge fingerprint, and
  they can look up your bridge's descriptor (and thus location) at
  the bridge directory authority."

Now, we can't stop relays from listing bridges, but we can warn when
we notice a bridge listing anybody, which might help some.

This fixes bug 4657; it's a fix on 0.2.0.3-alpha, where bridges were
first introduced.
Nick Mathewson 12 年之前
父節點
當前提交
281a5e4670
共有 3 個文件被更改,包括 11 次插入1 次删除
  1. 4 0
      changes/bug4657
  2. 6 0
      src/or/config.c
  3. 1 1
      src/or/router.c

+ 4 - 0
changes/bug4657

@@ -0,0 +1,4 @@
+  o Minor bugfixes:
+    - If the configuration tries to set MyFamily on a bridge, refuse to
+      do so, and warn about the security implications. Fix for bug 4657;
+      bugfix on 0.2.0.3-alpha.

+ 6 - 0
src/or/config.c

@@ -3601,6 +3601,12 @@ options_validate(or_options_t *old_options, or_options_t *options,
   if (options->UseEntryGuards && ! options->NumEntryGuards)
     REJECT("Cannot enable UseEntryGuards with NumEntryGuards set to 0");
 
+  if (options->MyFamily && options->BridgeRelay) {
+    log_warn(LD_CONFIG, "Listing a family for a bridge relay is not "
+             "supported: it can reveal bridge fingerprints to censors. "
+             "You should also make sure you aren't listing this bridge's "
+             "fingerprint in any other MyFamily.");
+  }
   if (check_nickname_list(options->MyFamily, "MyFamily", msg))
     return -1;
   for (cl = options->NodeFamilies; cl; cl = cl->next) {

+ 1 - 1
src/or/router.c

@@ -1483,7 +1483,7 @@ router_rebuild_descriptor(int force)
   }
   if (authdir_mode(options))
     ri->is_valid = ri->is_named = 1; /* believe in yourself */
-  if (options->MyFamily) {
+  if (options->MyFamily && ! options->BridgeRelay) {
     smartlist_t *family;
     if (!warned_nonexistent_family)
       warned_nonexistent_family = smartlist_create();