<?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>Fri, 02 Oct 2026 15:01:04 +0000</lastBuildDate>
    <item>
      <title>fkie_cve-2026-44670</title>
      <link>https://db.gcve.eu/vuln/fkie_cve-2026-44670</link>
      <description>&lt;p&gt;SiYuan is an open-source personal knowledge management system. Prior to 3.7.0, the kernel stores Attribute View (AV / database) names without any HTML escape, then a render template uses raw strings.ReplaceAll(tpl, &amp;#34;${avName}&amp;#34;, nodeAvName) to embed the name in HTML before pushing to all clients via WebSocket. Three independent client paths (render.ts:120 → outerHTML, Title.ts:401 → innerHTML, transaction.ts:559 → innerHTML) consume the value without escaping. Because the main BrowserWindow runs nodeIntegration:true, contextIsolation:false, webSecurity:false (app/electron/main.js:407-411), HTML injection in the renderer becomes Node.js code execution. This vulnerability is fixed in 3.7.0.&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;SiYuan is an open-source personal knowledge management system. Prior to 3.7.0, the kernel stores Attribute View (AV / database) names without any HTML escape, then a render template uses raw strings.ReplaceAll(tpl, &amp;#34;${avName}&amp;#34;, nodeAvName) to embed the name in HTML before pushing to all clients via WebSocket. Three independent client paths (render.ts:120 → outerHTML, Title.ts:401 → innerHTML, transaction.ts:559 → innerHTML) consume the value without escaping. Because the main BrowserWindow runs nodeIntegration:true, contextIsolation:false, webSecurity:false (app/electron/main.js:407-411), HTML injection in the renderer becomes Node.js code execution. This vulnerability is fixed in 3.7.0.&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://db.gcve.eu/vuln/fkie_cve-2026-44670</guid>
    </item>
    <item>
      <title>GHSA-2h64-c999-c9r6 — SiYuan Affected by Stored XSS via Attribute View Name to Electron Renderer RCE</title>
      <link>https://db.gcve.eu/vuln/ghsa-2h64-c999-c9r6</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; Go: github.com/siyuan-note/siyuan/kernel&lt;/p&gt;
&lt;p&gt;## Summary&lt;/p&gt;
&lt;p&gt;The kernel stores Attribute View (AV / database) names without any HTML escape, then a render template uses raw `strings.ReplaceAll(tpl, &amp;#34;${avName}&amp;#34;, nodeAvName)` to embed the name in HTML before pushing to all clients via WebSocket. Three independent client paths (`render.ts:120` → `outerHTML`, `Title.ts:401` → `innerHTML`, `transaction.ts:559` → `innerHTML`) consume the value without escaping. Because the main BrowserWindow runs `nodeIntegration:true, contextIsolation:false, webSecurity:false` (`app/electron/main.js:407-411`), HTML injection in the renderer becomes Node.js code execution.&lt;/p&gt;
&lt;p&gt;Payload is stored on disk under `data/storage/av/&amp;lt;id&amp;gt;.json`, replicates via every sync transport (S3 / WebDAV / cloud), survives `.sy.zip` export-import, and triggers for any role (Administrator / Editor / Reader / publish-service Visitor) opening a doc bound to the AV.&lt;/p&gt;
&lt;p&gt;## Details&lt;/p&gt;
&lt;p&gt;**Kernel write — no escape.** `kernel/model/attribute_view.go:3244-3255`:
```go
attrView.Name = strings.TrimSpace(operation.Data.(string))
attrView.Name = strings.ReplaceAll(attrView.Name, &amp;#34;\n&amp;#34;, &amp;#34; &amp;#34;)
if 512 &amp;lt; utf8.RuneCountInString(attrView.Name) {
    attrView.Name = gulu.Str.SubStr(attrView.Name, 512)
}
err = av.SaveAttributeView(attrView)         // ← no html.EscapeString
```&lt;/p&gt;
&lt;p&gt;**Kernel template — raw replace.** `kernel/model/attribute_view.go:3242,3283-3284`:
```go
const attrAvNameTpl = `&amp;lt;span data-av-id=&amp;#34;${avID}&amp;#34; ... class=&amp;#34;popover__block&amp;#34;&amp;gt;${avName}&amp;lt;/span&amp;gt;`
// ...
tpl := strings.ReplaceAll(att…&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; Go: github.com/siyuan-note/siyuan/kernel&lt;/p&gt;
&lt;p&gt;## Summary&lt;/p&gt;
&lt;p&gt;The kernel stores Attribute View (AV / database) names without any HTML escape, then a render template uses raw `strings.ReplaceAll(tpl, &amp;#34;${avName}&amp;#34;, nodeAvName)` to embed the name in HTML before pushing to all clients via WebSocket. Three independent client paths (`render.ts:120` → `outerHTML`, `Title.ts:401` → `innerHTML`, `transaction.ts:559` → `innerHTML`) consume the value without escaping. Because the main BrowserWindow runs `nodeIntegration:true, contextIsolation:false, webSecurity:false` (`app/electron/main.js:407-411`), HTML injection in the renderer becomes Node.js code execution.&lt;/p&gt;
&lt;p&gt;Payload is stored on disk under `data/storage/av/&amp;lt;id&amp;gt;.json`, replicates via every sync transport (S3 / WebDAV / cloud), survives `.sy.zip` export-import, and triggers for any role (Administrator / Editor / Reader / publish-service Visitor) opening a doc bound to the AV.&lt;/p&gt;
&lt;p&gt;## Details&lt;/p&gt;
&lt;p&gt;**Kernel write — no escape.** `kernel/model/attribute_view.go:3244-3255`:
```go
attrView.Name = strings.TrimSpace(operation.Data.(string))
attrView.Name = strings.ReplaceAll(attrView.Name, &amp;#34;\n&amp;#34;, &amp;#34; &amp;#34;)
if 512 &amp;lt; utf8.RuneCountInString(attrView.Name) {
    attrView.Name = gulu.Str.SubStr(attrView.Name, 512)
}
err = av.SaveAttributeView(attrView)         // ← no html.EscapeString
```&lt;/p&gt;
&lt;p&gt;**Kernel template — raw replace.** `kernel/model/attribute_view.go:3242,3283-3284`:
```go
const attrAvNameTpl = `&amp;lt;span data-av-id=&amp;#34;${avID}&amp;#34; ... class=&amp;#34;popover__block&amp;#34;&amp;gt;${avName}&amp;lt;/span&amp;gt;`
// ...
tpl := strings.ReplaceAll(att…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://db.gcve.eu/vuln/ghsa-2h64-c999-c9r6</guid>
    </item>
  </channel>
</rss>
