DOM XSS

DOM XSS

Пейлоад ніколи не потрапляє на сервер. І все одно виконується.

Що таке DOM XSS?

XSS на основі DOM — це міжсайтовий скриптинг, якого ваш сервер ніколи не бачить. Пейлоад міститься у фрагменті URL, у document.referrer або в тілі postMessage , а клієнтський JavaScript записує його в innerHTML . Серверні фільтри й брандмауери вебзастосунків не бачать ні фрагмента, ні тіла postMessage . Ви запакуєте пейлоад img onerror у посилання на сторінку перегляду нотаток, відкриєте його самі, простежите шлях від джерела до приймача (sink) й виправите помилку: запишете нотатку через textContent , щоб браузер створив текстовий вузол, а не розбирав розмітку.

Що ви дізнаєтесь у DOM XSS

DOM XSS — Кроки навчання

  1. Відкрийте інструмент для обміну нотатками

    Сьогодні мета Боба — Tideline Federal: її працівники обмінюються короткими нотатками через внутрішній інструмент спільного доступу. Ви пишете нотатку, інструмент видає вам посилання, і кожен, хто відкриває це посилання, читає нотатку у своєму браузері. Боб відкриває редактор, щоб побачити, як нотатка стає посиланням.

  2. Поділіться звичайною нотаткою

    Спершу Боб ділиться звичайною нотаткою, щоб побачити, як інструмент будує посилання. Усе, що він напише, потрапляє просто в саме посилання.

  3. Нотатка всередині посилання

    Ось посилання для спільного доступу. Уся нотатка лежить усередині нього, у частині після # . Коли хтось відкриває посилання, сторінка перегляду читає цей фрагмент і відображає його. Нічого з вмісту нотатки ніколи не потрапляє на сервер Tideline.

  4. Складіть тестовий пейлоад

    Що б не містила нотатка, сторінка перегляду вставляє це на сторінку як HTML. Тож Боб пише нотатку, яка насправді не нотатка: тег зображення, у якого атрибут src вказує на файл, що не завантажується, і з обробником onerror . Коли зображення не завантажується, спрацьовує обробник, і будь-який код у ньому виконується в браузері того, хто відкриє посилання. Боб починає з найпростішої перевірки — звичайного alert(1) , просто щоб переконатися, що його код узагалі виконується.

  5. Перевірте пейлоад

    Перш ніж зробити пейлоад бойовим, Боб переглядає власне посилання, щоб перевірити, що пейлоад спрацьовує. Кнопка «Переглянути» відкриває нотатку точно так, як її побачить отримувач. Щойно сторінка перегляду завантажує нотатку, з'являється вікно alert. Код Боба виконується в браузері, саме так, як він і планував.

  6. Зробіть пейлоад бойовим

    Підтвердження спрацювало, тож тепер Боб робить пейлоад небезпечним. Він повертається до редактора й замінює нешкідливий alert рядком, що читає сесійний cookie відвідувача, тобто токен, який підтримує вхід у систему. Справжній пейлоад непомітно надіслав би цей cookie на власний сервер Боба. Тут він виводить викрадене значення у вікні, щоб ви побачили, що саме він перехоплює.

  7. Надішліть посилання жертві

    Боб надсилає бойове посилання електронною поштою Алісі, інженерці з Tideline, яка цілий день відкриває спільні нотатки. Воно подане як нотатка, якою діляться перед її ранковою зустріччю, тож у неї немає причин вагатися.

  8. Надходить спільна нотатка

    Лист Боба вже в дорозі. Ви відповідаєте за код сторінки перегляду в інструменті для обміну нотатками, і спільна нотатка надходить у вашу поштову скриньку якраз перед зустріччю о 10:00. Відкрийте лист, а потім саму нотатку.

  9. Відкрийте спільну нотатку

    Нічого підозрілого не видно, тож ви відкриваєте нотатку так, як відкриваєте десятки інших.

  10. Нотатка краде вашу сесію

    У ту саму мить, коли нотатка завантажилася, у вашому браузері з'явилося це спливне вікно, і воно показує ваш власний сесійний cookie — токен, який підтримує ваш вхід. Ви нічого не натискали й нічого не вводили. Спільна нотатка містила скрипт, який щойно прочитав вашу сесію й міг би одразу надіслати її зловмисникові. Це повний злам облікового запису: досить відкрити одне посилання. Скрипт зміг прочитати sid тільки тому, що в цього cookie немає атрибута HttpOnly ; а з HttpOnly скрипт усе одно міг би діяти від вашого імені на сторінці, але не прочитав би сам cookie.

Охоплення стандартів безпеки

OWASP Top 10

  • A05:2025 Injection
  • A03:2021 Injection

CWE

  • CWE-79 Improper Neutralization of Input During Web Page Generation

CIS Controls

  • CIS 16 Application Software Security

NIST CSF

  • PR.AT-02 Individuals in specialized roles are provided with awareness and training so that they possess the knowledge and skills to perform relevant tasks with cybersecurity risks in mind
  • PR.PS Platform Security