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 22.214.171.124, 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.