Vega Expression Language `scale` expression function Cross Site Scripting
Description
Published to the GitHub Advisory Database
Mar 2, 2023
Reviewed
Mar 2, 2023
Published by the National Vulnerability Database
Mar 4, 2023
Last updated
Mar 9, 2023
Summary
The Vega
scale
expression function has the ability to call arbitrary functions with a single controlled argument. This can be exploited to escape the Vega expression sandbox in order to execute arbitrary JavaScript.Details
The scale expression function passes a user supplied argument
group
to getScale, which is then used as if it were an internal context. Thecontext.scales[name].value
is accessed fromgroup
and called as a function back inscale
.PoC
The following Vega definition can be used to demonstrate this issue executing the JavaScript code
alert(1);
This can be viewed in the Vega online IDE at https://vega.github.io/editor/#/url/vega/N4IgJAzgxgFgpgWwIYgFwhgF0wBwqgegIDc4BzJAOjIEtMYBXAI0poHsDp5kTykSArJQBWENgDsQAGhAATJJhSoA2qHFIEcNCAAaAZT0ACAApsAwtJDEkAGwZwIaZQEYAujMwAnJOIgAzNk8EJ1BMAE8cLXQAoIYbFBkkR3QNNgZxTEs4AA8cT21oWzgACgByP3SoUqlDcTibGsNgKAlMHMxUJsKbB07gCvEoPus7OE7ukvLK6sNSuBHihTYmYoAdEABNAHVsmyhxAEU2AFk9AGsAdnWASmuZ5tb2von8JoGhppH7TuVXShbfF4GFBMIF-hIIECQYEAL5wmHXeEIkAw1yomFAA
References