Damage: Filter evasion, cross-site scripting
Exploit: Bypass XSS filters, IPS/IDS, AV, or WAF’s with specially crafted white_space characters to execute XSS attacks.
Root Cause: Interpreting syntax replacements
Product Version: Opera 9.51 and earlier
Or should we call this “Druidic magical symbols enable filter evasion and cross-site scripting“…
If only I had some Danel Clowe skills to illustrate this! It’s not often we can use Ogham Space Marks and Mongolian Vowel Separators to deliver cross-site scripting attacks.

What am I talking about? Okay enough fun, read on…
Opera released version 9.52 of their flagship browser about a month ago to address an issue in the way certain Unicode characters were being interpreted as white space. This behavior enabled cross-site scripting (XSS) attacks which might not otherwise be possible. Perhaps exploiting this issue would also be useful to evade HTML filters, WAFs, or other detection systems which try to prevent XSS attacks.
The HTML 4.01 specification defines four whitespace characters, and explicitly does not define other cases. Note to XSS filter developers: Any character can be treated as whitespace by an HTML4 conforming User-Agent.
The HTML 5 specification defines five types of “space characters”, and explicitly nothing else. However, the HTML 5 spec is in flux which is a much bigger issue… more on that later.
The Unicode spec assigns binary property meta-data to code points, one of which is the ‘white_space’ property. In Opera’s case, we could use almost any character with a Unicode white_space property to represent a normal whitespace character like U+0020.
The following characters all get treated as a space. Making things like:
<a href=#[U+180E]onclick=alert()>
possible. This list includes many of the Unicode characters with the white_space property:
U+2002 to U+200A
U+205F
U+3000
U+180E Mongolian Vowel Separator
U+1680 Ogham Space Mark
Here’s a link to the test case: Opera Unicode white_space