Re: [hybi] Extensibility mechanisms?

Willy Tarreau <w@1wt.eu> Thu, 22 July 2010 14:19 UTC

Return-Path: <w@1wt.eu>
X-Original-To: hybi@core3.amsl.com
Delivered-To: hybi@core3.amsl.com
Received: from localhost (localhost [127.0.0.1]) by core3.amsl.com (Postfix) with ESMTP id D9B763A690C for <hybi@core3.amsl.com>; Thu, 22 Jul 2010 07:19:04 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -3.015
X-Spam-Level:
X-Spam-Status: No, score=-3.015 tagged_above=-999 required=5 tests=[AWL=-0.972, BAYES_00=-2.599, HELO_IS_SMALL6=0.556]
Received: from mail.ietf.org ([64.170.98.32]) by localhost (core3.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id AvzwaSRXCKSU for <hybi@core3.amsl.com>; Thu, 22 Jul 2010 07:19:04 -0700 (PDT)
Received: from 1wt.eu (1wt.eu [62.212.114.60]) by core3.amsl.com (Postfix) with ESMTP id 8F7743A69B1 for <hybi@ietf.org>; Thu, 22 Jul 2010 07:19:03 -0700 (PDT)
Received: (from willy@localhost) by mail.home.local (8.14.4/8.14.4/Submit) id o6MEJE8x013786; Thu, 22 Jul 2010 16:19:14 +0200
Date: Thu, 22 Jul 2010 16:19:14 +0200
From: Willy Tarreau <w@1wt.eu>
To: John Tamplin <jat@google.com>
Message-ID: <20100722141914.GA13733@1wt.eu>
References: <4C479130.4020500@caucho.com> <AANLkTikLDjBP-Xs5t6TxmJuq4nG8jwThQ=n34B4cEmup@mail.gmail.com> <4C479CE4.6070805@caucho.com> <AANLkTims1er0Rbv0ysP4gRs1Kd0He8hapHeJ3nON=JQa@mail.gmail.com> <4C47C5B0.3030006@caucho.com> <AANLkTi=ND-FOH8OoD=TCbiyeSZ-h0LhxQBXN5w-2hfvj@mail.gmail.com> <20100722055452.GL7174@1wt.eu> <F412C956-038F-400D-A431-C42B4C7B829C@apple.com> <20100722140726.GD12582@1wt.eu> <AANLkTin0Sg_5aFUBAWS0mSo95FMXjPwaChUrTtEw6r6D@mail.gmail.com>
Mime-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Disposition: inline
In-Reply-To: <AANLkTin0Sg_5aFUBAWS0mSo95FMXjPwaChUrTtEw6r6D@mail.gmail.com>
User-Agent: Mutt/1.4.2.3i
Cc: Hybi <hybi@ietf.org>
Subject: Re: [hybi] Extensibility mechanisms?
X-BeenThere: hybi@ietf.org
X-Mailman-Version: 2.1.9
Precedence: list
List-Id: Server-Initiated HTTP <hybi.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/listinfo/hybi>, <mailto:hybi-request@ietf.org?subject=unsubscribe>
List-Archive: <http://www.ietf.org/mail-archive/web/hybi>
List-Post: <mailto:hybi@ietf.org>
List-Help: <mailto:hybi-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/hybi>, <mailto:hybi-request@ietf.org?subject=subscribe>
X-List-Received-Date: Thu, 22 Jul 2010 14:19:04 -0000

Hi John,

On Thu, Jul 22, 2010 at 10:12:01AM -0400, John Tamplin wrote:
> On Thu, Jul 22, 2010 at 10:07 AM, Willy Tarreau <w@1wt.eu> wrote:
> 
> > > 1) Hostile JS code running in the browser may use the browser's WebSocket
> > client code to try to attack existing HTTP resources, if it can make a
> > request that looks sufficiently like HTTP.
> >
> > Maybe I'm mistaken, but why couldn't such JS code simply make use of the
> > browser's HTTP client to do so ? Posting a form, reloading an image from
> > a given URL or making an XMLHttpRequest seems perfectly possible right now,
> > so trying to do that via the WebSocket code would bring nothing at all.
> 
> JS is limited in how it can influence all the HTTP headers in the request,
> and is also bound by same-origin policy.

OK thanks for this clarification.

> > > 3) Hostile JS code running in the browser may use the browser's HTTP
> > client code (e.g. via XMLHttpRequest) to try to attack newly created
> > WebSocket servers, if it can make a request that looks sufficiently like
> > WebSocket.
> >
> > The same is true here : why would the JS code try to use the normal HTTP
> > client if the browser supports WebSocket, with which the code would be
> > able to have finer control over its attack ?
> 
> 
> The JS cannot control anything but the data contents of the message, so is
> limited in what it can do to the headers of the initial request or the
> framing.

Fine, so by making use of a same low-level protocol (HTTP), we're certain
that what is forbidden by one is also forbidden by the other one. In short,
if JS cannot manipulate HTTP headers, this will be true for both WS and HTTP
as long as WS handshake relies on HTTP. However, having a WS handshake that
"looks like" HTTP opens the way to corner cases and side effects (exactly
what happened with the extra bytes which can be parsed as HTTP requests
when directed to non-WS aware servers).

Regards,
Willy