<?xml version='1.0' encoding='UTF-8'?>
<?xml-stylesheet href="/static/style.xsl" type="text/xsl"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" version="2.0">
  <channel>
    <title>Most recent entries from all</title>
    <link>https://db.gcve.eu</link>
    <description>Contains only the most 10 recent entries.</description>
    <docs>http://www.rssboard.org/rss-specification</docs>
    <generator>python-feedgen</generator>
    <language>en</language>
    <lastBuildDate>Thu, 29 Oct 2026 22:35:31 +0000</lastBuildDate>
    <item>
      <title>GHSA-jqgh-w3cc-7jqw — Highcharts Dashboards: `__proto__` data table id writes sync listeners to `Object.prototype`</title>
      <link>https://db.gcve.eu/vuln/ghsa-jqgh-w3cc-7jqw</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; npm: @highcharts/dashboards&lt;/p&gt;
&lt;p&gt;### Impact
The data cursor keeps its listener and state bookkeeping in plain objects keyed by data table id, so a table id of `__proto__` supplied in the `dataPool` connector configuration resolves to `Object.prototype` when a sync registers its listeners, and the registration creates a property on `Object.prototype` named after the sync state and holding the internal listener array. The property name begins with a state prefix fixed by the library, to which the sync `group` option can append an attacker-chosen suffix, and its value is the library&amp;#39;s own listener array, but the property is enumerable and visible on every object in the page, and emitting a lasting state for that table id then throws, so syncs that keep lasting states, such as `extremes`, stop working. Exploitation requires that untrusted data reach the Dashboards configuration and that a sync such as `highlight` or `extremes` be enabled on a component using that table, which the same configuration can do. No user interaction is required beyond loading the board.&lt;/p&gt;
&lt;p&gt;The injected property is inert until other code on the page reads or enumerates it, so consequences depend on the consuming application.&lt;/p&gt;
&lt;p&gt;### Workarounds
**Drop-in fix - for any Highcharts Dashboards versions affected (1.0.0-4.2.1).**
Add the below IIFE to run after Highcharts Dashboards is loaded.&lt;/p&gt;
&lt;p&gt;```
!function(t){if(t&amp;amp;&amp;amp;t.DataCursor&amp;amp;&amp;amp;t.DataTable){var e=t.DataCursor.prototype,r=t.DataTable.prototype;e.tableIdPollutionPatched||(e.tableIdPollutionPatc…&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; npm: @highcharts/dashboards&lt;/p&gt;
&lt;p&gt;### Impact
The data cursor keeps its listener and state bookkeeping in plain objects keyed by data table id, so a table id of `__proto__` supplied in the `dataPool` connector configuration resolves to `Object.prototype` when a sync registers its listeners, and the registration creates a property on `Object.prototype` named after the sync state and holding the internal listener array. The property name begins with a state prefix fixed by the library, to which the sync `group` option can append an attacker-chosen suffix, and its value is the library&amp;#39;s own listener array, but the property is enumerable and visible on every object in the page, and emitting a lasting state for that table id then throws, so syncs that keep lasting states, such as `extremes`, stop working. Exploitation requires that untrusted data reach the Dashboards configuration and that a sync such as `highlight` or `extremes` be enabled on a component using that table, which the same configuration can do. No user interaction is required beyond loading the board.&lt;/p&gt;
&lt;p&gt;The injected property is inert until other code on the page reads or enumerates it, so consequences depend on the consuming application.&lt;/p&gt;
&lt;p&gt;### Workarounds
**Drop-in fix - for any Highcharts Dashboards versions affected (1.0.0-4.2.1).**
Add the below IIFE to run after Highcharts Dashboards is loaded.&lt;/p&gt;
&lt;p&gt;```
!function(t){if(t&amp;amp;&amp;amp;t.DataCursor&amp;amp;&amp;amp;t.DataTable){var e=t.DataCursor.prototype,r=t.DataTable.prototype;e.tableIdPollutionPatched||(e.tableIdPollutionPatc…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://db.gcve.eu/vuln/ghsa-jqgh-w3cc-7jqw</guid>
    </item>
  </channel>
</rss>
