[tor-bugs] #29627 [Applications/Tor Launcher]: Moat: add support for obfsproxy's meek_lite

Tor Bug Tracker & Wiki blackhole at torproject.org
Wed May 8 18:15:33 UTC 2019


#29627: Moat: add support for obfsproxy's meek_lite
---------------------------------------+------------------------------
 Reporter:  mcs                        |          Owner:  brade
     Type:  defect                     |         Status:  needs_review
 Priority:  Medium                     |      Milestone:
Component:  Applications/Tor Launcher  |        Version:
 Severity:  Normal                     |     Resolution:
 Keywords:  TorBrowserTeam201905R      |  Actual Points:
Parent ID:  #29430                     |         Points:
 Reviewer:                             |        Sponsor:
---------------------------------------+------------------------------

Comment (by dcf):

 Replying to [comment:9 mcs]:
 > That is a good question.  We think the code is correct but the spec is
 wrong.  SOCKS5 supports up to 255 bytes in each auth field.  The
 obfs4proxy code reads a byte to get the length and does not have any other
 limitations, so up to and including 255 is supported.  Kathy and I wanted
 to maximize the space available for args, so we used <=.  Do you think
 this is OK?  Should we file a bug against the PT spec?

 There's for sure a small ambiguity in the PT spec, when the length of the
 username field is exactly 255. I almost mentioned it before but thought I
 was being too nitpicky. Suppose the PT receives a connection with a
 255-byte username `k=aaa...aaa` and a 1-byte password `\x00`. There are
 two possible strings with that encoding, and no way to distinguish between
 them:
  * the 255-byte string `k=aaa...aaa`
  * the 256-byte string `k=aaa...aaa\x00`
 Obviously in the PT context `\x00` is an unlikely byte to appear, so in
 this case both goptlib and obfs4proxy disambiguate by taking the first
 interpretation.

 To eliminate the ambiguous case, whenever the length of
 `this.mMeekClientEscapedArgs` is exactly 255, you could put 254 bytes in
 the username field and 1 byte in the password field.

 Though now that I check, technically the spec doesn't even say how the
 username and password fields are supposed to be combined, or whether a
 decoder is even required to look at the password field if the username
 field is not full. But the existing implementations work by concatenation
 without regard to the length of the fields, except that a password field
 consisting of a single `\x00` is treated as an empty string. An
 [https://gitweb.torproject.org/torspec.git/tree/pt-
 spec.txt?id=4dcd7e94f17c072e771119ec90d7cbce4a4788a4#n162 older version]
 of the spec stated the the fields should be joined by concatenation, but
 didn't say what to do with an empty password field.

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


More information about the tor-bugs mailing list