diff --git a/README.md b/README.md index 78edc0b..90d3844 100644 --- a/README.md +++ b/README.md @@ -346,6 +346,7 @@ http://127.0.0.1:8080/api/health - Bug 反馈请使用 Issue 模板,并提供部署方式、复现步骤、日志和关键配置。 - 功能建议请说明使用场景、期望行为和可接受的替代方案。 +- 安全漏洞请不要公开发 Issue,按 [安全策略](SECURITY.md) 使用私密渠道报告。 - Pull Request 请从独立分支或 fork 分支发起,不要直接向 `main` 推送。 - 分支名建议使用 `fix/...`、`feat/...`、`docs/...` 或 `test/...`,例如 `docs/contribution-guidelines`。 - 提交前按改动范围运行 `go test ./...`、`npm --prefix web run build` 或定向测试,并在 PR 中说明验证结果。 diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 0000000..bfe882f --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,83 @@ +# 安全策略 + +MediaStationGo 是自托管媒体系统,常部署在 NAS、家庭网络、Docker、反向代理和第三方下载器环境中。安全问题通常会同时涉及应用代码、容器配置、路径映射、站点 Cookie / API Key、下载器凭据和外部访问入口。请按本策略报告和处理安全问题。 + +## 支持范围 + +我们优先支持以下版本和部署方式的安全修复: + +- 当前 `main` 分支。 +- 最新发布镜像:`ghcr.io/shukebta/mediastation-go:latest`。 +- README 中推荐的 Docker Compose 第一档、第二档、第三档部署方式。 + +历史版本、私有魔改镜像、未公开补丁分支和非标准部署仍可报告,但维护者可能要求先在最新 `main` 或最新镜像中复现。 + +## 如何报告安全漏洞 + +请不要在公开 Issue、PR、讨论区或群聊中披露可利用细节。优先使用 GitHub Security Advisory 私密报告: + + + +如果无法使用 GitHub 私密报告,可以先通过项目 README 中的社区入口联系维护者,说明“需要私下报告安全问题”,不要直接贴出利用细节、密钥或完整日志。 + +报告时请尽量提供: + +- 影响范围:认证绕过、权限提升、敏感信息泄露、任意文件读写、命令执行、SSRF、路径穿越、下载器凭据泄露等。 +- 复现环境:部署方式、镜像版本或 commit、NAS / 系统、Docker / Compose 版本、是否有反向代理。 +- 复现步骤:最小可复现路径、请求、页面操作或配置条件。 +- 影响证明:截图、脱敏日志、请求响应、数据库字段名等。 +- 缓解建议:如果你已经验证过可行修复或临时规避方式,请一并说明。 + +请务必脱敏: + +- 站点 Cookie、Passkey、API Key、YemaPT Auth Key、M-Team API Key。 +- qBittorrent / Transmission / Aria2 用户名密码。 +- Telegram Bot Token、JWT、数据库密码、反代访问 Token。 +- 私有下载链接、媒体库真实敏感路径、用户个人信息。 + +## 响应流程 + +维护者会尽力按以下节奏处理: + +- 3 个工作日内确认收到报告。 +- 7 个工作日内给出初步影响判断、复现状态或需要补充的信息。 +- 高危问题优先修复,并在可行时提供临时缓解建议。 +- 修复发布后,再公开披露必要信息;公开内容会避免包含可直接滥用的细节。 + +如果问题需要更长时间修复,例如涉及数据迁移、权限模型、第三方站点 API 或下载器协议,我们会在私密报告中同步进展。 + +## 安全问题范围 + +欢迎报告: + +- 未授权访问管理接口、媒体库、下载任务、站点配置或用户数据。 +- 普通用户越权执行管理员操作。 +- 读取或写入容器可访问范围外的文件。 +- 通过路径映射、整理入库、STRM、图片代理、字幕、备份恢复等功能触发路径穿越。 +- 泄露 Cookie、API Key、下载器密码、Telegram Token、JWT 或数据库凭据。 +- SSRF、任意重定向、反代信任边界错误。 +- Docker Compose 示例中可能导致默认暴露敏感服务的问题。 +- 日志中输出敏感信息或无法脱敏的问题。 + +通常不按安全漏洞处理: + +- 需要管理员主动填写恶意配置才能触发、且不会突破管理员已有权限的问题。 +- 只影响个人私有魔改版、无法在最新主分支复现的问题。 +- 已经失效的依赖告警,且没有可达利用路径。 +- 没有安全影响的 UI 显示问题、普通功能 Bug 或性能问题。 + +## 自托管安全基线 + +部署 MediaStationGo 时建议: + +- 首次登录后立即修改默认 `admin / admin123`。 +- 不要把 PostgreSQL、Redis、OpenSearch、qBittorrent WebUI 暴露到公网。 +- 反向代理公网访问时启用 HTTPS,并限制管理后台访问来源。 +- 使用强随机的 JWT / 加密密钥,妥善备份 `./data` 和数据库。 +- 不要在 Issue、PR、截图或日志中公开站点 Cookie、API Key、Passkey、下载器密码。 +- Docker `volumes` 只挂载 MediaStationGo 需要访问的目录,媒体库目录需要写入时再授予写权限。 +- 定期更新镜像,并在升级前备份 `./postgres` 和 `./data`。 + +## 安全修复 PR + +安全修复 PR 请遵循 [贡献规范](CONTRIBUTING.md),但不要在公开 PR 中暴露可利用细节。必要时先通过私密安全报告确认修复方案,再提交脱敏后的补丁。