¿Es peligrosa la autoinyección de JavaScript?

5

Tengo una aplicación web de juguetes que se puede describir aproximadamente como un almacén de valor-clave por usuario. Después de iniciar sesión, el usuario puede ver y modificar su conjunto de pares clave-valor. Las claves y los valores se almacenan en una base de datos en el servidor. Las claves o los valores no se comparten entre los usuarios de ninguna manera.

Acabo de descubrir que el código JavaScript incluido en las claves o los valores no se escapó correctamente. Entonces, si un usuario agregó una clave foo con un valor de bar <script>alert(1)</script> , la secuencia de comandos se ejecutaría en el navegador del usuario.

Por supuesto, lo arreglé tan pronto como lo noté. Pero me quedé pensando: ¿Se puede explotar esto para hacer algo dañino? Recuerde que los pares clave-valor SÓLO se muestran al usuario que los creó.

(El único escenario en el que podría pensar es bastante inverosímil: un atacante convence al usuario para que navegue hasta mi aplicación web y luego haga clic en un bookmarklet deshonesto. El bookmarklet guarda un par clave-valor con un script que roba el pares clave-valor del usuario. Debido a que esto persiste en la base de datos, los pares clave-valor se enviarán al atacante cada vez que el usuario cargue la página. Pero con un bookmarklet no autorizado, puede hacer casi cualquier cosa ...)

    
pregunta cberzan 08.11.2012 - 18:19
fuente

4 respuestas

7

Puede haber cierto potencial para un ataque CSRF, donde un atacante guarda maliciosamente un par de valores clave en nombre de sus usuarios. Luego, el JS ejecutable en el par de valores clave podría ser utilizado para una ejecución del ataque XSS de Mill para robar sus cookies y potencialmente permitir que el atacante acceda a la aplicación como víctima.

Estoy de acuerdo con el comentario de Jimmy. Si hay alguna posibilidad de borrar correctamente la entrada del usuario, esa sería mi primera prioridad.

    
respondido por el Xander 08.11.2012 - 19:41
fuente
4

Es difícil decirlo sin mirar tu aplicación en detalle, pero sí, hay un potencial de ataques aquí. Si existe alguna forma de que un par clave-valor se almacene en el perfil de un usuario, donde el valor esté parcial o completamente controlado por otra persona, esto podría provocar un ataque XSS.

Ejemplo: Supongamos que hay una manera de enviar un mensaje instantáneo a un usuario, y el mensaje se guarda automáticamente en el almacén de valores clave del destinatario (o tal vez hay un botón que el usuario puede presionar para guardarlo). Entonces tienes problemas.

Si su aplicación tiene una gran cantidad de funciones, hay muchas maneras en que los datos que no son de confianza pueden ser almacenados en el almacén de valores clave. Por lo tanto, sugeriría que corrijas esta vulnerabilidad. Una forma estándar de solucionar esto es escapar del valor antes de insertarlo en el documento HTML.

    
respondido por el D.W. 08.11.2012 - 19:46
fuente
0

Si la cuenta de un usuario se ve comprometida, un atacante podría almacenar una clave con javascript malintencionado si quisiera.

Ese sería el mayor peligro que veo.

    
respondido por el Rell3oT 08.11.2012 - 18:58
fuente
0

Como D.W. Dice que es difícil decirlo sin saber la aplicación. Si estaba seguro al 110% de que el valor clave nunca se mostraría a ningún otro usuario que no sea el usuario que lo colocó allí, no veo ningún peligro, pero esa dosis compensa el hecho de que está abierto para XSS. Siempre debe solucionar estos problemas: las aplicaciones evolucionan y, algún día, ese valor clave de repente se ha abierto a otros usuarios y luego tiene problemas :)

    
respondido por el Ronnie Jespersen 09.11.2012 - 11:41
fuente

Lea otras preguntas en las etiquetas