<?xml version='1.0' encoding='UTF-8'?>
<?xml-stylesheet href="/static/style.xsl" type="text/xsl"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
  <id>https://cve.radiocsirt.org/rss/recent/all/10</id>
  <title>Most recent entries from all</title>
  <updated>2026-10-06T16:55:41.626979+00:00</updated>
  <author>
    <name>Vulnerability-Lookup</name>
    <email>csirt@opendfir.org</email>
  </author>
  <link href="https://cve.radiocsirt.org" rel="alternate"/>
  <generator uri="https://lkiesow.github.io/python-feedgen" version="1.0.0">python-feedgen</generator>
  <subtitle>Contains only the most 10 recent entries.</subtitle>
  <entry>
    <id>https://cve.radiocsirt.org/vuln/euvd-2026-327331</id>
    <title>EUVD-2026-327331</title>
    <updated>2026-10-06T16:55:41.691507+00:00</updated>
    <content>EUVD-2026-327331</content>
    <link href="https://cve.radiocsirt.org/vuln/euvd-2026-327331"/>
  </entry>
  <entry>
    <id>https://cve.radiocsirt.org/vuln/fkie_cve-2026-53608</id>
    <title>fkie_cve-2026-53608</title>
    <updated>2026-10-06T16:55:41.691545+00:00</updated>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>ApostropheCMS is an open-source Node.js content management system. Versions up to and including 1.4.2 of the `@apostrophecms/seo` package injects the Google Analytics Tracking ID (`seoGoogleTrackingId`) and Google Tag Manager ID (`seoGoogleTagManager`) directly into `&lt;script&gt;` tag bodies using JavaScript template literals without any sanitization or validation. Any user with editor-level access (the default role for content managers) can set these fields to a malicious value, resulting in stored XSS that executes on every page for every visitor of the site. As of time of publication, no known patched versions are available.</p>
      </div>
    </content>
    <link href="https://cve.radiocsirt.org/vuln/fkie_cve-2026-53608"/>
  </entry>
  <entry>
    <id>https://cve.radiocsirt.org/vuln/ghsa-wf43-fpp3-cf65</id>
    <title>GHSA-wf43-fpp3-cf65 — @apostrophecms/seo Vulnerable to Stored XSS via Unsanitized Google Analytics / GTM ID Injected into Script Tag</title>
    <updated>2026-10-06T16:55:41.691589+00:00</updated>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml"><p><strong>Affected:</strong> npm: @apostrophecms/seo</p>
<p>&lt;img width="1919" height="1046" alt="curl" src="https://github.com/user-attachments/assets/8aa19ff1-7f4b-44ee-83d5-d0dd1a0269f6" /&gt;
&lt;img width="1919" height="775" alt="xss" src="https://github.com/user-attachments/assets/a65012e8-9b2f-416f-94df-c00493f2ca1d" /&gt;</p>
<p>### Summary</p>
<p>The `@apostrophecms/seo` package injects the Google Analytics Tracking ID (`seoGoogleTrackingId`) and Google Tag Manager ID (`seoGoogleTagManager`) directly into `&lt;script&gt;` tag bodies using JavaScript template literals without any sanitization or validation.</p>
<p>Any user with editor-level access (the default role for content managers) can set these fields to a malicious value, resulting in stored XSS that executes on every page for every visitor of the site.</p>
<p>### Details</p>
<p>The vulnerable code is in `node_modules/@apostrophecms/seo/lib/nodes.js`.</p>
<p>**Google Analytics (lines 218–224):**</p>
<p>```javascript
// seoGoogleTrackingId is inserted RAW into a &lt;script&gt; body — no escaping, no validation
body: [ {
  raw: `
  window.dataLayer = window.dataLayer || [];
  function gtag(){dataLayer.push(arguments);}
  gtag('js', new Date());
  gtag('config', '${global.seoGoogleTrackingId}');
`
} ]
```</p>
<p>**Google Tag Manager (lines 358–362):**</p>
<p>```javascript
body: [ {
  raw: `(function(w,d,s,l,i){...})(window,document,'script','dataLayer','${global.seoGoogleTagManager}');`
} ]
```</p>
<p>These nodes are rendered by `renderNodes()` in ApostropheCMS core (`modules/@apostrophecms/template/index.js` lines 1176–1177):</p>
<p>```javascript
if (node.r…</p></div>
    </content>
    <link href="https://cve.radiocsirt.org/vuln/ghsa-wf43-fpp3-cf65"/>
  </entry>
</feed>
