# 思源笔记文件复制任意文件读取漏洞
## 概述
SiYuan 是一款个人知识管理系统,在 3.5.4 之前版本中,`/api/file/globalCopyFiles` 接口存在逻辑漏洞。
## 影响版本
3.5.4 之前的所有版本。
## 细节
漏洞位于 `api/file.go` 文件中的 `globalCopyFiles` 函数。该函数接收 JSON 请求体中的源文件路径列表(`srcs`),并在服务器上执行文件复制操作。虽然使用 `filelock.IsExist(src)` 检查文件是否存在,但未对源路径是否位于授权的工作区目录内进行校验,导致路径遍历或越权文件读取风险。
## 影响
经过身份验证的用户可利用此漏洞,将服务器文件系统任意位置的文件复制到应用的工作区中,可能导致敏感信息泄露或进一步的攻击。
是否为 Web 类漏洞: 未知
判断理由:
| # | POC 描述 | 源链接 | 神龙链接 |
|---|
标题: Arbitrary file reading vulnerability · Issue #16860 · siyuan-note/siyuan -- 🔗来源链接
标签:x_refsource_MISC
神龙速读:
## 关键信息
- **标题**:Arbitrary file reading vulnerability #16860
- **状态**:Closed
- **创建者**:88250
- **创建时间**:2天前
- **相关漏洞ID**:
- GHSA-cv54-7ww7-qxcw
- GHSA-94c7-q2fj-7682
- **标签**:
- Bug
- **里程碑**:
- 3.5.4
- **处理行动**:
- 添加了2个提交,修复了该漏洞
- 在2天前被标记为已完成并关闭
- **备注**:
- 提到的SSRF(服务器端请求伪造)在这个情况下不算作漏洞,因此不作处理
标题: Arbitrary File Read via File Copy Functionality · Advisory · siyuan-note/siyuan · GitHub -- 🔗来源链接
标签:x_refsource_CONFIRM
神龙速读:
## 关键漏洞信息
### 漏洞概述
- **标题**: 通过文件复制功能任意读取文件
- **CVE ID**: CVE-2026-23851
- **严重度**: Critical
### 影响版本
- **受影响版本**: v3.5.3
- **修复版本**: v3.5.4
### 漏洞详情
- **漏洞点**: SiYuan Note 应用 (v3.5.3) 在 `/api/file/globalCopyFiles` 接口存在逻辑漏洞。
- **问题描述**: 该函数允许经过验证的用户在未经正确路径验证的情况下,从服务器文件系统复制文件到应用程序的指定位置。
### 详细信息
- **源代码漏洞**:
`api/file.go` 中的 `globalCopyFiles` 函数接受 source paths 参数,源文件使用 `filelock.IsExist(src)` 检查存在性,但未验证路径是否在授权的工作目录内。
### 证明概念 (PoC)
- **步骤**: 使用 HTTP 请求复制系统文件 `/etc/passwd` 到应用根目录并下载。
#### 示例请求与响应
```json
// 请求示例
{
"srcs": ["/etc/passwd"],
"dstDir": "/"
}
// 响应示例
{
"code": 0,
"msg": "",
"data": null
}
```
### 影响
- **危害**: 攻击者可利用该漏洞读取任意文件,包括敏感配置及系统文件(如 `/etc/passwd`)。若攻击者滥用此漏洞,可能从应用权限提升到基础设施全系统暴露。
### 解决方案
- **升级版本**: 将当前版本 v3.5.3 升级到修复后的版本 v3.5.4。
标题: :lock: Arbitrary file reading vulnerability https://github.com/siyuan… · siyuan-note/siyuan@b2274ba · GitHub -- 🔗来源链接
标签:x_refsource_MISC
神龙速读:
```md
### 关键信息摘要
#### 漏洞描述
- **漏洞类型**: 任意文件读取漏洞
- **问题**: 代码中未对敏感文件或路径进行有效检查,可能导致攻击者读取任意文件。
#### 修复措施
1. **添加文件路径校验**:
- 引入 `util.IsSensitivePath` 函数,对敏感文件和路径进行检测。
- 检测的敏感文件和路径包括但不限于:
- `etc/passwd`, `etc/shadow`, `etc/gshadow`, `var/run/secrets`, `root`, `ssh`, `gnupg`, `env`, `netrc`, `aspnetcore-secrets`, `key`, `pem` 等。
2. **代码修改文件**:
- **`kernel/api/file.go`**: 修改 `globalCopyFiles` 函数,加入对 `absSrc` 文件路径的敏感性检查。
- **`kernel/model/assets.go`**: 修改 `netAssets2LocalAssets0` 函数,加入对`u`路径的敏感性检查。
- **`kernel/util/path.go`**: 新增 `IsSensitivePath` 函数,对各种敏感文件和路径做统一检测。
#### 代码修改要点
- 对 suspicious 路径进行清理和统一检测,增强对敏感文件访问的安全检查。
- 在发生敏感文件访问时记录日志并返回错误码,阻止进一步操作。
- 将检测扩展到多种扩展名的敏感文件中,如 `.env`, `.key`, `.pem` 等。
```
标题: :lock: Arbitrary file reading vulnerability https://github.com/siyuan… · siyuan-note/siyuan@f8f4b51 · GitHub -- 🔗来源链接
标签:x_refsource_MISC
神龙速读:
- 漏洞类型: 任意文件读取漏洞 (Arbitrary file reading vulnerability)
- 漏洞编号: #16860
- 提交者: 88250
- 提交时间: 2天前
- 修复内容: 在`kernel/util/path.go`文件的`IsSensitivePath`函数中添加了对`hosts`文件的检测
暂无评论