Нещодавно, 30.01.2009, досліджуючи Charset Inheritance в різних браузерах, коли я виявив Charset Inheritance уразливість в Internet Explorer 6 та Google Chrome, я знайшов Charset Remembering уразливість в Mozilla Firefox.
Дана уразливість призводить до можливості проведення XSS атак з UTF-7. Вона відрізняється від Charset Inheritance в тому, що кодова сторінка не наслідується, а вона повинна бути встановлена для сторінки вручну, в цьому вона схожа на XSS уразливість в Mozilla та Firefox, що я виявив в 2007 році (до речі, їх можна поєднати при атаках на gopher ресурси). Після чого стають можливими XSS атаки на дану сторінку.
При вказані користувачем для сторінки на сайті кодування (зокрема, UTF-7), браузер запам’ятовує дане кодування і використовує його в подальшому при всіх запитах до даної сторінки, якщо в ній не вказано кодування. Навіть після перезапуску браузеру - вказане кодування запам’ятовується доти, доки воно не буде змінено на інше. Що дозволить при вказанні кодування UTF-7 проводити XSS атаки (при відвіданні сторінок з XSS кодом або приховані атаки через frame/iframe).
Алгоритм атаки:
1. Заманити користувача на сторінку http://site/page.html (де не вказане кодування) і змусити його встановити UTF-7 кодування для даної сторінки.
2. Розмістити UTF-7 XSS код на http://site/page.html (як reflected або persistent) і атакувати користувача на даній сторінці.
3. Доки кодування UTF-7 для даної сторінки буде встановлене в браузері, можна буде повторно атакувати користувача.
Уразливі Mozilla Firefox 3.0.1 та всі попередні версії (та потенційно наступні версії).