У страницы может быть только один
<html> и один <body>. Если определить большее количество, их атрибуты будут объединены с атрибутами первого элемента 🎨Поскольку некоторые санитайзеры могут не учитывать механизм объединения атрибутов, можно использовать эту фичу для разделения XSS-вектора по нескольким тегам:
<body style=animation:x id='First Body Tag'>
<body onanimationend=alert(this.id)>
<style>@keyframes x{
После парсинга браузер сформирует единый
<body>, в результате чего:1⃣
style=animation:x активирует фиктивную CSS-анимацию.2⃣ Когда анимация завершается, событие
onanimationend вызывает JavaScript.3⃣ Санитайзер может пропустить такой пэйлоад, так как опасные атрибуты находятся в разных местах и выглядят безвредно по отдельности.
➡️ При написании поста вдохновились этим исследованием
