Google has fixed a
bug in its Chrome browser which could allow cross-site scripting and
other dangerous policy violations under interesting circumstances: when Chrome is called from Internet Explorer because a link is executed in IE with the "chromehtml" protocol handler.
Update Chrome to get to the new version 1.0.154.59, which they say
fixes the problem, but that's not what's really interesting about this
bug.
What's interesting is that it's actually a new manifestation of an
old problem: external protocol handlers are called from Internet
Explorer with malicious input; IE just calls the handler with the
supplied input. In this case, IBM researcher Roi Saltzman found three
main attacks that could be launched through this mechanism that would
be blocked through normal Chrome access methods.
It's very similar to a series of bugs that were found in the combination of Internet Explorer and Firefox back in July of 2007. Similar stuff, some abusing the firefoxurl protocol handler.
In both cases, the other company chose to blame Microsoft for the
bug, claiming that Internet Explorer should have sanitized the inputs
before passing them on to the external protocol handler. The Mozilla security vulnerability advisory on the subject contains the following: "Internet
Explorer calls registered URL protocols without escaping quotes and may
be used to pass unexpected and potentially dangerous data to the
application that registers that URL Protocol....This patch does not fix the vulnerability in Internet Explorer."
Google wasn't quite so ostentatious in blaming
Microsoft, but they did it just the same. Roi Saltzman didn't attempt to blame
Microsoft, but in the
Chrome vulnerability database writeup on their report, someone at
Google puts it this way: "Because of a known silliness of MSIE,
calls to registered URL handlers for protocols such as chromehtml: are not
constructed with sufficient escaping. We previously combated cases where this
could be used to pass unsolicited --no-sandbox or --renderer-path to the
browser."
Think about what they're asking Internet Explorer to do: The whole
idea of an external protocol handler is to have IE (I think it's
actually whatever the default browser is) call an external program in
order to handle an http request. IE doesn't know what the external
program does, it's not supposed to care. So how is it supposed to know
how to sanitize inputs? In order to do that it would need to know about
the semantics of the protocol handler. IE is just a shell in this case,
not a client handler of the request.
Even if you were to argue that IE should do standard escaping on the
stream, it's disingenuous for Mozilla and Google to argue that they
shouldn't need to do input sanitizing because Microsoft should be doing
it. The lesson of the last 10 years is that you have to make sure your
own inputs are sanitized.
Google went ahead and fixed the bug which is just as well, since
Microsoft isn't going to fix it for them. Let's hope this isn't a onsie
fix, but that they take this opportunity to look at inputs on all their
external protocol handlers.
Security Center Editor Larry Seltzer has worked in and written about the computer industry since 1983.
Editor's Note: This article was updated with new information.