Добро пожаловать на BlackSAMP - ФОРУМ

  • Приватные и секретные разделы доступны только зарегистрированным пользователям.

    Вся важная информация в нашем ТГ: t.me/gtablack

    На данном форуме запрещено публиковать контент нарушающий Российское законодательство, за это последует блокировка ФА.

Уязвимость DOM Clobbering — необычная атака через HTML-теги

Количество просмотров: 27

IlyaMarkinV

Редактор
Редактор
Регистрация
13 Июн 2025
Сообщения
8
Реакции
2
Баллы
3
Сегодня разберём нестандартную атаку — DOM Clobbering, которая позволяет перезаписывать JavaScript-переменные через HTML-разметку.


Что такое DOM Clobbering?
Это техника, когда злоумышленник внедряет HTML-элементы (например,
Код:
<a id="x">
), которые "перебивают" (clobber) глобальные переменные в JS.

Чем опасна?

- Обход защиты XSS (без использования
Код:
<script>
)
- Подмена логики приложения
- Взаимодействие с другими уязвимостями (например, prototype pollution)

Как работает атака?

1. Базовый пример

Допустим, есть такой код:
Код:
javascript
if (window.isAdmin) {
    showAdminPanel();
}

Атакующий может внедрить HTML:
Код:
<a id="isAdmin" href="https://evil.com">Click me</a>

Теперь
Код:
window.isAdmin
ссылается на DOM-элемент → условие сработает!

2. Подмена методов (например, console.log)

Если код использует
Код:
console.log
для логирования:
Код:
javascript
function logError(msg) {
    console.log("[ERROR]", msg);
}

Атакующий внедряет:
Код:
<form id="console" action="javascript:alert(1)">
    <input id="log" value="Hacked!">
</form>

Теперь
Код:
console.log
— это
Код:
<input>
, и при вызове
Код:
logError()
выполнится XSS!


Где встречается?


1. SPA-приложения (React, Angular, Vue), где DOM активно меняется
2. Редакторы контента (TinyMCE, CKEditor)
3. Шаблонизаторы, которые разрешают HTML (например,
Код:
{{{raw_html}}}
)

Как защититься?

1. Используйте let/const вместо глобальных переменных

Код:
javascript
const isAdmin = false;

2. Проверяйте тип переменных
Код:
javascript
if (typeof isAdmin === "boolean") {
    showAdminPanel();
}

3. Очищайте пользовательский HTML

- DOMPurify (для удаления опасных атрибутов)
- CSP с
Код:
unsafe-inline: none

4. Избегайте глобальных неймспейсов
Код:
javascript
const appConfig = Object.freeze({
    isAdmin: false
});


Вывод
DOM Clobbering — это креативная атака, которая обходит классические защиты. Её сложно обнаружить, но легко предотвратить.
 
Сверху Снизу