ИНИЦИАЛИЗАЦИЯ СТЕНДА
POSTMESSAGE_DISPATCHER · SEBERD IT BASE
POST MESSAGE
Межоконный диспетчер безопасности — защитите браузер от атак через postMessage API
Wildcard Send
postMessage(data, '*') — второй аргумент задаёт получателя. Звёздочка = все. Любой iframe на странице прочитает сообщение.
No Origin Check
Листнер
addEventListener('message', …) без проверки event.origin принимает сообщения от любого домена в браузере.
Regex Bypass
/safe.example.com/ — точка в regex = любой символ. safeXexample.com и evil.com/?x=safe.example.com пройдут проверку.
XSS via innerHTML
Даже при верной проверке origin —
element.innerHTML = e.data делает данные исполняемым кодом. Один взломанный «доверенный» источник = XSS.
Token Exfil
JWT или session token отправляется с
'*'. Атакующий встраивает ваш виджет на своём домене и перехватывает токен сразу после входа жертвы.
Source Spoof
event.source — ссылка на window-объект, не строка домена. После SPA-навигации iframe'а объект window переиспользуется — source «совпадёт», но домен другой.
1
Наблюдай за сценой — три изометрических «здания»: trusted.com, app.com и attacker.net. Между ними летит конверт с postMessage.
2
Читай код справа — фрагмент JavaScript содержит уязвимость. Подсвеченный красным участок — потенциальная проблема.
3
Определи класс уязвимости — три кнопки снизу. Одна правильная, две — дистракторы. Клавиши A/B/C тоже работают.
4
Следи за таймером — кольцо сверху. Желтый = половина времени. Красный = осталось мало. Не успел — жизнь потеряна.
5
Читай разборы — после каждого уровня открывается панель с объяснением атаки, реальным примером и правильным кодом.
3 жизни · таймер · комбо ×1→×4 · 6 уровней · +100 очков за верный ответ
❌ ТИПИЧНАЯ ОШИБКА
window.addEventListener('message', e => { // нет проверки origin + innerHTML = XSS document.querySelector('#out').innerHTML = e.data.html; });
✅ ПРАВИЛЬНЫЙ ПАТТЕРН
// 1. Whitelist допустимых origins const TRUSTED = new Set([ 'https://app.example.com' ]); window.addEventListener('message', e => { // 2. Origin — первая строка, строгая проверка if (!TRUSTED.has(e.origin)) return; // 3. textContent вместо innerHTML document.querySelector('#out').textContent = e.data.text; });
OWASP WSTG-CLNT-11 · Microsoft MSRC 2025 · Detectify Labs
6 уровней · таймер · жизни · комбо
POST MSG
УРОВЕНЬ 1/6
10
0
ОЧКИ
×1
КОМБО
trusted.com
app.com
attacker.net
TOKEN
Код листнера
—
—
УРОВЕНЬ ПРОЙДЕН
—
—
Браузер скомпрометирован
—
Браузер защищён!
Все 6 уязвимостей postMessage нейтрализованы.
Вы изучили: