DOM XSS
Корисне навантаження ніколи не досягає сервера. Він все ще працює.
Що таке DOM XSS?
XSS на основі DOM — це міжсайтовий сценарій, який ваш сервер ніколи не бачить. Корисне навантаження міститься у фрагменті URL-адреси, document.referrer або postMessage , а JavaScript на стороні клієнта записує його в innerHTML . Серверні фільтри та брандмауери веб-додатків сліпі до всього цього. Ви запакуєте корисне навантаження img onerror у посилання спільного використання для засобу перегляду нотаток, відкриєте його самостійно, простежите потік від джерела до приймача та виправите це за допомогою textContent , щоб браузер створював текстовий вузол замість аналізу розмітки.
Що ви дізнаєтесь у DOM XSS
- Розпізнайте шаблон «джерело-приймач»: кероване зловмисником джерело DOM (location.hash, document.referrer, postMessage) передає небезпечний приймач DOM (innerHTML, eval, document.write)
- Поясніть, чому хеш URL-адреси ніколи не досягає сервера та чому WAF/серверні фільтри не бачать DOM XSS
- Застосуйте правильне первинне виправлення: замініть небезпечний приймач (innerHTML) на безпечний (textContent), а не фільтрацію на стороні сервера чи перезапис введення
- Відрізняйте DOM XSS від відображеного та збереженого XSS за тим, куди надходить корисне навантаження та де має приземлитися виправлення
- Перевірте кодову базу для суміжних каналів джерело-приймач, коли виявилася одна помилка
DOM XSS — Кроки навчання
-
Відкрийте інструмент обміну нотатками
Сьогодні Боб націлений на Tideline Federal, співробітники якої швидко передають нотатки через внутрішній інструмент обміну. Ви пишете нотатку, інструмент передає вам посилання, і кожен, хто відкриває посилання, читає нотатку у своєму браузері. Боб відкриває композитор, щоб побачити, як нота стає посиланням.
-
Поділіться звичайною заміткою
Спочатку Боб ділиться звичайною нотаткою, щоб побачити, як інструмент створює посилання. Все, що він пише, потрапляє в саме посилання.
-
Замітка їде за посиланням
Ось посилання для спільного доступу. Вся нота знаходиться в ній, у частині після # . Коли хтось відкриває посилання, глядач читає цей фрагмент і відображає його. Нічого про замітку ніколи не досягає сервера Tideline.
-
Створіть тестове корисне навантаження
Переглядач переносить все, що містить нотатка, на сторінку як HTML. Отже, Боб пише примітку, яка насправді не є приміткою: тег зображення, джерело якого не може завантажити, має обробник onerror . Коли зображення не вдається, запускається обробник, і будь-який код, який він містить, виконується в браузері того, хто відкриває посилання. Він починає з найпростішого доказу, звичайного alert(1) , щоб підтвердити, що його код взагалі працює.
-
Перевірте корисне навантаження
Перш ніж використовувати будь-яку зброю, Боб переглядає власне посилання, щоб перевірити, чи спрацьовує корисне навантаження. Попередній перегляд відкриває нотатку саме так, як її побачить одержувач. У той момент, коли програма перегляду завантажує його, з’являється сповіщення. Його код виконується в браузері точно так, як було заплановано.
-
Озброїти це
Доказ працює, тому тепер Боб робить це небезпечним. Він повертається до композитора і замінює нешкідливе сповіщення на рядок, у якому читається файл cookie сеансу відвідувача, маркер, який утримує їх у системі. Справжнє корисне навантаження відправлятиме цей файл cookie на власний сервер без звуку. Тут він показує викрадену цінність, щоб ви могли точно побачити, що вона зафіксувала.
-
Надішліть посилання жертві
Боб надсилає посилання на зброю Алісі, інженеру Tideline, яка цілий день відкриває спільні нотатки. Це оформлено як записка, яку вона поділила перед ранковим оглядом, тож у неї немає причин вагатися.
-
Надходить спільна нотатка
Електронна пошта Боба вже в дорозі. Ви володієте кодом переглядача інструмента обміну нотатками, і спільна нотатка потрапляє у вашу папку 'Вхідні' безпосередньо перед переглядом о 10:00. Відкрийте його, а потім відкрийте нотатку.
-
Відкрийте спільну нотатку
Нічого не виглядає непомітно, тому ви відкриваєте нотатку так само, як відкриваєте десятки інших.
-
Записка краде ваш сеанс
У той момент, коли нотатка завантажується, це спливаюче вікно запускається у вашому браузері, і воно показує ваш власний файл 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