{"schemaVersion":3,"id":"CVE-2026-23851","aliases":["GHSA-94c7-g2fj-7682","GO-2026-4346"],"status":"published","duplicateOf":null,"title":null,"description":"SiYuan is a personal knowledge management system. Versions prior to 3.5.4 contain a logic vulnerability in the /api/file/globalCopyFiles endpoint. The function allows authenticated users to copy files from any location on the server's filesystem into the application's workspace without proper path validation. The vulnerability exists in the api/file.go source code. The function globalCopyFiles accepts a list of source paths (srcs) from the JSON request body. While the code checks if the source file exists using filelock.IsExist(src), it fails to validate whether the source path resides within the authorized workspace directory. Version 3.5.4 patches the issue.","dates":{"published":"2026-01-19T19:57:29.460Z","modified":"2026-01-20T20:05:11.018Z","reserved":null,"kevAdded":[],"kevDue":[]},"cvss":{"headline":{"score":8.3,"severity":"high","version":"4.0","versionLabel":"v4.0","source":"CVE.org","vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:N/VA:N/SC:H/SI:N/SA:N","computed":false,"selection":"backend-summary"},"metrics":[{"version":"4.0","versionLabel":"v4.0","source":"CVE.org","score":8.3,"severity":"high","vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:N/VA:N/SC:H/SI:N/SA:N","exploitability":null,"impact":null,"computed":false},{"version":"4.0","versionLabel":"v4.0","source":"OSV · Go","score":8.3,"severity":"high","vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:N/VA:N/SC:H/SI:N/SA:N","exploitability":null,"impact":null,"computed":true},{"version":"4.0","versionLabel":"v4.0","source":"NVD","score":8.3,"severity":"high","vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:N/VA:N/SC:H/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X","exploitability":null,"impact":null,"computed":false},{"version":"3.1","versionLabel":"v3.1","source":"NVD","score":6.5,"severity":"medium","vector":"CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N","exploitability":null,"impact":null,"computed":false}]},"epss":{"probability":0.00518,"percentile":0.43115,"severity":"low","asOf":"2026-10-21T00:00:00.000Z","change":{"pp":0.011999999999999945,"baselineDate":"2026-09-21T00:00:00.000Z","baselineScore":0.00506},"history":[{"date":"2026-09-14T00:00:00.000Z","score":0.00463,"percentile":null},{"date":"2026-09-15T00:00:00.000Z","score":0.00463,"percentile":null},{"date":"2026-09-16T00:00:00.000Z","score":0.00506,"percentile":null},{"date":"2026-09-17T00:00:00.000Z","score":0.00506,"percentile":null},{"date":"2026-09-18T00:00:00.000Z","score":0.00506,"percentile":null},{"date":"2026-09-19T00:00:00.000Z","score":0.00506,"percentile":null},{"date":"2026-09-20T00:00:00.000Z","score":0.00506,"percentile":null},{"date":"2026-09-21T00:00:00.000Z","score":0.00506,"percentile":null},{"date":"2026-09-22T00:00:00.000Z","score":0.00506,"percentile":null},{"date":"2026-09-23T00:00:00.000Z","score":0.00506,"percentile":null},{"date":"2026-09-24T00:00:00.000Z","score":0.00506,"percentile":null},{"date":"2026-09-25T00:00:00.000Z","score":0.00506,"percentile":null},{"date":"2026-09-26T00:00:00.000Z","score":0.00506,"percentile":null},{"date":"2026-09-27T00:00:00.000Z","score":0.00506,"percentile":null},{"date":"2026-09-28T00:00:00.000Z","score":0.00506,"percentile":null},{"date":"2026-09-29T00:00:00.000Z","score":0.00506,"percentile":null},{"date":"2026-09-30T00:00:00.000Z","score":0.00506,"percentile":null},{"date":"2026-10-01T00:00:00.000Z","score":0.00506,"percentile":null},{"date":"2026-10-02T00:00:00.000Z","score":0.00506,"percentile":null},{"date":"2026-10-03T00:00:00.000Z","score":0.00506,"percentile":null},{"date":"2026-10-04T00:00:00.000Z","score":0.00506,"percentile":null},{"date":"2026-10-05T00:00:00.000Z","score":0.00506,"percentile":null},{"date":"2026-10-06T00:00:00.000Z","score":0.00506,"percentile":null},{"date":"2026-10-07T00:00:00.000Z","score":0.00506,"percentile":null},{"date":"2026-10-08T00:00:00.000Z","score":0.00506,"percentile":null},{"date":"2026-10-09T00:00:00.000Z","score":0.00506,"percentile":null},{"date":"2026-10-10T00:00:00.000Z","score":0.00506,"percentile":null},{"date":"2026-10-11T00:00:00.000Z","score":0.00506,"percentile":null},{"date":"2026-10-12T00:00:00.000Z","score":0.00506,"percentile":null},{"date":"2026-10-13T00:00:00.000Z","score":0.00506,"percentile":null},{"date":"2026-10-14T00:00:00.000Z","score":0.00506,"percentile":null},{"date":"2026-10-15T00:00:00.000Z","score":0.00518,"percentile":null},{"date":"2026-10-16T00:00:00.000Z","score":0.00518,"percentile":null},{"date":"2026-10-17T00:00:00.000Z","score":0.00518,"percentile":null},{"date":"2026-10-18T00:00:00.000Z","score":0.00518,"percentile":null},{"date":"2026-10-19T00:00:00.000Z","score":0.00518,"percentile":null},{"date":"2026-10-20T00:00:00.000Z","score":0.00518,"percentile":null},{"date":"2026-10-21T00:00:00.000Z","score":0.00518,"percentile":0.43115}],"last30":[{"date":"2026-09-21T00:00:00.000Z","score":0.00506,"percentile":null},{"date":"2026-09-22T00:00:00.000Z","score":0.00506,"percentile":null},{"date":"2026-09-23T00:00:00.000Z","score":0.00506,"percentile":null},{"date":"2026-09-24T00:00:00.000Z","score":0.00506,"percentile":null},{"date":"2026-09-25T00:00:00.000Z","score":0.00506,"percentile":null},{"date":"2026-09-26T00:00:00.000Z","score":0.00506,"percentile":null},{"date":"2026-09-27T00:00:00.000Z","score":0.00506,"percentile":null},{"date":"2026-09-28T00:00:00.000Z","score":0.00506,"percentile":null},{"date":"2026-09-29T00:00:00.000Z","score":0.00506,"percentile":null},{"date":"2026-09-30T00:00:00.000Z","score":0.00506,"percentile":null},{"date":"2026-10-01T00:00:00.000Z","score":0.00506,"percentile":null},{"date":"2026-10-02T00:00:00.000Z","score":0.00506,"percentile":null},{"date":"2026-10-03T00:00:00.000Z","score":0.00506,"percentile":null},{"date":"2026-10-04T00:00:00.000Z","score":0.00506,"percentile":null},{"date":"2026-10-05T00:00:00.000Z","score":0.00506,"percentile":null},{"date":"2026-10-06T00:00:00.000Z","score":0.00506,"percentile":null},{"date":"2026-10-07T00:00:00.000Z","score":0.00506,"percentile":null},{"date":"2026-10-08T00:00:00.000Z","score":0.00506,"percentile":null},{"date":"2026-10-09T00:00:00.000Z","score":0.00506,"percentile":null},{"date":"2026-10-10T00:00:00.000Z","score":0.00506,"percentile":null},{"date":"2026-10-11T00:00:00.000Z","score":0.00506,"percentile":null},{"date":"2026-10-12T00:00:00.000Z","score":0.00506,"percentile":null},{"date":"2026-10-13T00:00:00.000Z","score":0.00506,"percentile":null},{"date":"2026-10-14T00:00:00.000Z","score":0.00506,"percentile":null},{"date":"2026-10-15T00:00:00.000Z","score":0.00518,"percentile":null},{"date":"2026-10-16T00:00:00.000Z","score":0.00518,"percentile":null},{"date":"2026-10-17T00:00:00.000Z","score":0.00518,"percentile":null},{"date":"2026-10-18T00:00:00.000Z","score":0.00518,"percentile":null},{"date":"2026-10-19T00:00:00.000Z","score":0.00518,"percentile":null},{"date":"2026-10-20T00:00:00.000Z","score":0.00518,"percentile":null},{"date":"2026-10-21T00:00:00.000Z","score":0.00518,"percentile":0.43115}]},"kev":{"state":"not-listed","entries":[],"listedCount":0,"totalCatalogs":3,"catalogs":[{"source":"cisa","label":"CISA","listed":false,"entry":null},{"source":"enisa","label":"ENISA","listed":false,"entry":null},{"source":"circl","label":"CIRCL","listed":false,"entry":null}]},"ransomware":{"state":"none-recorded","sources":[]},"exploits":[{"id":"GITHUB_SIYUAN-NOTE_SIYUAN","name":"Siyuan","source":"github","url":"https://github.com/siyuan-note/siyuan/issues/11949","maturity":"poc","reliabilityScore":0.3,"verified":false,"type":null,"platforms":[],"requiresAuth":null,"exploitdb":null,"metasploit":null}],"exploitCount":1,"weaknesses":[{"id":"CWE-22","name":"Improper Limitation of a Pathname to a Restricted Directory ('Path Traversal')","description":"The product uses external input to construct a pathname that is intended to identify a file or directory that is located underneath a restricted parent directory, but the product does not properly neutralize special elements within the pathname that can cause the pathname to resolve to a location that is outside of the restricted directory.","type":"weakness","status":"Stable","abstraction":"Base","likelihoodOfExploit":"High","url":"https://cwe.mitre.org/data/definitions/22.html"}],"affected":[{"vendor":"b3log","product":"siyuan","name":"siyuan","label":"siyuan","ecosystem":null,"cpePart":"a","purl":null,"purlType":null,"versions":[{"text":"< 3.5.4","noFixRecorded":false,"fixedIn":null}],"versionsText":"< 3.5.4","eol":null,"hubHref":"/vendor/b3log/siyuan"},{"vendor":"github.com/siyuan-note/siyuan","product":"kernel","name":"github.com/siyuan-note/siyuan/kernel","label":"kernel","ecosystem":"Go","cpePart":null,"purl":"pkg:golang/github.com/siyuan-note/siyuan/kernel","purlType":"golang","versions":[{"text":"< 0.0.0-20260118092521-f8f4b517077b","noFixRecorded":false,"fixedIn":null}],"versionsText":"< 0.0.0-20260118092521-f8f4b517077b","eol":null,"hubHref":null},{"vendor":"siyuan-note","product":"siyuan","name":"siyuan","label":"siyuan","ecosystem":null,"cpePart":"a","purl":null,"purlType":null,"versions":[{"text":"< 3.5.4","noFixRecorded":false,"fixedIn":null}],"versionsText":"< 3.5.4","eol":null,"hubHref":"/vendor/siyuan-note/siyuan"}],"affectedCount":3,"eol":{"hasEol":false,"count":0},"references":[{"url":"https://github.com/siyuan-note/siyuan/security/advisories/GHSA-94c7-g2fj-7682","label":"github.com/siyuan-note/siyuan/security/advisories/GHSA-94c7-g2fj-7682","hostname":"github.com","tags":["X Refsource CONFIRM","WEB","Advisory","Exploit","Patch","Vendor Advisory"]},{"url":"https://github.com/siyuan-note/siyuan/issues/16860","label":"github.com/siyuan-note/siyuan/issues/16860","hostname":"github.com","tags":["X Refsource MISC","WEB","Issue Tracking","Patch"]},{"url":"https://github.com/siyuan-note/siyuan/commit/b2274baba2e11c8cf8901b0c5c871e5b27f1f6dd","label":"github.com/siyuan-note/siyuan/commit/b2274baba2e11c8cf8901b0c5c871e5b27f1f6dd","hostname":"github.com","tags":["X Refsource MISC","WEB","Patch"]},{"url":"https://github.com/siyuan-note/siyuan/commit/f8f4b517077b92c90c0d7b51ac11be1b34b273ad","label":"github.com/siyuan-note/siyuan/commit/f8f4b517077b92c90c0d7b51ac11be1b34b273ad","hostname":"github.com","tags":["X Refsource MISC","WEB","Patch"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-23851","label":"nvd.nist.gov/vuln/detail/CVE-2026-23851","hostname":"nvd.nist.gov","tags":["Advisory"]},{"url":"https://github.com/siyuan-note/siyuan","label":"github.com/siyuan-note/siyuan","hostname":"github.com","tags":["PACKAGE"]}],"lineage":{"upstream":[],"downstream":["OPENSUSE-SU-2026:21483-1","SUSE-SU-2026:0403-1"],"duplicates":[],"related":["OPENSUSE-SU-2026:21483-1","SUSE-SU-2026:0403-1"]},"timeline":[{"kind":"published","date":"2026-01-19T19:57:29.460Z","label":"Published","detail":"Vulnerability first disclosed.","source":null},{"kind":"modified","date":"2026-01-20T20:05:11.018Z","label":"Last modified","detail":"Vulnerability information updated.","source":null}],"risk":{"score":43,"level":"medium","profile":"Default","thresholds":{"critical":75,"high":50,"medium":25,"low":10}},"meta":{"dataAsOf":"2026-10-21T22:06:54.202Z","stale":false,"partial":false}}