Introduction ------------- Microsoft Anti-XSS Library is used to protect applications from Cross-Site Scripting attacks, by providing methods for input sanitization. Vulnerability ------------- Microsoft Anti-XSS Library 3.0 and 4.0 are vulnerable to an attack in which an attacker is able to create a specially formed CSS, that after passing through the GetSafeHTML or GetSafeHtmlFragment methods, contains an expression that triggers a JavaScript call in Internet Explorer. The following ASP.NET code demonstrates the vulnerability: 1. string data = Microsoft.Security.Application.Sanitizer.GetSafeHtml("a
b
"); 2. string data = Microsoft.Security.Application.Sanitizer.GetSafeHtmlFragment("
aaa
"); Explanation ----------- The string value can be broken down as follows: div{ font-family:Foo,Bar\,'a\a'; font-family:';color:expression(alert(1));y' } A bug in the Anti-XSS library causes the closing apostrophe in the first CSS rule to be dropped. Because of the string not being properly terminated, Internet Explorer now renders this CSS in a different way, which triggers a javascript call: div{ font-family:Foo,Bar\,'a\a;font-family:'; color:expression(alert(1)); y' } Impact ------ Every application that relies on either GetSafeHTML or GetSafeHtmlFragment to sanitize user supplied data is vulnerable to XSS. References ---------- http://www.securityfocus.com/bid/51291 http://technet.microsoft.com/en-us/security/bulletin/ms12-007 http://blog.watchfire.com/wfblog/2012/01/microsoft-anti-xss-library-bypass.html Adi Cohen IBM Security Systems - Security Research Group