<?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, 22 Oct 2026 09:15:21 +0000</lastBuildDate>
    <item>
      <title>fkie_cve-2026-113654</title>
      <link>https://db.gcve.eu/vuln/fkie_cve-2026-113654</link>
      <description>&lt;p&gt;ApostropheCMS is an open-source Node.js content management system, and sanitize-html provides a simple HTML sanitizer with a clear API. Prior to sanitize-html 2.18.0, a non-default nonTextTags configuration that includes noscript can end its discard region early when htmlparser2 emits an implied ancestor close inside noscript. Because scripting-enabled browsers treat noscript content as raw text while the parser does not model that mode, content intended to remain inert can survive sanitization and render; the issue does not generalize to every default nonTextTags element. This issue is fixed in sanitize-html 2.18.0.&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;ApostropheCMS is an open-source Node.js content management system, and sanitize-html provides a simple HTML sanitizer with a clear API. Prior to sanitize-html 2.18.0, a non-default nonTextTags configuration that includes noscript can end its discard region early when htmlparser2 emits an implied ancestor close inside noscript. Because scripting-enabled browsers treat noscript content as raw text while the parser does not model that mode, content intended to remain inert can survive sanitization and render; the issue does not generalize to every default nonTextTags element. This issue is fixed in sanitize-html 2.18.0.&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://db.gcve.eu/vuln/fkie_cve-2026-113654</guid>
    </item>
    <item>
      <title>GHSA-x3q4-9hxx-gx8m — ApostropheCMS sanitize-html: nonTextTags discard region ends early on an implied close, letting &lt;noscript&gt; content rend…</title>
      <link>https://db.gcve.eu/vuln/ghsa-x3q4-9hxx-gx8m</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; npm: sanitize-html&lt;/p&gt;
&lt;p&gt;## Summary&lt;/p&gt;
&lt;p&gt;`sanitize-html` discards the *content* of every element in `nonTextTags`. It delimits that region
using htmlparser2&amp;#39;s close events, and ignores the `isImplied` flag htmlparser2 passes it. Closing a
still-open **ancestor** from inside a `&amp;lt;noscript&amp;gt;` makes htmlparser2 unwind its stack past the
`noscript`; the synthetic implied close it emits on the way ends the discard region early, and
everything after it is treated as ordinary body content.&lt;/p&gt;
&lt;p&gt;A browser with scripting enabled parses `&amp;lt;noscript&amp;gt;` content as **raw text**, so the same markup
renders as inert text there. The sanitizer therefore emits elements the page itself would not have.&lt;/p&gt;
&lt;p&gt;## Reproduction&lt;/p&gt;
&lt;p&gt;```js
const sanitizeHtml = require(&amp;#34;sanitize-html&amp;#34;);&lt;/p&gt;
&lt;p&gt;sanitizeHtml(&amp;#39;&amp;lt;div&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;img src=&amp;#34;http://evil.test/t.gif&amp;#34;&amp;gt;&amp;lt;/noscript&amp;gt;&amp;#39;, {
  allowedTags: [&amp;#34;div&amp;#34;, &amp;#34;img&amp;#34;],
  allowedAttributes: { img: [&amp;#34;src&amp;#34;] },
  nonTextTags: [&amp;#34;script&amp;#34;, &amp;#34;style&amp;#34;, &amp;#34;textarea&amp;#34;, &amp;#34;option&amp;#34;, &amp;#34;noscript&amp;#34;],
});
// =&amp;gt; &amp;#39;&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;img src=&amp;#34;http://evil.test/t.gif&amp;#34; /&amp;gt;&amp;#39;
```&lt;/p&gt;
&lt;p&gt;Chrome, given the same input, renders **no** `&amp;lt;img&amp;gt;` — the whole payload is raw text inside the
unclosed `&amp;lt;noscript&amp;gt;`. Verified with Playwright, `srcdoc` into an iframe so the scripting flag is on.&lt;/p&gt;
&lt;p&gt;A `&amp;lt;![CDATA[` variant hides the opening tag from the parser entirely and has the same effect:&lt;/p&gt;
&lt;p&gt;```
&amp;lt;p&amp;gt;Hi&amp;lt;/p&amp;gt;&amp;lt;![CDATA[ x &amp;gt; &amp;lt;noscript&amp;gt;]]&amp;gt;&amp;lt;a href=&amp;#34;…&amp;#34;&amp;gt;Reset your password&amp;lt;/a&amp;gt;&amp;lt;img src=&amp;#34;…beacon.gif&amp;#34;&amp;gt;&amp;lt;/noscript&amp;gt;
```&lt;/p&gt;
&lt;p&gt;htmlparser2 runs a CDATA token to `]]&amp;gt;`; Chrome ends a bogus comment at t…&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; npm: sanitize-html&lt;/p&gt;
&lt;p&gt;## Summary&lt;/p&gt;
&lt;p&gt;`sanitize-html` discards the *content* of every element in `nonTextTags`. It delimits that region
using htmlparser2&amp;#39;s close events, and ignores the `isImplied` flag htmlparser2 passes it. Closing a
still-open **ancestor** from inside a `&amp;lt;noscript&amp;gt;` makes htmlparser2 unwind its stack past the
`noscript`; the synthetic implied close it emits on the way ends the discard region early, and
everything after it is treated as ordinary body content.&lt;/p&gt;
&lt;p&gt;A browser with scripting enabled parses `&amp;lt;noscript&amp;gt;` content as **raw text**, so the same markup
renders as inert text there. The sanitizer therefore emits elements the page itself would not have.&lt;/p&gt;
&lt;p&gt;## Reproduction&lt;/p&gt;
&lt;p&gt;```js
const sanitizeHtml = require(&amp;#34;sanitize-html&amp;#34;);&lt;/p&gt;
&lt;p&gt;sanitizeHtml(&amp;#39;&amp;lt;div&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;img src=&amp;#34;http://evil.test/t.gif&amp;#34;&amp;gt;&amp;lt;/noscript&amp;gt;&amp;#39;, {
  allowedTags: [&amp;#34;div&amp;#34;, &amp;#34;img&amp;#34;],
  allowedAttributes: { img: [&amp;#34;src&amp;#34;] },
  nonTextTags: [&amp;#34;script&amp;#34;, &amp;#34;style&amp;#34;, &amp;#34;textarea&amp;#34;, &amp;#34;option&amp;#34;, &amp;#34;noscript&amp;#34;],
});
// =&amp;gt; &amp;#39;&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;img src=&amp;#34;http://evil.test/t.gif&amp;#34; /&amp;gt;&amp;#39;
```&lt;/p&gt;
&lt;p&gt;Chrome, given the same input, renders **no** `&amp;lt;img&amp;gt;` — the whole payload is raw text inside the
unclosed `&amp;lt;noscript&amp;gt;`. Verified with Playwright, `srcdoc` into an iframe so the scripting flag is on.&lt;/p&gt;
&lt;p&gt;A `&amp;lt;![CDATA[` variant hides the opening tag from the parser entirely and has the same effect:&lt;/p&gt;
&lt;p&gt;```
&amp;lt;p&amp;gt;Hi&amp;lt;/p&amp;gt;&amp;lt;![CDATA[ x &amp;gt; &amp;lt;noscript&amp;gt;]]&amp;gt;&amp;lt;a href=&amp;#34;…&amp;#34;&amp;gt;Reset your password&amp;lt;/a&amp;gt;&amp;lt;img src=&amp;#34;…beacon.gif&amp;#34;&amp;gt;&amp;lt;/noscript&amp;gt;
```&lt;/p&gt;
&lt;p&gt;htmlparser2 runs a CDATA token to `]]&amp;gt;`; Chrome ends a bogus comment at t…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://db.gcve.eu/vuln/ghsa-x3q4-9hxx-gx8m</guid>
    </item>
  </channel>
</rss>
