Las respuestas JSON pueden aprovecharse anulando los constructores de Array o si los valores host no son JavaScript de cadena de caracteres escapada.¿Es posible explotar las respuestas JSON de XSS con la cadena de JavaScript adecuada al escaparse
Supongamos que ambos vectores se tratan de la manera normal. Google atrapa famoso respuesta JSON abastecimiento directo con el prefijo toda JSON con algo como:
throw 1; < don't be evil' >
y luego el resto de la JSON sigue. Así que el Dr. El mal no puede, utilizando el tipo de explotar discutido aquí http://sla.ckers.org/forum/read.php?2,25788 obtener la cookie (suponiendo que está conectado), colocando lo siguiente en su sitio:
<script src="http://yourbank.com/accountStatus.json">
En cuanto a la cadena de escapar de las reglas, así que si' Si utilizamos comillas dobles, necesitamos ponerles una barra diagonal inversa y cada barra invertida con otra barra invertida, etc.
Pero mi pregunta es, ¿qué pasa si estás haciendo todo esto?
Burpsuite (la herramienta de seguridad automatizada) detecta los intentos de XSS incrustados que se devuelven escaneados sin HTML en una respuesta JSON y lo informa como una vulnerabilidad XSS. Tengo un informe de que mi aplicación contiene vulnerabilidades de este tipo, pero no estoy seguro. Lo he intentado y no puedo hacer que un exploit funcione.
Así que no creo que esto es correcto, pero les pido que Stackoverflow comunidad, a pesar adentro.
Hay un caso específico, el de IE tipo MIME oler que creo que podría dar lugar a un exploit . Después de todo, IE 7 aún tenía la "característica" de que las etiquetas de script incrustadas en los comentarios de imagen se ejecutaran independientemente del encabezado de tipo de contenido. Dejemos ese comportamiento claramente estúpido a un lado al principio.
Seguramente el JSON sería analizado por el analizador nativo de JavaScript (Window.JSON en Firefox) o por un eval() según el antiguo comportamiento predeterminado de jQuery. En ninguno de los casos, la siguiente expresión dará como resultado que se ejecute la alerta:
{"myJSON": "legit", "someParam": "12345<script>alert(1)</script>"}
¿Estoy en lo cierto o estoy equivocado?
OK, así que supongo que podría haberlo aclarado, pero la respuesta JSON de la que hablo se define por la presencia del encabezado Content-Type que tiene el valor "application/json". Entonces parece que estás confirmando que no hay ningún exploit. ¿No se puede explotar su código mediante el abastecimiento directo en un dominio hostil, es decir, utilizando la etiqueta de script y parametrizando la fuente para incluir código que luego se ejecutará en el contexto del dominio del que proviene? En ese caso, las cookies del dominio serían accesibles y podrían ser capturadas por la página llamante utilizando document.write. ¿Derecha? –
@Chris Mountford, el JavaScript inyectado no se ejecuta porque el servidor le dice también al navegador que no. Piénselo así, ¿y si tuviera JavaScript en .exe? Este * podría llevar * Dom Based XSS, pero también otros diseños. Dom xss se ejecuta con la misma política desde la que se ejecuta. La única forma en que esto puede ser un problema para usted es si usted 'evalúa 'el código en su propio sitio. – rook
Mi entendimiento era que JSON era eval() 'd muy comúnmente en el pasado, al menos por defecto en jQuery (como dije). Sin embargo, estoy interesado no en la inyección de JavaScript, sino en la inyección de HTML en JSON, que conduce a la ejecución de JavaScript. ¿Puedes comentar sobre eso? Además, como dije IE, tan reciente como v7, he confirmado que puedo IGNORAR el encabezado Content-Type bajo ciertas circunstancias. Sí, esto es un error en IE, pero Microsoft argumentó que no (independientemente del RFC) y, al final, por seguridad, solo importa lo que los navegadores no especifiquen las especificaciones. –