<?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://cve.radiocsirt.org</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, 08 Oct 2026 05:24:21 +0000</lastBuildDate>
    <item>
      <title>EUVD-2026-275986</title>
      <link>https://cve.radiocsirt.org/vuln/euvd-2026-275986</link>
      <description>EUVD-2026-275986</description>
      <guid isPermaLink="false">https://cve.radiocsirt.org/vuln/euvd-2026-275986</guid>
    </item>
    <item>
      <title>fkie_cve-2026-31860</title>
      <link>https://cve.radiocsirt.org/vuln/fkie_cve-2026-31860</link>
      <description>&lt;p&gt;Unhead is a document head and template manager. Prior to 2.1.11, useHeadSafe() can be bypassed to inject arbitrary HTML attributes, including event handlers, into SSR-rendered &amp;lt;head&amp;gt; tags. This is the composable that Nuxt docs recommend for safely handling user-generated content. The acceptDataAttrs function (safe.ts, line 16-20) allows any property key starting with data- through to the final HTML. It only checks the prefix, not whether the key contains spaces or other characters that break HTML attribute parsing. This vulnerability is fixed in 2.1.11.&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;Unhead is a document head and template manager. Prior to 2.1.11, useHeadSafe() can be bypassed to inject arbitrary HTML attributes, including event handlers, into SSR-rendered &amp;lt;head&amp;gt; tags. This is the composable that Nuxt docs recommend for safely handling user-generated content. The acceptDataAttrs function (safe.ts, line 16-20) allows any property key starting with data- through to the final HTML. It only checks the prefix, not whether the key contains spaces or other characters that break HTML attribute parsing. This vulnerability is fixed in 2.1.11.&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://cve.radiocsirt.org/vuln/fkie_cve-2026-31860</guid>
    </item>
    <item>
      <title>GHSA-g5xx-pwrp-g3fv — Unhead has XSS bypass in `useHeadSafe` via attribute name injection and case-sensitive protocol check</title>
      <link>https://cve.radiocsirt.org/vuln/ghsa-g5xx-pwrp-g3fv</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; npm: unhead&lt;/p&gt;
&lt;p&gt;## Summary&lt;/p&gt;
&lt;p&gt;`useHeadSafe()` can be bypassed to inject arbitrary HTML attributes, including event handlers, into SSR-rendered `&amp;lt;head&amp;gt;` tags. This is the composable that Nuxt docs recommend for safely handling user-generated content.&lt;/p&gt;
&lt;p&gt;## Details&lt;/p&gt;
&lt;p&gt;**XSS via `data-*` attribute name injection**&lt;/p&gt;
&lt;p&gt;The `acceptDataAttrs` function (safe.ts, line 16-20) allows any property key starting with `data-` through to the final HTML. It only checks the prefix, not whether the key contains spaces or other characters that break HTML attribute parsing.&lt;/p&gt;
&lt;p&gt;```typescript
function acceptDataAttrs(value: Record&amp;lt;string, string&amp;gt;) {
  return Object.fromEntries(
    Object.entries(value || {}).filter(([key]) =&amp;gt; key === &amp;#39;id&amp;#39; || key.startsWith(&amp;#39;data-&amp;#39;)),
  )
}
```&lt;/p&gt;
&lt;p&gt;This result gets merged into every tag&amp;#39;s props at line 114:&lt;/p&gt;
&lt;p&gt;```typescript
tag.props = { ...acceptDataAttrs(prev), ...next }
```&lt;/p&gt;
&lt;p&gt;Then `propsToString` (propsToString.ts, line 26) interpolates property keys directly into the HTML string with no sanitization:&lt;/p&gt;
&lt;p&gt;```typescript
attrs += value === true ? ` ${key}` : ` ${key}=&amp;#34;${encodeAttribute(value)}&amp;#34;`
```&lt;/p&gt;
&lt;p&gt;A space in the key breaks out of the attribute name. Everything after the space becomes separate HTML attributes.&lt;/p&gt;
&lt;p&gt;### PoC&lt;/p&gt;
&lt;p&gt;The most practical vector uses a `link` tag. `&amp;lt;link rel=&amp;#34;stylesheet&amp;#34;&amp;gt;` fires `onload` once the stylesheet loads, giving reliable script execution:&lt;/p&gt;
&lt;p&gt;```javascript
useHeadSafe({
  link: [{
    rel: &amp;#39;stylesheet&amp;#39;,
    href: &amp;#39;/valid-stylesheet.css&amp;#39;,
    &amp;#39;data-x onload=alert(document.d…&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; npm: unhead&lt;/p&gt;
&lt;p&gt;## Summary&lt;/p&gt;
&lt;p&gt;`useHeadSafe()` can be bypassed to inject arbitrary HTML attributes, including event handlers, into SSR-rendered `&amp;lt;head&amp;gt;` tags. This is the composable that Nuxt docs recommend for safely handling user-generated content.&lt;/p&gt;
&lt;p&gt;## Details&lt;/p&gt;
&lt;p&gt;**XSS via `data-*` attribute name injection**&lt;/p&gt;
&lt;p&gt;The `acceptDataAttrs` function (safe.ts, line 16-20) allows any property key starting with `data-` through to the final HTML. It only checks the prefix, not whether the key contains spaces or other characters that break HTML attribute parsing.&lt;/p&gt;
&lt;p&gt;```typescript
function acceptDataAttrs(value: Record&amp;lt;string, string&amp;gt;) {
  return Object.fromEntries(
    Object.entries(value || {}).filter(([key]) =&amp;gt; key === &amp;#39;id&amp;#39; || key.startsWith(&amp;#39;data-&amp;#39;)),
  )
}
```&lt;/p&gt;
&lt;p&gt;This result gets merged into every tag&amp;#39;s props at line 114:&lt;/p&gt;
&lt;p&gt;```typescript
tag.props = { ...acceptDataAttrs(prev), ...next }
```&lt;/p&gt;
&lt;p&gt;Then `propsToString` (propsToString.ts, line 26) interpolates property keys directly into the HTML string with no sanitization:&lt;/p&gt;
&lt;p&gt;```typescript
attrs += value === true ? ` ${key}` : ` ${key}=&amp;#34;${encodeAttribute(value)}&amp;#34;`
```&lt;/p&gt;
&lt;p&gt;A space in the key breaks out of the attribute name. Everything after the space becomes separate HTML attributes.&lt;/p&gt;
&lt;p&gt;### PoC&lt;/p&gt;
&lt;p&gt;The most practical vector uses a `link` tag. `&amp;lt;link rel=&amp;#34;stylesheet&amp;#34;&amp;gt;` fires `onload` once the stylesheet loads, giving reliable script execution:&lt;/p&gt;
&lt;p&gt;```javascript
useHeadSafe({
  link: [{
    rel: &amp;#39;stylesheet&amp;#39;,
    href: &amp;#39;/valid-stylesheet.css&amp;#39;,
    &amp;#39;data-x onload=alert(document.d…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://cve.radiocsirt.org/vuln/ghsa-g5xx-pwrp-g3fv</guid>
    </item>
  </channel>
</rss>
