tl;dr: window.name, DOM XSS & abusing Objects used as containers
What's in a name?
"What's in a name? That which we call a rose
By any other name would smell as sweet"
(Romeo & Juliet, Act II, Scene 2)
While Juliet probably was a pretty smart girl, this time she got it wrong. There
is something special in a name. At least in
window.name. For example, it can ignore Same Origin Policy restrictions. Documents from https://example.com and https://foo.bar are isolated from each other, but they can "speak" through
window.name.
Since
name is special for Same Origin Policy, it must have some evil usage, right? Right - the cutest one is that
eval(name)is the shortest XSS payload loader so far:
- create a window/frame
- put the payload in it's name
- just load http://vuln/?xss="><script>eval(name)</script>.
But that's
old news (I think it was
Gareth's trick, correct me if I'm wrong). This time I'll focus on exploiting software that uses
window.name for legitimate purposes. A fun practical challenge (found by accident, srsly)!