W3C home > Mailing lists > Public > public-web-perf@w3.org > October 2010

Re: [Open Issue] Privacy concern with Navigation Timing

From: Sigbjørn Vik <sigbjorn@opera.com>
Date: Tue, 19 Oct 2010 13:59:42 +0200
To: public-web-perf@w3.org
Message-ID: <op.vktnlswz41y844@id-c0735.oslo.opera.com>
I am quite uncertain about giving Web pages access to third party timing  
information. Even indirect timing information can reveal various things  
about the other site. Redirects and (un)load times typically reveal  
logged-in status, which is useful for phishers.

A lot of sites do redirects to set and check cookies, and forwarding based  
on the authentication level. There have been security bugs where being  
able to count the number of redirects of a third party site causes an  
attacker to be able to tell which sites a user is logged into, and thus to  
better personalize a spoof or phishing attempt. The Timing interfaces can  
only be seen from the domain a redirect chain ends up, so abuse is  
limited, but considering that many Web sites in the wild have redirectors  
(http://domain/redirectTo.php?url=http://ad.otherdomain/9xt.html) that  
allow arbitrary end URLs, this might be possible to abuse. Send an iframe  
to such a redirector, ending back up at the original domain, and count the  
number of redirects. Rinse and repeat for a number of domains, and the  
attacker will have a list of Web sites to which the user is currently  
logged in. So redirectCount should probably behave as  
sameDomainRedirectCount instead.

Even navigationStart or redirectStart can reveal some of these issues, at  
a slightly more fine grained level than the time when the .src of the  
iframe is set in JavaScript. These aren't really critical though, but  
would still be nice to limit to same domain as well, along with all other  
JavaScript information.

Getting the full time an unload takes also allows one to check if a user  
is logged in. Stuff facebook into an iframe, and then time how long it  
takes to unload. If it is fast, the user saw the front page, if it was  
slow, the user was logged in. If an attacker has intimate knowledge of a  
browser (and e.g. knows that unloadEventStart always starts 5ms after  
response), just knowing unloadEventEnd suffices.

JavaScript has a general same domain policy, and undermining that policy  
little by little probably does no good in the long run. I'd rather see  
Timing specifications stick to the same-domain policy. If we want  
off-domain information to be available, it should be perfectly possible to  
spec out how it can be made available to development tools on the local  
computer.

There are real usecases for knowing how long the redirects took, for  
instance when clicking on ads which go through several layers of  
redirectors before ending up on the advertised page. However, for  
cooperating Web sites, passing information along, e.g. in the query field,  
is fully doable, so I am not certain that usecase is one we should aim to  
cater for. Usecases for domain.com redirecting to www.domain.com might be  
worthwhile though, so maybe we could allow such things. E.g. if the site  
succeeds in setting document.domain to domain.com, then it gets access to  
all timing information for all domain.com subresources. Such a solution  
could also be reused in development tools, by allowing them to set  
document.domain to '*'.

Notes on the graph:
unLoadEventStart in the graph has a capital "L", it should be lowercase.
There might be a gap between responseEnd and the document loading phase  
(for instance if the browser is prioritizing streaming a resource and CPU  
cannot handle any more at the moment). Maybe the graph should show such a  
gap?

On Fri, 15 Oct 2010 22:38:32 +0200, Anderson Quach <aquach@microsoft.com>  
wrote:

> [Addendum] The phase associated with unloadEventStart and unloadEventEnd  
> is onUnload, not onLoad. Thanks Tony for catching that typo.
>
> From: public-web-perf-request@w3.org  
> [mailto:public-web-perf-request@w3.org] On Behalf Of Anderson Quach
> Sent: Friday, October 15, 2010 11:47 AM
> To: public-web-perf@w3.org
> Subject: [Open Issue] Privacy concern with Navigation Timing
>
> Hi All,
>
> We're calling for input on a matter of privacy concerns with Navigation  
> Timing. The follow attributes are being vetted to understand the threat  
> with exposing Navigation Timing [1] attributes that can reveal to an  
> attacking site what an end-user is doing in a particular session.
>
> (Please see the attached png for a visual representation of the timeline)
>
> navigationStart
> The issue with this timing marker is that it reveals the absolute start  
> point of the navigation, which may include the timing phase associated  
> with redirection and the time spent in the unload event.
>
> redirectStart
> redirectEnd
> After committing the navigation, the previous page (a.com) may perform  
> redirections when navigating to the target/current page (b.com). Thus,  
> b.com has access to specific timing information that is associated with  
> redirections of a.com.
>
> redirectCount
> This attribute is related to redirectStart and redirectEnd, revealing  
> the number of redirects while navigating from a.com to b.com. Thus, the  
> target/current page (b.com) has access to the number of redirections  
> associated with previous page (a.com).
>
> unloadEventStart
> unloadEventEnd
> After committing the navigation, the previous page (a.com) may have an  
> unload event handler while navigating to the target/current page  
> (b.com). Thus, b.com has access to how long a.com's unload handler took  
> to execute.
>
> [1]  
> http://dvcs.w3.org/hg/webperf/raw-file/tip/specs/NavigationTiming/Overview.html
>
> Thanks,
> Anderson Quach
> IE Program Manager


-- 
Sigbjørn Vik
Quality Assurance
Opera Software
Received on Tuesday, 19 October 2010 12:00:03 GMT

This archive was generated by hypermail 2.2.0+W3C-0.50 : Tuesday, 21 December 2010 18:13:55 GMT