Web messages
Если страница небезопасно обрабатывает входящие веб‑сообщения, например, некорректно проверяет origin входящих сообщений в обработчике события, то свойства и функции, вызываемые этим обработчиком, потенциально могут стать приёмниками. Например, злоумышленник может разместить вредоносный iframe и использовать метод postMessage()для передачи данных уязвимому обработчику, который затем отправляет полезную нагрузку в приёмник на родительской странице. Это означает, что веб‑сообщения можно использовать как источник для распространения вредоносных данных к любым из этих приёмников.
Каковы последствия уязвимостей веб‑сообщений?
Потенциальное воздействие уязвимости зависит от того, как документ‑получатель обрабатывает входящее сообщение. Если документ‑получатель доверяет отправителю и небезопасно обрабатывает полученные данные, передавая их в приёмник, то совместное поведение двух документов может позволить злоумышленнику скомпрометировать пользователя.
Как сконструировать атаку, используя веб‑сообщения в качестве источника
Рассмотрим следующий код:
<script>
window.addEventListener('message', function(e) {
eval(e.data);
});
</script>Он уязвим, поскольку злоумышленник может внедрить JavaScript‑полезную нагрузку, сконструировав следующий iframe:
<iframe src="//vulnerable-website" onload="this.contentWindow.postMessage('print()','*')">Поскольку обработчик события не проверяет происхождение сообщения, а метод postMessage() указывает targetOrigin как "*", обработчик принимает полезную нагрузку и передаёт её в приёмник, в данном случае в функцию eval().
Проверка origin
Даже если обработчик события включает некоторую форму проверки origin, этот шаг проверки иногда может быть принципиально ошибочным. Например, рассмотрим следующий код:
Метод indexOf используется, чтобы попытаться проверить, что происхождение входящего сообщения относится к домену normal-website.com. Однако на практике он лишь проверяет, содержится ли строка "normal-website.com"где‑нибудь в origin. В результате злоумышленник может легко обойти эту проверку, если origin его вредоносного сообщения будет, например, http://www.normal-website.com.evil.net.
Та же уязвимость относится к проверкам, основанным на методах startsWith()или endsWith(). Например, следующий обработчик события посчитает origin http://www.malicious-websitenormal-website.com безопасным:
Какие приёмники могут привести к уязвимостям веб‑сообщений?
Пока сайт принимает данные веб‑сообщений из ненадежных источников из‑за недостаточной проверки origin, любые приёмники, используемые обработчиком события входящего сообщения, потенциально могут приводить к уязвимостям.
Last updated