XSS через DOM

Всем известны два типа XSS:

  • Пассивные XSS (reflected или Type 1 XSS) — переданные данные отражаются в HTML-коде страницы только для конкретного пользователя
  • Активные XSS (persistent или Type 2 XSS) — постоянные XSS; злонамеренные данные хранятся на сервере — все пользователи сайта могут быть подвержены данной атаке

Однако далеко не всем известен еще один тип XSS, а именно межсайтовый скриптинг через DOM (DOM-based или Type 0 (3) XSS). Объектная модель документа (DOM) является формой отображения иерархии HTML (а также XML) для JavaScript. XSS-атаки через DOM возможны благодаря недостаточной обработке на уровне JavaScript таких объектов DOM, как document.URL, document.location, document.referrer и некоторых других. Принципиальным отличием данного типа XSS является тот факт, что данные вообще не встраиваются в HTML-код. Несомненно, это вызывает определенные трудности для систем IDS в плане выяления фактов атак и эффективной фильтрации входящих данных, так как уязвимость заключена не на стороне серверных скриптов, а прямо в JavaScript-коде. Рассмотрим пример такого уязвимого кода.

var pos=document.URL.indexOf("foo=")+4;
document.write(document.URL.substring(pos,document.URL.length));

Данный JavaScript-код, предполагая единственный параметр foo, находящийся в составе URL страницы, выведет его значение. Никакой проверки здесь нет, поэтому данный код подвержен XSS через DOM:
http://somesite/index.html?foo=<script>alert(document.cookie)</script>
http://somesite/index.html#foo=<script>alert(document.cookie)</script>
В итоге, в HTML-код страницы запишется наш алерт.
Итак, характерными признаками уязвимого кода является:

  • Недостаточная обработка данных, поступающих из Referer или URL страницы
  • Запись этих данных с помощью методов и свойств document.write(), document.writeln(), document.body.innerHTML, document.attachEvent() и других, а также прямое выполнение этих данных с помощью eval().

Ссылки:


4 комментария

  1. Brodnik, 15. июля 2008, 9:48

    Интересный метод.. нужно ставить проверку на данные из урла.

     
  2. Anonumous, 22. сентября 2010, 1:32
  3. Raz0r, 22. сентября 2010, 15:29

    Копипаст с инатака, который скопипастил с секлаба без указания источника. Статья старая, но еще актуальная

     
  4. msangel, 17. февраля 2012, 17:05

    Статья все еще актуальная.

     

Write a comment: