Algunos de nuestros clientes han interpelado sobre una vulnerabilidad XSS percibida en todos nuestros puntos finales JSONP, pero estoy en desacuerdo sobre si realmente constituye o no una vulnerabilidad. Quería obtener la opinión de la comunidad para asegurarme de no perderme nada.Vulnerabilidad aparente de jsonp xss
Por lo tanto, al igual que con cualquier sistema jsonp, tenemos un punto final como:
http://foo.com/jsonp?cb=callback123
donde el valor del parámetro CB se repite de nuevo en la respuesta:
callback123({"foo":"bar"});
Los clientes se han quejado de que no filtramos el código HTML en el parámetro CB, así que crearán un ejemplo como este:
http://foo.com/jsonp?cb=<body onload="alert('h4x0rd');"/><!--
Obviamente para una URL que devuelve el tipo de contenido text/html
, esto plantea un problema en el que el navegador representa ese HTML y luego ejecuta el javascript potencialmente malicioso en el controlador de carga. Podría usarse para robar cookies y enviarlas al sitio del atacante, o incluso para generar una pantalla de inicio de sesión falsa para phishing. El usuario verifica el dominio y ve que es uno en el que confía, por lo que se pone en marcha e inicia sesión.
Pero, en nuestro caso, estamos configurando el encabezado del tipo de contenido en application/javascript
, que causa diferentes comportamientos en diferentes navegadores. es decir, Firefox simplemente muestra el texto sin procesar, mientras que IE abre un cuadro de diálogo "guardar como ...". No considero que ninguno de los dos sea particularmente explotable. El usuario de Firefox no leerá texto malicioso diciéndole que salte de un puente y piense mucho sobre él. Y el usuario de IE probablemente se confundirá con el diálogo de guardar como y presionará cancelar.
Supongo que podría ver un caso donde el usuario de IE es engañado para guardar y abrir el archivo .js, que luego pasa por el motor de Microsoft JScript y obtiene todo tipo de acceso a la máquina del usuario; pero eso parece poco probable. ¿Es esa la mayor amenaza aquí o hay alguna otra vulnerabilidad que eché de menos?
(Obviamente voy a "corregir" al poner filtros para aceptar solo un identificador de JavaScript válido, con un límite de longitud por caso, pero solo quería un diálogo sobre otras amenazas que podría haber perdido .)
"Solo quería un diálogo sobre qué otras amenazas podría haber perdido "cuál es la pregunta ... y gracias a Dios que los clientes solo se han quejado" ¡Me sorprende que no hayan pirateado su sitio! – TheBlackBenzKid
También. documento.write e innerHTML - He encontrado estos dos comandos como soluciones cuando uso los encabezados de la aplicación/javascript en mi servidor nginx - resuelve mi IE o cualquier otro problema. La página simplemente ejecuta texto o código de manera normal – TheBlackBenzKid