У листопаді, 30.11.2009, я виявив Cross-Site Scripting уразливість в Mozilla та Firefox.
Дана уразливість дозволяє обійти заборону на виконання JavaScript коду в location-header редиректорах (при редирекції на javascript: URI). Вона подібна до Cross-Site Scripting уразливості в Mozilla та Firefox (через редиректори з відповіддю “302 Object moved”).
В Mozilla та Firefox (на сайтах, що використовують в редиректорі відповідь “302 Found”) при запиті до location-header редиректора з вказанням JavaScript коду, браузер виводить сторінку “Found”, де в лінці “here” виводить даний код. При натисканні на яку код спрацює. Тобто це Strictly social XSS, а також це ще один приклад Local XSS.
XSS:
При запиті до скрипта на сайті:
http://site/script.php?param=javascript:alert(document.cookie)
Що поверне у відповіді заголовок Location:
HTTP/1.x 302 Found
Location: javascript:alert(document.cookie)
Браузер виводить сторінку “Found”. При кліку по лінці “here” код спрацює в контексті даного сайту.
Окрім javascript URI, також можна використати data URI для виконання JS-коду, якщо редиректор виводить в заголовку Location символи “;” і “,” у чистому (не в URL encoding) вигляді.
Також в усіх версіях Mozilla та Mozilla Firefox можна використати інший варіант Strictly social XSS - з використанням -moz-binding (для Firefox < 3.0 або для Firefox => 3.0 з xml-файлом на цьому самому сайті) чи з використанням onMouseOver:
http://site/script.php?param=a:%22%20onMouseOver=%22alert(document.cookie)
При наведенні курсору на лінку “here” код спрацює в контексті даного сайту.
І якщо використати мою техніку MouseOverJacking, тоді можна автоматизувати дану атаку у всіх версіях Mozilla та Mozilla Firefox (особливо коли використання -moz-binding неможливе):
http://site/script.php?param=a:%22%20style=%22width:100%25;height:100%25;display:block;position:absolute;top:0px;left:0px%22%20onMouseOver=%22alert(document.cookie)
Дана атака працює якщо редиректор (з відповіддю “302 Found” чи “302 Object moved”) виводить подвійні лапки в заголовку Location у чистому (не в URL encoding) вигляді.
Уразливі Mozilla 1.7.x та попередні версії.
Уразливі Mozilla Firefox 3.0.19, Firefox 3.5.11, Firefox 3.6.8, Firefox 4.0b2 та попередні версії.
Уразливі Opera 10.53 та попередні версії (при цьому версія Opera 9.52 невразлива). В Opera код виконається не в контексті даного сайту.
Як і у випадку XSS через редиректори з відповіддю “302 Object moved”, до цієї уразливості також повинні бути уразливими SeaMonkey 1.1.17, Firefox 3.7 a1 pre, Orca Browser 1.2 build 5 та Maxthon 3 Alpha (3.0.0.145) з Ultramode.
[Оновлення: 16.09.2012]
Як я виявив, у версіях Firefox 10.0.7 і Firefox 15.0.1 дана уразливість більше не працює - вона була приховано виправлена Mozilla в Firefox 9.0.