当前只支持最新 release。FlareMo 仍处于早期版本,安全修复会优先进入最新版本。
请不要把未公开漏洞直接发到公开 issue。
可以通过 GitHub Security Advisory 报告,或联系维护者在 GitHub profile 中公开的联系方式。
报告时请包含:
- 影响版本或 commit。
- 部署方式。
- Better Auth 原生认证配置是否启用,以及 Cloudflare Access 外层是否启用。
- 复现步骤。
- 影响范围。
- 建议修复方式,如果有。
- FlareMo 应用层使用 Better Auth。浏览器会话使用
HttpOnly、SameSite=Lax的 cookie;认证身份与既有 FlareMousers/owner通过专用映射表关联。 - 当前只开放一次性 owner bootstrap,不开放公共 signup。bootstrap 需要部署者配置的
FLAREMO_BOOTSTRAP_SECRET,成功后会被 D1 状态锁定;失败状态必须显式恢复,不能自动创建第二个 owner。 - 密码由 Better Auth 处理,当前要求长度为 12–128 个字符。初始密码只通过 bootstrap 请求提交,不写入代码、文档、migration、日志或聊天。
- 当前默认没有 email provider,因此“忘记密码”邮件流程保持关闭;已知当前密码时可通过 Better Auth 修改。已完成 bootstrap 的单用户实例可以在明确配置独立
FLAREMO_RECOVERY_SECRET的短窗口内执行 break-glass recovery:它保留原 owner mapping、复用 Better Auth reset-password 流程、撤销所有 session 和memos_pat_,成功后必须立即轮换或删除该 secret。 - 脚本、MCP 和 Memos-compatible 客户端使用由已登录浏览器账户创建的
memos_pat_Personal Access Token。PAT 只在创建响应中返回一次,D1 只保存不可逆校验值;账户页可以列出和撤销 PAT。 - Cloudflare Access 是可选的外层防线,生产迁移期建议保留。启用 Access 时,客户端必须同时通过 Access policy 和 FlareMo 应用层认证;Access Service Token 本身不等于 FlareMo 用户 session,也不能单独访问私有 API。
- 公开分享路径可以 bypass Access,但分享内容仍由 FlareMo 的 share token、过期时间和 memo 状态校验。公开分享不接受浏览器 session 或 PAT 作为分享授权的替代物。
BETTER_AUTH_SECRET、FLAREMO_BOOTSTRAP_SECRET和可选的FLAREMO_RECOVERY_SECRET不得放入wrangler.jsonc、.dev.vars.example的真实值、Git、issue、PR、日志或聊天;生产环境应使用wrangler secret put或 Cloudflare 控制台配置。
FLAREMO_PUBLIC_URL 和可选的 FLAREMO_TRUSTED_ORIGINS 组成应用层的精确 Origin allowlist。比较的是完整 origin(scheme、host 和 port),不支持 wildcard;Referer、Cloudflare Access headers 或其他代理头不能替代 Origin。
- 使用 cookie session 的状态变更请求,包括
POST、PATCH、DELETE和其他非安全方法,必须携带Origin,且必须精确匹配FLAREMO_PUBLIC_URL或FLAREMO_TRUSTED_ORIGINS中的一个值。Origin 缺失或不匹配时返回403,不能通过只增加 Access headers 来绕过。 - PAT/Bearer 请求可以没有
Origin,这是桌面脚本、MCP 和其他非浏览器客户端的正常情况。如果 PAT 请求携带Origin,它也必须精确匹配同一 allowlist;不匹配时返回403。
这个 credential-specific 规则与 Memos 0.30 MCP 文档 所描述的 browser-origin 防 DNS rebinding 模型保持同一安全方向:浏览器来源必须受信任,桌面客户端可以不发送 Origin。安全模型相似不代表协议已经兼容;当前 /mcp Streamable HTTP 和 current camelCase wire adapter 仍是 Issue #40,#39 不承诺完整 Memos Server parity。
memos_pat_ 是 FlareMo 的应用层 PAT 前缀,不代表已经实现 Memos Server 的完整认证协议。#39 只建立了可保护 FlareMo 兼容 API 子集的 cookie/PAT 认证基础:
- 当前 FlareMo
/api/v1/*和旧式/api/v1/mcpJSON-RPC 端点接受Authorization: Bearer memos_pat_...。 - 当前 Memos 的完整 auth facade、字段/错误翻译、current camelCase wire adapter,以及
/mcpStreamable HTTP 端点仍属于 Issue #40。 - 兼容 API 的数据模型、字段命名、分页和行为只在 Memos 兼容矩阵 标记的子集内承诺。
- 未配置 Cloudflare Access 本身不是应用层认证绕过;但部署者若没有配置 Better Auth 的公开 URL、应用 secret 和一次性 bootstrap secret,原生认证会 fail closed,实例也不应被宣称为可用。
- 公开分享 token 被主动分享后可访问。
- 本地开发环境
.wrangler/或.dev.vars泄露;这些文件不应提交,但若真实凭据泄露仍应立即轮换。