本项目采用日期版本号(YYYY.MM.DD.N)。只有最新版本会得到安全修复:
| 版本 | 支持状态 |
|---|---|
| 最新版本(latest) | ✅ 积极支持 |
| 旧版本 | ❌ 不再维护,请升级 |
我们认真对待安全问题。请勿在公开渠道(GitHub Issues、讨论区、社交平台)披露漏洞细节。
| 方式 | 地址 |
|---|---|
| 首选:GitHub Security Advisory(私有上报) | https://github.com/westsource/agentctxsync/security/advisories/new |
| 备选:邮件 | 见仓库维护者主页 |
请尽量提供以下信息,帮助我们快速定位与复现:
- 影响组件(server / mcp client / 某个 adapter / web UI)
- 漏洞类型与严重程度评估
- 复现步骤(或最小 PoC)
- 受影响的版本号
- 你建议的修复方式(如有)
- 48 小时内:确认收到上报,并给出初步评估
- 7 天内:发布修复方案或缓解措施说明
- 修复完成后我们会公开致谢(如上报者同意署名)
- 服务端密钥:
HERMES_SYNC_PG_DSN、HERMES_SYNC_MASTER_KEY、HERMES_SYNC_JWT_SECRET必须通过环境变量提供(见server/.env.example),严禁硬编码或提交到仓库。 - Workspace API Key(
ws_xxx)是同步接口的唯一凭证,泄露后请在 Web UI 中"重新生成 Key"立即轮换。 - 服务端只监听
127.0.0.1:8765(回环,不对外暴露);从其他机器访问必须置于 反向代理(nginx/caddy 等,终止 TLS)之后,并启用 HTTPS。 - 发信路径有收件人侧限流与每日预算(防"邮件轰炸"/额度耗尽):找回密码、绑定/重发验证邮件
受收件地址与账号维度的冷却限制(1 封/分钟、5 封/天/邮箱;10 封/小时/账号),全站每日上限
HERMES_SYNC_MAIL_DAILY_CAP(默认 200);/web/forgot另有自托管数学验证码, 计数落在mail_stats便于告警。详见docs/server-deployment.md。 - 本项目为自托管工具,数据(会话/消息)包含你的私有 AI 对话,请妥善保护数据库备份。
- 密码使用 PBKDF2-SHA256(600,000 轮迭代,每份哈希自带迭代数,登录时若低于当前策略会 就地重算升级)存储
- JWT 签名使用 HMAC-SHA256,过期时间可配置(
HERMES_SYNC_TOKEN_EXPIRE,默认 24 小时) - 会话消息渲染对 HTML 转义(XSS 防护);Markdown 里的原始 HTML 按字面显示,不参与渲染
- 远程会话 id 经过路径穿越校验后才写入本地存储
- 客户端自动更新对每个文件做 SHA256 校验(防篡改/截断),版本写入
.hermes-sync-version - 租户隔离:Web UI 的会话/消息/搜索接口一律以
workspaces.user_id限定归属,管理员只能 管理用户、邀请码与工作空间元数据,读不到任何人的会话内容(/web/admin/*不含会话正文) - 限流(进程内固定窗口,按 key 而非仅按 IP):注册 10 次/10 分钟/IP、登录 30 次/10 分钟/IP、 验证码 30 次/5 分钟/IP、绑定/重发验证邮件 5 次/10 分钟/IP、找回密码 5 次/10 分钟/IP; 发信另按收件人 1 封/分钟 + 5 封/天、按账号 10 封/小时、按调用方自填地址 1 封/10 分钟, 并有全站日预算(见上)
- 自托管验证码:
/web/register、/web/forgot使用服务端生成的算术验证码,图形为纯矢量 折线(SVG 里没有任何可读字符),答案只存服务端、一次性、带 TTL;换 IP 不能放大发信额度 (收件人/账号维度的桶与 IP 无关) - 邮箱令牌一次性:验证/重置令牌只存 SHA-256 摘要,带 TTL,重发即吊销旧令牌;已验证邮箱在 全库唯一
- 审计:配额拒绝、邀请码与账号相关动作写
audit_log(仅私有运维后台可读)