[tbb-bugs] #32125 [Applications/Tor Browser]: Using private obfs4 bridge does not show circuit display
Tor Bug Tracker & Wiki
blackhole at torproject.org
Thu Oct 17 21:48:13 UTC 2019
#32125: Using private obfs4 bridge does not show circuit display
-------------------------------------------------+-------------------------
Reporter: ggus | Owner: tbb-
| team
Type: defect | Status:
| needs_review
Priority: Medium | Milestone:
Component: Applications/Tor Browser | Version:
Severity: Normal | Resolution:
Keywords: tbb-circuit-display, | Actual Points: 0.25
TorBrowserTeam201910R |
Parent ID: | Points:
Reviewer: | Sponsor:
-------------------------------------------------+-------------------------
Changes (by pospeselr):
* status: needs_information => needs_review
* cc: tbb-team (added)
* keywords: tbb-circuit-display => tbb-circuit-display,
TorBrowserTeam201910R
* actualpoints: => 0.25
Comment:
Here's a patch that fixes this issue:
tor-button:
https://gitweb.torproject.org/user/richard/torbutton.git/commit/?h=bug_32125&id=56a68b45decbbbf5e6e064f5bd23a21d622e81d0
With this patch, bridges which have no provided fingerprint will display
simply as "Bridge" rather than "Bridge: obfs4 127.0.0.1" (for example).
Without a fingerprint, neither type nor ip are determinable from tor-
button.
----
I've dug into this issue a bit and here's a summary of the problem.
Tor Browser builds the circuit display by requesting the circuit (as a
list of ids/fingerprints) for the current first-party domain. Then, Tor
Browser checks to see if each of nodes are a Bridge by requesting the
bridge strings via {{{getconf bridge}}}. Next, we look for the current id
in each of the bridge objects and execute some UI logic that displays each
node's info (whether bridge or vanilla relay).
When the user provides a bridge without a fingerprint we run into a few
problems resulting in the broken behavior in the bug. First of all,
requesting the bridge list via getconf bridge (basically) just returns the
bridge strings stored in torrc. These strings are either provided by the
user, brigedb, or our builtin bridge preferences. The bridge string format
is something like {{{$type $ip:$port $optionalfingerprint
$otherstuff...}}}.
As the fingerprint is optional, the bridge parser in tor-control-port.js
ends up storing the $otherstuff data as the id/fingerprint.
Then, getBridge() in tor-circuit-display.js fails to find a bridge by
id/fingerprint (because our bridge has $otherstuff in the id field) and
returns null.
Next, nodeDataForId() in tor-circuit-display.js skips over the 'bridge'
section (as the result of getBridge() is null) and it assumes we are
dealing with a relay. The failing {{{GETINFO ns/id/$fingerprint}}} call
ends up throwing exception because we're passing in a bridge
id/fingerprint which is not part of the consensus (according to arma). As
a result, the IP of the relay is never set.
Since the IP of the relay is not stored, updateCircuitDisplay() in tor-
circuit-display() (which is responsible for creating the visuals including
the New Circuit button) throws after trying to dereference a null
reference, resulting in the behavior described in the description.
--
Ticket URL: <https://trac.torproject.org/projects/tor/ticket/32125#comment:8>
Tor Bug Tracker & Wiki <https://trac.torproject.org/>
The Tor Project: anonymity online
More information about the tbb-bugs
mailing list