XSS атаки через заголовок User-Agent

22:49 04.06.2011

HTTP заголовок User-Agent часто використовується різними веб додатками і системами (для різних цілей), тому можливість підробки даного заголовка дозволяє проводити атаки. Це можуть бути як spoofing-атаки (причому як проти веб додатків, так і веб додатки можуть використовувати цей заголовок з метою клоакінга), так і XSS атаки. Раніше я вже розповідав про можливість атак через підробку User-Agent в статті Обхід систем для пошуку вірусів на веб сайтах, а зараз розповім про Cross-Site Scripting атаки через заголовок User-Agent.

Враховуючи, що заголовок User-Agent часто використовується різними веб додатками, які виводять значення цього заголовка на веб сторінку, і при цьому розробники часто забувають про його фільтрацію, то це дозволяє проводити XSS атак на дані веб додатки. Бувають як reflected XSS, так і persistent XSS уразливості, що пов’язані з User-Agent.

Проведення XSS атак через User-Agent.

Існують наступні методи проведення XSS атак через User-Agent:

1. Через Flash.

2. Через підробку User-Agent при persistent XSS уразливостях.

3. Через JavaScript.

4. Через ActiveX.

5. Через підробку User-Agent в браузері вірусами.

6. Через проксі, що підроблює User-Agent.

Атака через Flash.

Одним з найлегших методів проведення XSS атак, зокрема на reflected XSS уразливості, є використання Flash. Коли створюється спеціальний swf-файл, що відправляє запит до цільового сайта, при цьому вказуючи в заголовку User-Agent атакуючий XSS код.

Дані атаки спрацюють лише в старих версіях флеш-плагіна - в Flash Player 9.0.16 і попередніх версіях. Починаючи з версії 9.0.28 використання заголовку User-Agent заборонене.

Як я зазначив в статті Відправка серверних заголовків в Flash, у флеш-плагіні 10.0.22.87 і наступних версіях всього заборонено 47 серверних заголовків. Більш детально про XSS атаки через заголовки в флеш ви можете прочитати в даній статті.

Відправка довільних заголовків через Flash.

Хоча Adobe заборонила відправляти деякі заголовки через флеш (на даний момент це 47 серверних заголовків, як я зазначив вище), але всі інші заголовки дозволені. Тобто через Flash можна відправляти довільні заголовки (окрім заборонених), як з числа відомих заголовків, що є стандартизованими, так і будь-які інші.

Тобто, якщо якийсь веб додаток використовує нестандартний заголовок, або заголовки з нових стандартів, то можна буде провести атаку на цей веб додаток. Як і у випадку використання стандартних заголовків з числа незаборонених у флеші (наприклад заголовки Accept і Accept-Language дозволені). А окрім User-Agent веб додатки працюють і з багатьма іншими заголовками, що дозволяє проводити XSS атаки на них.

Атака через підробку User-Agent при persistent XSS уразливостях.

При наявності persistent XSS уразливостей (зокрема в зовнішніх веб додатках), можна підробити User-Agent і провести XSS атаку на вразливий веб додаток.

Це робиться шляхом створення експлоіту чи використання існуючого програмного забезпечення, що вміє посилати довільні заголовки. Для того, щоб відправити запит з User-Agent з атакуючим XSS кодом.

Атака через JavaScript.

Серед сучасних браузерів є такі, що дозволяють змінювати User-Agent через JavaScript. В даному випадку відбувається постійна зміна User-Agent, а не при одному запиті, як це має місце у випадку атаки через флеш.

Зокрема така можливість є в браузерах від Mozilla (в браузерах на движку Gecko), як в старій Mozilla, так і в нових Firefox, в тому числі в Firefox 3.х і 4. З JS кодом для зміни User-Agent в браузері ви можете ознайомитися в мене на сайті.

Даний код я зробив ще в 2003 році. Він змінює значення параметра general.useragent.override. Дана атака спрацює лише локально, але не онлайн. Тобто потрібно змусити користувача зберегти html-сторінку на свій комп’ютер і відкрити її локально (або підсунути її йому різними шляхами для локального відкриття). Про подібні атаки на браузери я вже писав, тому це цілком реально.

З іншої сторони, можна використати Cross Context Scripting (Cross-zone scripting) уразливості в браузерах на движку Gecko, для того щоб віддалено виконати код в локальному контексті й провести зміну User-Agent в браузері. Додам, що при цій зміні в старих Mozilla 1.7.х і попередніх версіях не виникало жодних повідомлень, тому атаку можна було провести приховано, а в Firefox 3.х вже виникає повідомлення (але якщо поставити відповідних чекбокс, то воно більше виникати не буде). Але це не є проблемою, тому що користувача можна обманним чином змусити натиснути Allow, та й багато користувачів взагалі автоматично натиснуть Allow в даному повідомленні.

Атака через ActiveX.

В Internet Explorer і в браузерах на движку IE можна через ActiveX компонент (так само як і в Flash ActiveX компоненті) підмінити заголовок User-Agent. Так само можуть додаватися будь-які інші серверні заголовки. Тому зловмисні компоненти в IE можуть проводити такі атаки.

Атака через підробку User-Agent в браузері вірусами.

Віруси, що потрапили на комп’ютер користувача, можуть змінювати User-Agent в одному або всіх браузерах, що він використовує. В даному випадку відбувається постійна зміна User-Agent, а не при одному запиті, як це має місце у випадку атаки через флеш. Так само можуть додаватися будь-які інші серверні заголовки.

Можливі різні варіанти зміни User-Agent шкідливим програмним забезпеченням. В браузерах Mozilla і Firefox вірус може додати необхідне значення User-Agent в файл prefs.js в папці з профілем користувача. Це також може зробити зловмисник при тимчасовому доступі до комп’ютера користувача.

В файл prefs.js додається (або замінюється існуючий) рядок:

user_pref("general.useragent.override", "XSS payload");

Для атаки на всі браузери можна або інфікувати exe-файли (або dll-файли) браузерів, щоб додати в них функцію, яка задає фіксоване значення User-Agent (що важче), або додати плагін/доповнення до браузеру, що робить дану операцію (що легше). Дана атака також може бути проведена через плагіни/доповнення, які скачуються користувачем з Інтернету - це можуть бути підставні плагіни, які або нічого не роблять (при цьому змінюючи User-Agent), або навіть мають якийсь публічний функціонал (при цьому приховано змінюючи User-Agent), або ж це можуть бути легальні плагіни, в яких є подібний прихований функціонал (що був зроблений автором плагіна, або зловмисником, який включив такий код в плагін).

Атака через проксі, що підроблює User-Agent.

У випадку атаки через проксі, у всіх запитах з браузера проксі може підміняти User-Agent, щоб задати заголовок з атакуючим XSS кодом. Атака буде тривати доти, доки користувач буде використовувати даний проксі (лише у випадку атаки на Ad Muncher відбудеться постійна зміна User-Agent). Так само можуть додаватися будь-які інші серверні заголовки.

Дана атака може відбуватися наступним чином:

а) На комп’ютері користувача встановлена програма, що працює як проксі. Наприклад, така як Ad Muncher (про різні універсальні XSS в якому я писав торік), що вміє підроблювати значення User-Agent. Вірус на комп’ютері користувача, або зловмисник при тимчасовому доступі до його комп’ютера, може змінити налаштування Ad Muncher, щоб задати необхідне значення User-Agent.

б) Користувач задав для свого браузера проксі - це може бути публічний анонімний проксі, що контролюється зловмисником, або користувача обманним шляхом заставили встановити необхідний проксі, чи це зробив вірус, змінивши налаштування браузера. І цей проксі підмінює значення User-Agent.

До речі, при атаці через JavaScript (або вірусами) також можна змінити налаштування проксі в браузері. Зокрема в браузерах на движку Gecko потрібно вказати параметри network.proxy.http, network.proxy.http_port і задати network.proxy.type = 1. Таким чином можна об’єднати атаки 3 і 6 або 5 і 6.

в) Деякі Інтернет провайдери в реальному часі вносять зміни в запити/відповіді, що йдуть від/до користувача. І зловмисний провайдер (або взломаний провайдер) може підмінити значення User-Agent.

г) При MITM атаці, наприклад, при використанні WiFi, також можуть підмінити значення User-Agent.

Заключення.

З вищенаведеного видно, що існує чимало методів підробки User-Agent, зокрема для проведення XSS атак. Тому веб розробникам потрібно завжди слідкувати за безпекою власних додатків. Щоб не допускати Cross-Site Scripting уразливостей, в тому числі при роботі з заголовком User-Agent.


Одна відповідь на “XSS атаки через заголовок User-Agent”

  1. MustLive каже:

    You can read this article on English in The Web Security Mailing List: XSS attacks via User-Agent header.

Leave a Reply

You must be logged in to post a comment.