# Docmost 任意文件写入漏洞(ZipSlip)
## 概述
Docmost 在 0.21.0 到 0.24.0 之前的版本中,因导入功能缺乏文件名验证,存在任意文件写入漏洞(ZipSlip)。
## 影响版本
0.21.0 ≤ 版本 < 0.24.0
## 细节
在文件 `apps/server/src/integrations/import/utils/file.utils.ts` 中,处理 ZIP 导入时未对解压后的文件名进行安全校验,攻击者可利用路径遍历构造恶意文件路径,实现任意文件写入。
## 影响
攻击者可通过特制的 ZIP 文件实现任意文件写入,可能导致远程代码执行或服务器文件系统被篡改。
是否为 Web 类漏洞: 未知
判断理由:
| # | POC 描述 | 源链接 | 神龙链接 |
|---|
标题: fix: zip extraction validation by Philipinho · Pull Request #1753 · docmost/docmost · GitHub -- 🔗来源链接
标签:x_refsource_MISC
神龙速读:
- **Pull Request Title**: fix: zip extraction validation #1753
- **Merged by**: Philipinho
- **Date Merged**: Dec 1, 2025
- **Commits**: 2
- **Files Changed**: 1
### Summary by CodeRabbit
- **Bug Fixes**:
- Improved robustness of ZIP import: entry names are normalized and validated, invalid or malformed entries are skipped with warnings.
- Added path-traversal protection so archived entries outside the target directory are ignored, preventing unsafe extractions.
- Extraction flow now drops problematic entries early, reducing failed imports and improving overall upload safety.
### WalkerRabbit Walkthrough
- Added runtime ZIP entry name normalization and validation, skips invalid or path-traversal entries with console warnings, and ensures entries outside the target directory or named under `__MACOSX` are not extracted.
### Changes
- **Cohort / File(s)**: apps/server/src/integrations/import/utils/file.util.ts
- **Summary**: Normalize entry names, validate with `yauzl.validateFileName`, skip invalid entries with console warnings, prevent path traversal, and drop entries outside the target or under `__MACOSX`.
### Estimated Code Review Effort
- **Complexity**: 2 (Simple)
- **Time**: ~10 minutes
- **Tasks**:
- Verify `yauzl.validateFileName` usage and return semantics.
- Confirm path resolution check prevents path traversal across platforms.
- Ensure skipping entries doesn't break downstream import assumptions or logging clarity.
### Pre-merge Checks and Finishing Touches
- Passed checks: 3 passed
### Poem
- Fun poem about zip file handling
### Additional Information
- Referenced in multiple other commits and projects after merging
- Branch `fix/zip-validation` deleted last month
标题: Release v0.24.0 · docmost/docmost · GitHub -- 🔗来源链接
标签:x_refsource_MISC
神龙速读:
**关键漏洞信息:**
- **版本:** v0.24.0
- **发布日期:** 2025年12月13日
- **安全提示:**
- 此版本包含安全修复。建议升级到v0.24.0。
**相关提交:**
- 自上次发布以来对主分支的22次提交。
- 版本哈希: 0fe1459
**更新详情:**
- AI搜索(支持OpenAI, Gemini, Ollama)(企业版)
- API密钥管理(企业版)
- 文本背景高亮颜色
- 锚点链接
- CJK搜索支持Typesense搜索引擎(企业版)
- 性能改进和错误修复。
标题: Arbitrary File Write via Zip Import Feature (ZipSlip) · Advisory · docmost/docmost · GitHub -- 🔗来源链接
标签:x_refsource_CONFIRM
神龙速读:
以下是该网页截图中的关键漏洞信息,以简洁的Markdown格式呈现:
```markdown
## 漏洞概览
- **漏洞类型**: 通过Zip导入功能进行任意文件写入 (ZipSlip)
- **发布者**: Philipinho
- **报告编号**: GHSA-54pm-hqxm-54wg
- **发布日期**: 4天前
## 关键信息
- **安全等级**: 高 (7.1/10)
- **受影响版本**: v0.21.0以上
- **修复版本**: v0.24.0
## CVSS V3 指标
- **攻击向量**: 网络
- **攻击复杂度**: 低
- **所需权限**: 低
- **用户交互**: 无
- **影响范围**: 不变
- **机密性影响**: 无
- **完整性影响**: 低
- **可用性影响**: 高
## 漏洞详情
Docmost 存在利用 Zip 导入功能进行任意文件写入的安全漏洞 (ZipSlip)。问题出在文件zip解压缩处理上:apps/server/src/integrations/import/utils/file.utils.ts,没有对文件名进行任何验证。
## 漏洞影响
Zip Slip 漏洞可让攻击者在文件系统上创建或覆盖现有文件。对于web应用,攻击者可能通过在应用目录下放置web shell实现代码执行,因为DocMost采用TypeScript编写,覆盖主应用文件将导致应用崩溃或实现代码执行。
## 示例PoC
```bash
$ echo 'Hello World' > ZIPSLLIP.md
$ echo pwn > poc.txt
$ zip zipslip.zip ZIPSLLIP.md
$ unzip -l zipslip.zip
```
## 责任报告者
- **RamadhanAmizudin**
```
该markdown简洁明了地概述了关于漏洞的所有关键信息。
标题: fix: zip extraction validation (#1753) · docmost/docmost@c3b350d · GitHub -- 🔗来源链接
标签:x_refsource_MISC
神龙速读:
### 关键漏洞信息
- **提交信息**
- 作者:Philipinho
- 日期:2025年12月1日
- 提交描述:`fix: zip extraction validation (#1753)`
- **漏洞修复**
- **文件处理路径**
- 修复了`extractZipInternal`函数中的问题,主要集中在文件名的验证和路径解析上。
- **关键代码段**
```typescript
// 文件名验证
const validationError = yazul.validateFileName(safe);
if (validationError) {
console.warn(`Skipping invalid entry ${validationError}`);
zipfile.readEntry();
return;
}
// 路径规范化处理
const fullPath = path.join(target, safe);
const resolved = path.resolve(fullPath);
const targetResolved = path.resolve(target);
if (!resolved.startsWith(targetResolved + path.sep)) {
console.warn(`Skipping entry (path outside target): ${safe}`);
zipfile.readEntry();
return;
}
```
- **受影响的文件**
- `apps/server/src/integrations/import/utils/file.utils.ts`
- **变更细节**
- **1文件变更**
- 增加了17行代码,用于增强文件的验证逻辑,防止潜在的安全风险,如路径遍历攻击(Path Traversal)。
### 归纳
此次提交主要修复了在处理zip文件解压时可能存在的路径遍历漏洞,通过引入文件名验证和路径规范化检查,确保所有文件都被解压到目标目录内,避免潜在的安全风险。
暂无评论