MCPNews

The Model Context Protocol ecosystem, verified

Current spec 2026-07-28

CVE record published for path traversal in SiYuan's database_clean MCP tool, a hardening gap the HTTP API had already closed

CVE-2026-74798 was published on 2026-08-17 by VulnCheck, covering a path traversal in the database_clean MCP tool of SiYuan, a note-taking application. The tool checked only that its id parameter was non-empty before joining it into a filesystem path, so an authenticated MCP client could copy an arbitrary readable file into SiYuan's history directory and then delete the original. The advisory notes the equivalent HTTP API handler had been hardened earlier and the MCP caller was missed.

VulnCheck published CVE-2026-74798 on 2026-08-17, covering a path traversal in the MCP tool surface of SiYuan, a self-hosted note-taking application. The database_clean tool checked only that its id parameter was not an empty string, then passed it to RemoveUnusedAttributeView in kernel/model/attribute_view.go, which builds a filesystem path with filepath.Join without checking that id matches SiYuan's node-ID format.

The consequence is two operations for the price of one traversal string. The routine copies the target file into SiYuan's history directory, which an authenticated MCP client can then read, and deletes the original. VulnCheck scores it 9.3 critical under CVSS 4.0 and 8.7 high under CVSS 3.1.

SiYuan's own advisory is direct about the shape of the gap. GHSA-43jx-gxq4-jpjc, published 2026-08-03, titles the issue as one "missed by the recent GHSA-7hm9-v7vf-7g4w fix", and the CVE record says the same: "The corresponding HTTP API handler was hardened in GHSA-7hm9-v7vf-7g4w, but this MCP caller was not." The same function had two callers, and only one of them was fixed.

Versions are the one place the record and the repository disagree. Both the CVE and the advisory name 3.7.4 as the patched version, and SiYuan never published a stable 3.7.4: its releases run v3.7.3 on 2026-07-21, then a 3.7.4 alpha line ending at v3.7.4-alpha.6 on 2026-08-02, then v3.8.0 on 2026-08-12. The guard is present in v3.8.0, where RemoveUnusedAttributeView returns early unless ast.IsNodeIDPattern matches the supplied id, with a comment stating the check is there to block traversal reads and deletions. Neither record identifies which published release users should move to.

How was this verified, and what are the sources?

Published · last verified · confidence 1.00.

  1. CVE-2026-74798 record at cveawg.mitre.org (assigner VulnCheck, published 2026-08-17T11:04Z) - "SiYuan kernel Path Traversal via database_clean MCP tool"; the tool performs only an empty-string check on id before passing it to RemoveUnusedAttributeView in kernel/model/attribute_view.go, which builds a path via filepath.Join without validating SiYuan's node-ID format, allowing arbitrary file read via the history copy and arbitrary file deletion; states "The corresponding HTTP API handler was hardened in GHSA-7hm9-v7vf-7g4w, but this MCP caller was not"; CVSS 4.0 9.3 critical and CVSS 3.1 8.7 high; affected before 3.7.4 - accessed
  2. SiYuan repository security advisory GHSA-43jx-gxq4-jpjc (published 2026-08-03, severity high) - "Path Traversal in MCP tool database_clean (RemoveUnusedAttributeView) leads to Arbitrary File Read (via history copy) and Arbitrary File Deletion, missed by the recent GHSA-7hm9-v7vf-7g4w fix"; Go package github.com/siyuan-note/siyuan/kernel, vulnerable 3.7.3, patched v3.7.4 - accessed
  3. SiYuan source at tag v3.8.0, kernel/model/attribute_view.go - RemoveUnusedAttributeView now returns early unless ast.IsNodeIDPattern(id) matches, with a comment stating the check exists to prevent path traversal reads and deletions - accessed
  4. SiYuan release tags - v3.7.3 published 2026-07-21 and v3.8.0 published 2026-08-12; the 3.7.4 line exists only as alpha tags, the newest being v3.7.4-alpha.6 on 2026-08-02 - accessed

← All news