Обхід XSS-блокаторів за допомогою скрипт-гаджетів
XSS (Cross-Site Scripting, міжсайтовий скриптинг) - хронічна хвороба будь-якого веб-софта. Протягом довгих років робляться все нові і нові спроби перемогти XSS. Більшість цих спроб зосереджені на контролі тегів, в яких можна запускати скрипти, і на контролі обробників подій. Політика HTML-дезінфекції, наприклад, націлена на видалення потенційно небезпечних тегів і атрибутів. Інша політика, CSP (Content Security Policy, політика захисту контенту), забороняє використовувати вбудовані обробники подій і обмежує допустимі до використання скрипти білим списком.
У цій доповіді представлена нова техніка злому веб-софта, яка дозволяє зловмисникові обходити більшість XSS-блокаторів. Суть цієї техніки - у використанні так званих скрипт-гаджетів. Скрипт-гаджет - це законний фрагмент JS-коду на веб-сторінці, який за допомогою CSS-селекторів зчитує вміст DOM-елементів та потім обробляє їх таким чином, щоб запустився шкідливий скрипт.
Для зловживання скрипт-гаджетом зловмисник робить на сторінці-жертві JS-ін'єкцію, яка виглядає як цілком законний JS-код, але може «помилково» збільшувати привілеї доступу до оброблюваного DOM-елементу. Згодом скрипт-гаджет запускає знаходяться під контролем зловмисника скрипти. Оскільки спочатку імплантований елемент виглядає доброякісним, він легко проходить повз XSS-блокаторів.
У пропонованому доповіді продемонстровано, що скрипт-гаджети присутні практично у всіх сучасних JS-бібліотеках, API і веб-софт. У доповіді представлено кілька тематичних досліджень і реальні приклади з дикої природи, що демонструють, що переважна більшість нині існуючих методів протидії XSS неспроможні.
Повна версія доповіді: Bypassing XSS Mitigations via Script Gadgets (PDF)