On 3/24/2011 12:44 AM, Adam Barth wrote:


Our experience with WebSockets indicates that masking is still
important even when communicating between the browser and an
attacker-controlled server.  The problem is that intermediaries
attempt to "sniff" the protocol by looking at the bytes on the wire.
For example, one could easily imagine an intermediary attempting to do
"helpful" things to transiting UDP packets that look like DNS requests
or responses.  Rather than play whack-a-mole with these possibilities,
we're better off building a protocol that's secure by design.

That goal is incompatible with legacy interoperability. It is also probably unnecessary in the case where we use real encryption (DTLS / DTLS-SRTP) for the media flows.

WebSockets is a special case in that it is trying to look a bit like HTTP at the start *and* is TCP/80. The number of cases where UDP datagrams are damaged is much smaller and probably much less important to solve.

On Wed, Mar 23, 2011 at 5:13 PM, Matthew Kaufman<matt...@matthew.at>  wrote:
On 3/23/2011 3:17 PM, Harald Alvestrand wrote:
I also fail to see the requirement for the masking, given that the
requirement for ICE (at least once the bug of not using passwords in ICE is
fixed) protects against cross-socket attacks.
Also agree. The STUN connectivity check message in ICE is sufficient to
prove that the far end wants the data... masking to avoid proxies is a
non-issue for this channel.
What makes you so confident that intermediaries aren't listening to
(and possibly modifying) UDP packets?

What's the threat model here? Are we worried that browsers will send UDP flows to endpoints that don't want them (which I claim the STUN connectivity test is sufficient to prevent) or are we worried that browsers will send UDP flows to endpoints that do want them but that something in the middle will break this? We already know that a UDP-blocking firewall falls into the second category, so this will happen some of the time no matter how much we might not want it to.

  The entire point of ICE is to
trick intermediaries (e.g., home routers) into modifying their state
in certain ways.  It seems entirely likely that the state of those
intermediaries will further effected by subsequent UDP traffic.

Of course... for starters, the intermediaries will likely reset their UDP mapping timers as traffic comes by.

On Wed, Mar 23, 2011 at 5:21 PM, Matthew Kaufman<matt...@matthew.at>  wrote:
On 3/23/2011 3:57 PM, Harald Alvestrand wrote:
That seems like a risk that's not unreasonable to accept, given that we've
survived having the same problem for HTTP links since day one of the Web
(any web page can dupe a client into launching a TCP session to any IP:port
and sending "GET /<ASCII string of their choice>" to it).
Agree, and this is even safer because it doesn't burn up TCP state at the
target.
Your assumptions are incorrect.  HTTP has caused a long history of
security problems in this regard.  Opening up UDP attack surface is
bad news bears.

Yes, it is, and that is exactly why I have proposed since the beginning that we ensure that browsers cannot send UDP datagrams (beyond rate-limited STUN connectivity checks whose content isn't controlled by the Javascript) to endpoints that don't agree to receive them.

I haven't seen any demonstration that this isn't sufficient to prevent the browser from being used as an attack vector, and the only safer thing to do is to not add this capability at all.

Matthew Kaufman

Reply via email to