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 ...)