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().

Ссылки:


Posted

in

by

Comments

4 responses to “XSS через DOM”

  1. Brodnik Avatar

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

  2. Raz0r Avatar

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

  3. msangel Avatar
    msangel

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

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.