After several months of claiming that fixing a critical flaw was not its job, Microsoft reversed direction yesterday and acknowledged a bug in Windows XP and Windows Server 2003 that could let attackers hijack machines.
In a security advisory issued this week, Microsoft conceded that Windows XP and Server 2003 running Internet Explorer 7 (IE 7) mishandle some Uniform Resource Identifiers (URIs). Hackers can craft malformed URIs that, when clicked, launch malicious code or script. Only PCs with IE 7 are at risk, Microsoft maintained, and Vista is invulnerable. Ironically, just last week Microsoft stripped an anti-piracy requirement from IE 7 downloads, a move seen by some as an attempt to get that version on more machines.
Although the advisory didn't promise a patch, a posting to the Microsoft Security Response Center (MSRC) blog did. "We're working on a security update," Jonathan Ness, of the MSRC, said in a post yesterday afternoon. "Our plan is to revise our URI handling code within Windows."
Microsoft did the turnabout because it believed that recent public discussions about the vulnerability had increased the chance that the bug would be exploited by attackers, said Ness. Those discussions, led by Juergen Schmidt of Heise Security on a security mailing list, reopened debate about whether Microsoft was responsible for ongoing problems Windows has when handling protocols; Schmidt claimed that IE 7 had broken Windows XP's ability to sanitize and reject invalid URIs associated with the mailto: protocol.
In a long and sometimes confusing post, Ness described how in an attempt to make IE 7 more secure, Microsoft instead made it possible for the browser to hand off an invalid URI to ShellExecute, the Windows function that runs code. "IE7 began to do more validation up front to reject malformed URI's," Ness said. "When this malformed URI with a % was rejected by IE7, ShellExecute() tries to 'fix up' the URI to be usable. During this process, the URI is not safely handled."
According to Ness, Microsoft will update Windows XP and Server 2003 so that the URI handling within ShellExecute is "more strict."
Even so, Microsoft isn't ready to let third-party developers off the hook. "While our update will help protect all applications from malformed URIs, application vendors who handle URIs can also do stricter validation themselves to prevent malicious URIs from being passed to ShellExecute()," he said, noting that several vendors have done just that.
Mozilla and Skype, for instance, updated their best-known applications, Firefox and the namesake VoIP software, respectively, in July. At the time, however, both companies complained that the vulnerabilities they fixed were not completely their fault, and said Microsoft should share some of the blame. More recently, Adobe Systems said last week that it will patch its Reader and Acrobat products, and offered a workaround defense users can apply until then.
Although Microsoft committed to patching Windows, it remained unclear whether the fix would be specific to the IE 7 scenario, or a broader patch that would also address the operating system's protocol handling process. Ness seemed to separate the two issues, as did the Microsoft advisory, which credited only those researchers who had reported the URI bug in Windows XP and 2003. Missing from that list were several researchers, including Thor Larholm, Aviv Raff, and Billy Rios, who in June began digging up protocol-handling problems in multiple applications -- first, Apple's Safari for Windows browser, and shortly after that, Mozilla's Firefox.
Microsoft did not respond to a request for clarification, but Ness hinted that the bigger, and presumably more complex, job of fixing Windows' protocol handling is not in the cards. He pointed to a blog posting that the IE team made in July as the rationale. There, an IE program manager said changing Windows would be "very difficult" because the number of protocol handlers is "effectively limitless."
Petko Petkov, a U.K.-based penetration tester and one of the three researchers Microsoft did credit, said patching the smaller Windows-IE 7 problem might be all Microsoft could do. "I don't think that Microsoft has much of a choice here," he said. "Its patch might be just a simple fix around the issue."
Petkov also sympathized with Microsoft, essentially saying it had been caught between a rock and a hard place. But he didn't make excuses for the company. "The bug is everybody's fault really," he said. "In the case of third-party apps, it is their problem for passing URLs to ShellExecute without being correctly sanitized. In the case of Microsoft, it is their problem for not ignoring file paths that look suspicious."
Microsoft did not give a timetable for fixing the problem. Until then, it had only generic advice for users: "Do not follow un-trusted links or browse un-trusted Web sites."