[tor-bugs] #27616 [Applications/Tor Browser]: Double-check Rust code for potential proxy bypass in ESR 60

Tor Bug Tracker & Wiki blackhole at torproject.org
Fri Sep 14 03:08:16 UTC 2018


#27616: Double-check Rust code for potential proxy bypass in ESR 60
--------------------------------------+--------------------------
 Reporter:  gk                        |          Owner:  tbb-team
     Type:  task                      |         Status:  new
 Priority:  Very High                 |      Milestone:
Component:  Applications/Tor Browser  |        Version:
 Severity:  Normal                    |     Resolution:
 Keywords:                            |  Actual Points:
Parent ID:  #22176                    |         Points:
 Reviewer:                            |        Sponsor:
--------------------------------------+--------------------------

Comment (by sysrqb):

 Replying to [comment:2 gk]:
 > See the second part of comment:15:ticket:22176

 Okay, I started with gk's 3) from that ticket. First, I enumerated all
 packages and their dependencies (not including the vendored crates). From
 these packages, I searched for all occurrences of "tcp", "udp", "socket",
 "bind", "connect", "listener", "send", "recv", and "stream". (I don't
 claim these are the only functions/methods that can be used for
 transmitting a message).

 I found these are the in-tree packages (not vendored in
 `third_party/rust`):
 {{{
 media/mp4parse-rust/mp4parse_capi
 servo/support/gecko/nsstring
 xpcom/rust/nserror
 netwerk/base/rust-helper
 xpcom/rust/xpcom
 xpcom/rust/xpcom/xpcom_macros
 modules/libpref/parser
 netwerk/base/rust-url-capi
 dom/webauthn/u2f-hid-rs
 servo/ports/geckolib
 }}}

 For each of those packages, I ran
 {{{
 $ grep -rni -E "tcp|udp|socket|bind|connect|listener|send|recv|stream" $p
 }}}

 (where `$p` was each directory path from above).

 Many of the results were false-positives. In particular, `bind` matched
 many incstances of "binding" or "bindgen". So, excluding those:
 {{{
 $ grep -rni -E "tcp|udp|socket|bind|connect|listener|send|recv|stream" $p
 | grep -v -E "[bB]inding|[bB]indgen" | grep -ni --color=always -E
 "tcp|udp|socket|bind|connect|listener|send|recv|stream"
 }}}

 These directories didn't contain any matches:
 {{{
 servo/support/gecko/nsstring
 xpcom/rust/nserror
 netwerk/base/rust-helper
 modules/libpref/parser
 netwerk/base/rust-url-capi
 servo/ports/geckolib
 }}}

 `media/mp4parse-rust/mp4parse_capi` has instances of "stream" (but that's
 not surprising considering it's doc comment says "Parses ISO Base Media
 Format aka video/mp4 streams."). All instances of `stream` are from audio
 (FLAC) track information.

 `xpcom/rust/xpcom/xpcom_macros` has a occurrence of "bind" and a few
 instances of "stream". "bind" is related to FFI, and "stream" are
 `TokenStream`s.

 `dom/webauthn/u2f-hid-rs` has "send" and "recv", but these are methods
 called on a `std::sync::mpsc::channel`. There is another wrapper method
 `sendrecv` that calls `U2FHIDCont::write` and `U2FHIDInit::read` for
 reading/writing the U2F device. These read/write methods specifically take
 a device as the first argument. Using this for making network calls seems
 very difficult (without digging too deep).

 (to be continued.)

--
Ticket URL: <https://trac.torproject.org/projects/tor/ticket/27616#comment:4>
Tor Bug Tracker & Wiki <https://trac.torproject.org/>
The Tor Project: anonymity online


More information about the tor-bugs mailing list