GitHub Advisoryadvisory · Go

GHSA-vw86-c94w-v3x4 SiYuan: Publish Reader Path Traversal Delete via `removeUnusedAttributeView`

HIGH Published 2026-04-10 Modified 2026-04-24 Official page ↗
Aliases
CVE-2026-40318
Ecosystem
Go
Packages
github.com/siyuan-note/siyuan/kernel
Severity
High
CVSS vector
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:N/I:L/A:H
Weaknesses
CWE-24
Reviewed
2026-04-10

Affected packages

• Go github.com/siyuan-note/siyuan/kernel: < 3.6.40.0.0-20260407035653-2f416e5253f1 → fixed in 3.6.40.0.0-20260407035653-2f416e5253f1

Description

Summary The endpoint `/api/av/removeUnusedAttributeView` is vulnerable to a path traversal (CWE-22) that allows an attacker to delete arbitrary `.json` files on the server. The issue arises because user-controlled input (`id`) is directly used in filesystem path construction without validation or restriction. > Access to this endpoint (e.g., via a Reader-role or publish context) is considered a precondition and not part of the vulnerability. The root cause is unsafe path handling. --- Steps To Reproduce 1. Ensure the target instance has the publish service enabled (or any valid access to the endpoint). 2. Send the following request: ```http POST /api/av/removeUnusedAttributeView HTTP/1.1 Host: Content-Type: application/json { "id": "../../../conf/conf" } ``` 3. Observe that the request is accepted. 4. The server resolves the path outside the intended directory and deletes the target file. --- Impact An attacker can delete arbitrary `.json` files within the workspace directory. This may lead to: • Deletion of global configuration files (e.g., `conf/conf.json`) • Loss of user data and application state • Corruption of workspace metadata • Persistent application instability or forced recovery This represents a server-side arbitrary file deletion primitive, which can have severe impact depending on the targeted files. --- Technical Details The vulnerable code constructs file paths as follows: ```go filepath.Join(util.DataDir, "storage", "av", id+".json") ``` Because `id` is not validated, attackers can inject path traversal sequences such as `../` to escape the intended directory. Example payloads • `../local` → `data/storage/local.json` • `../../storage/outline` → `data/storage/outline.json` • `../../../conf/conf` → `conf/conf.json` No validation or restriction is applied to: • input format • path normalization • directory boundaries --- Root Cause • Untrusted user input (`id`) is directly used in filesystem path construction • No input validation or sanitization • No enforcement that the resolved path stays within the intended directory --- Remediation 1. Validate input strictly • Only allow valid Attribute View IDs • Reject any input containing path traversal sequences 2. Enforce directory boundaries ```go base := filepath.Join(util.DataDir, "storage", "av") absPath := filepath.Join(base, id+".json") if !util.IsSubPath(base, absPath) { return error } ``` 3. Normalize paths before use • Ensure canonical paths cannot escape the base directory 4. Add additional logical checks • Verify that the target object is valid and allowed to be deleted ---

Related

Alias · CVE (1)

  • CVE-2026-40318 SiYuan is an open-source personal knowledge management system. vulnerability

Weakness · CWE (1)

  • CWE-24 Path Traversal: '../filedir' weakness

References