Skip to content

Conversation

@renovate
Copy link
Contributor

@renovate renovate bot commented Feb 14, 2025

This PR contains the following updates:

Package Change Age Confidence
vega 5.23.0 -> 5.32.0 age confidence

GitHub Vulnerability Alerts

CVE-2025-25304

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]}"}]}

CVE-2025-26619

Impact

In vega 5.30.0 and lower, vega-functions 5.15.0 and lower , it was possible to call JavaScript functions from the Vega expression language that were not meant to be supported.

Patches

Patched in vega 5.31.0 / vega-functions 5.16.0

Workarounds

Is there a way for users to fix or remediate the vulnerability without upgrading?

  • Run vega without vega.expressionInterpreter. This mode is not the default as it is slower.
  • Using the interpreter described in CSP safe mode (Content Security Policy) prevents arbitrary Javascript from running, so users of this mode are not affected by this vulnerability.

References

Reproduction of the error in Vega by @​mattijn

{
  "$schema": "https://vega.github.io/schema/vega/v5.json",
  "signals": [
    {
      "name": "inject_alert",
      "on": [
        {
          "events": [
            {
              "type": "mousedown",
              "marktype": "rect",
              "filter": ["scale(event.view.setTimeout, 'alert(\"alert\")')"]
            }
          ],
          "update": "datum"
        }
      ]
    }
  ],
  "marks": [
    {
      "type": "rect",
      "encode": {
        "update": {
          "x": {"value": 0},
          "y": {"value": 0},
          "width": {"value": 100},
          "height": {"value": 100}
        }
      }
    }
  ]
}

CVE-2025-27793

Impact

Users running Vega/Vega-lite JSON definitions could run unexpected JavaScript code when drawing graphs, unless the library is used with the vega-interpreter.

Workarounds

POC Summary

Calling replace with a RegExp-like pattern calls RegExp.prototype[@&#8203;@&#8203;replace], which can then call an attacker-controlled exec function.

POC Details

Consider the function call replace('foo', {__proto__: /h/.constructor.prototype, global: false}). Since pattern has RegExp.prototype[@&#8203;@&#8203;replace], pattern.exec('foo') winds up being called.

The resulting malicious call looks like this:

replace(<string argument>, {__proto__: /h/.constructor.prototype, exec: <function>, global: false})

Since functions cannot be returned from this, an attacker that wishes to escalate to XSS must abuse event.view to gain access to eval.

Reproduction steps

{"$schema":"https://vega.github.io/schema/vega/v5.json","signals":[{"name":"a","on":[{"events":"body:mousemove{99999}","update":"replace('alert(1)',{__proto__:/h/.constructor.prototype,exec:event.view.eval,global:false})"}]}]}

Release Notes

vega/vega (vega)

v5.32.0

Compare Source

Changes since v5.31.0

vega-expression

  • Add base64 string encoder/decoder to vega-expression and vega-interpreter (via #​4009). (Thanks @​hydrosquall!)

vega-typings

docs

v5.31.0

Compare Source

changes since v5.30.0

vega-utils

  • use Object.hasOwn instead of Object.prototype.hasOwnProperty (via #​3951). (Thanks @​domoritz!)

vega-parser

vega-functions

vega-selections

monorepo

docs

v5.30.0

Compare Source

Changes since v5.29.0

vega-functions

docs

monorepo

v5.29.0

Compare Source

docs

monorepo

vega-encode

vega-scale

vega-scenegraph

vega-typings

vega-view

  • turn off all handlers in View.finalize() to fix memory leak. (via #​3896) (Thanks @​cmerrick!)

v5.28.0

Compare Source

changes from v5.27.0

docs

vega-parser

vega-scenegraph

  • convert some of the scenegraph types to classes (via #​3864). (Thanks @​lsh!)

vega-typings

v5.27.0

Compare Source

changes from v5.26.1:

docs

monorepo

vega-scenegraph

  • Fix blurry zoom from caching devicePixelRatio (via #​3844). (Thanks @​lsh!)

vega-transforms

vega-typings

vega-view

  • Add option to resize on devicePixelRatio change (via #​3844). (Thanks @​lsh!)

v5.26.1

Compare Source

Changes from v5.26.1:

vega-scenegraph

  • Fix CanvasHandler to emit mouse over/move/out events. (#​3825)

vega-typings

  • Expose aggregate parameters in typings. (thanks @​Xitian9)

v5.26.0

Compare Source

Changes from v5.25.0:

vega-functions

  • Add geoScale expression function. (thanks @​binste)

vega-scale

  • Fix tickMinStep calculation. (thanks @​kanitw)

vega-scenegraph

  • Add experimental hybrid canvas/SVG renderer (thanks @​jonmmease)
  • Fall back to textMetrics.width for user defined width function (thanks @​jonmmease)

vega-selections

vega-transforms

  • Add aggregate parameters to vega-transform, and exponential moving average. (thanks @​Xitian9)

vega-typings

vega-voronoi

v5.25.0

Compare Source

Changes from v5.24.0:

monorepo

  • Fix browser lists for IE support. (thanks @​domoritz!)
  • Update dependencies.

vega-cli

vega-expression

vega-functions

  • Update to use hypot.

vega-regression

  • Allow zero-valued order for polynomial regression.

vega-statistics

  • Add constant regression method.

vega-transforms

  • Use robust (null proto) object for aggregate cell map. (#​3695)

vega-util

v5.24.0

Compare Source

Changes from v5.23.0:

monorepo

  • Update dev dependencies.
  • Fix duplicated code in bundle (#​3684).

vega-force

  • Update Force transform schema to allow expression-valued nbody force strength.

vega-schema

  • Update Force transform schema to allow expression-valued nbody force strength.

vega-typings

  • Update Force transform schema to allow expression-valued nbody force strength.

Configuration

📅 Schedule: Branch creation - "" in timezone UTC, Automerge - At any time (no schedule defined).

🚦 Automerge: Enabled.

Rebasing: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.

🔕 Ignore: Close this PR and you won't be reminded about this update again.


  • If you want to rebase/retry this PR, check this box

This PR was generated by Mend Renovate. View the repository job log.

@renovate renovate bot force-pushed the renovate/npm-vega-vulnerability branch from 190c150 to 896c8ad Compare March 3, 2025 12:31
@renovate renovate bot force-pushed the renovate/npm-vega-vulnerability branch from 896c8ad to 4ebdc40 Compare March 27, 2025 16:08
@renovate renovate bot changed the title fix(dependencies): update dependency vega to v5.26.0 [security] fix(dependencies): update dependency vega to v5.31.0 [security] Mar 27, 2025
@renovate renovate bot force-pushed the renovate/npm-vega-vulnerability branch from 4ebdc40 to 26a9cdb Compare March 27, 2025 19:45
@renovate renovate bot changed the title fix(dependencies): update dependency vega to v5.31.0 [security] fix(dependencies): update dependency vega to v5.32.0 [security] Mar 27, 2025
@renovate renovate bot changed the title fix(dependencies): update dependency vega to v5.32.0 [security] chore(dependencies): update dependency vega to v5.32.0 [security] Sep 25, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant