<?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-08T10:21:49.247306+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-275986</id>
    <title>EUVD-2026-275986</title>
    <updated>2026-10-08T10:21:49.300132+00:00</updated>
    <content>EUVD-2026-275986</content>
    <link href="https://cve.radiocsirt.org/vuln/euvd-2026-275986"/>
  </entry>
  <entry>
    <id>https://cve.radiocsirt.org/vuln/fkie_cve-2026-31860</id>
    <title>fkie_cve-2026-31860</title>
    <updated>2026-10-08T10:21:49.300181+00:00</updated>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>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 &lt;head&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.</p>
      </div>
    </content>
    <link href="https://cve.radiocsirt.org/vuln/fkie_cve-2026-31860"/>
  </entry>
  <entry>
    <id>https://cve.radiocsirt.org/vuln/ghsa-g5xx-pwrp-g3fv</id>
    <title>GHSA-g5xx-pwrp-g3fv — Unhead has XSS bypass in `useHeadSafe` via attribute name injection and case-sensitive protocol check</title>
    <updated>2026-10-08T10:21:49.300230+00:00</updated>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml"><p><strong>Affected:</strong> npm: unhead</p>
<p>## Summary</p>
<p>`useHeadSafe()` can be bypassed to inject arbitrary HTML attributes, including event handlers, into SSR-rendered `&lt;head&gt;` tags. This is the composable that Nuxt docs recommend for safely handling user-generated content.</p>
<p>## Details</p>
<p>**XSS via `data-*` attribute name injection**</p>
<p>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.</p>
<p>```typescript
function acceptDataAttrs(value: Record&lt;string, string&gt;) {
  return Object.fromEntries(
    Object.entries(value || {}).filter(([key]) =&gt; key === 'id' || key.startsWith('data-')),
  )
}
```</p>
<p>This result gets merged into every tag's props at line 114:</p>
<p>```typescript
tag.props = { ...acceptDataAttrs(prev), ...next }
```</p>
<p>Then `propsToString` (propsToString.ts, line 26) interpolates property keys directly into the HTML string with no sanitization:</p>
<p>```typescript
attrs += value === true ? ` ${key}` : ` ${key}="${encodeAttribute(value)}"`
```</p>
<p>A space in the key breaks out of the attribute name. Everything after the space becomes separate HTML attributes.</p>
<p>### PoC</p>
<p>The most practical vector uses a `link` tag. `&lt;link rel="stylesheet"&gt;` fires `onload` once the stylesheet loads, giving reliable script execution:</p>
<p>```javascript
useHeadSafe({
  link: [{
    rel: 'stylesheet',
    href: '/valid-stylesheet.css',
    'data-x onload=alert(document.d…</p></div>
    </content>
    <link href="https://cve.radiocsirt.org/vuln/ghsa-g5xx-pwrp-g3fv"/>
  </entry>
</feed>
