MemPalace 安全策略详解:版本支持边界、私有漏洞报告通道与仓库中的供应链防护实践
本文基于仓库根目录的 SECURITY.md 展开,完整梳理 MemPalace 的版本支持政策与漏洞报告流程(仅通过 GitHub 私有漏洞报告 Private Vulnerability Reporting 接收,不接受公开 Issue),并结合 CHANGELOG.md 中的安全修复记录、docs/RELEASING.md 的发布流程与 docs/HISTORY.md 的仿冒域名事件,说明这套安全策略在实际仓库中如何落地。读完后,你将知道:哪些版本仍在安全修复范围内、发现漏洞后如何提交一份合格的报告、以及该项目在 hook 注入、路径穿越、凭据管理等方面做过的具体加固。
版本支持政策:安全修复只落在当前主版本线
SECURITY.md 明确了 MemPalace 遵循语义化版本(Semantic Versioning),安全修复只落在当前主版本线上。其版本支持矩阵为:
| 版本 | 是否支持 |
|---|---|
| 3.x(当前) | 是 |
| 2.x 及更早 | 否 |
这一"当前主版本线"指向的具体版本号可以从仓库中直接核实。版本号的单一事实来源是 mempalace/version.py,当前值为 3.8.0;pyproject.toml 中的包版本同样为 3.8.0。docs/RELEASING.md 还说明版本号需要在六处保持同步(mempalace/version.py、pyproject.toml、两个插件清单等),并有 version-guard.yml 工作流和 tests/test_version_consistency.py 之类的测试来钉住一致性。
对使用者的实际含义是:如果你运行的是 2.x 或更早版本,即使发现了影响你的安全漏洞,官方也不会为该版本线提供修复,升级到 3.x 是当前策略下唯一的获取安全补丁途径。CHANGELOG.md 开头也声明项目遵循 Keep a Changelog 格式并遵守 Semantic Versioning,与该政策一致。
漏洞报告通道:仅接受私有报告,禁止公开 Issue
SECURITY.md 的开篇就给出了明确红线:请勿通过公开 GitHub Issues 报告安全漏洞。报告路径是 GitHub Private Vulnerability Reporting(GHPVR),具体操作分三步:
- 打开本仓库的 Security 选项卡;
- 点击 Advisories → Report a vulnerability;
- 在下表单中填入下述报告要素。
选择私道的动机在文档中体现为"We take the security of MemPalace seriously"——公开 Issue 会立即暴露可利用细节给攻击者,私有报告则允许维护方在补丁发布前控制信息扩散窗口。
报告中应包含的内容
SECURITY.md 要求报告者提供以下四项要素:
- 描述性摘要:对漏洞本身的说明;
- 详细复现步骤:包括任何 proof-of-concept 脚本或具体文件路径;
- 受影响的版本与平台;
- 潜在影响与严重性评估。
结合仓库实际结构,报告者可以给出的具体路径示例包括:hook 脚本位于 hooks/ 目录(如 hooks/mempal_save_hook.sh)、MCP 服务入口在 mempalace/mcp_server.py、存储后端实现在 mempalace/backends/ 下。附带这些真实路径的 PoC 会显著降低分诊成本。
报告之后可以期待什么
SECURITY.md 承诺了三个明确的时间与流程节点:
- 目标在 48 小时内确认收到报告;
- 会对问题进行分诊(triage),并在通往补丁的进展中持续向报告者同步状态;
- 漏洞修复且更新发布后,会发布一份 安全公告(security advisory),并在报告者愿意的情况下署名致谢。
这套"确认—分诊—公告—致谢"闭环与 PyPI 生态常用的 GHPVR 流程一致,也解释了为什么 CHANGELOG 中会记录安全公告发布(见下节)。
从 CHANGELOG 看安全策略的落地:真实的安全修复记录
安全策略不是孤立文件。CHANGELOG.md 中多次出现独立的 Security 小节,可以印证该项目确实在持续执行漏洞修复与加固,且部分修复正是报告/审计流程的产物:
3.3.x 周期(2026-04 中旬)
- "Security hook injection fix (#812)"——修复 hook 注入问题;
- "Restrict file permissions on sensitive palace data (#814)"——收紧敏感 palace 数据文件的权限;
- "entity_registry.research() defaults to local-only (#811)"——此前会未经用户显式同意发起出站 Wikipedia HTTPS 请求,改为默认本地,需显式传
allow_network=True才联网; - "Tightened
SECURITY.mdwith a real version-support policy and the GHPVR-only reporting channel (#810)"——即本文所讲的版本支持矩阵与私有报告通道的收紧本身,也有对应的变更记录。
3.2.0(2026-04-12)
- "Harden palace deletion, WAL redaction, and MCP search input handling (#739)"——加固删除操作、WAL 脱敏与 MCP 搜索输入处理;
- "Consistent input validation, argument whitelisting, concurrency safety (#647)"——统一输入校验与参数白名单;
- "Remove hardcoded credential paths from benchmark runners (#177)"——移除基准测试脚本中的硬编码凭据路径;
- "Remove global SSL verification bypass in convomem_bench (#176)"——移除全局 SSL 校验绕过。
3.1.0(2026-04-09)
- "Harden inputs, fix shell injection (#387)"、"Shell injection fix in hooks, Claude Code mining (#114)"——针对 hook 与挖掘链路的 shell 注入修复;
- "Sanitize SESSION_ID in save hook to prevent path traversal (#141)"——对 save hook 的
SESSION_ID做净化,防止路径穿越; - "Sanitize error responses and remove
sys.exitfrom library code (#139)"——净化错误响应,避免错误信息泄露内部细节; - "Mark MD5 as non-security in miner drawer ID generation (#53)"——明确 miner 抽屉 ID 生成中的 MD5 仅作非安全用途(避免误读其强度)。
从 CHANGELOG 的记录看,安全修复集中在三类攻击面:shell/hook 注入、输入与路径净化、以及凭据与网络出口治理。这也提示报告者:若你关注的风险点属于这三类,CHANGELOG 可作为"该问题是否已被修复"的快速检索入口。
供应链与仿冒域名防线:安全策略的延伸
MemPalace 的"安全"范畴在仓库文档中不止于代码漏洞。README.md 开头以醒目提示警告仿冒网站,docs/HISTORY.md 记录了 2026-04-11 的"仿冒域名与恶意软件"事件(社区在多个 issue 中报告了伪造 MemPalace 网站分发恶意软件的情况)。文档明确项目仅有的官方入口为:
- 本 GitHub 仓库(MemPalace/mempalace);
- PyPI 包
mempalace; - 官方文档站 mempalaceofficial.com。
其他任何域名(包括 .tech、.net 或其他 .com 变体)均被视为仿冒。对使用者的实际建议是:只从 PyPI 安装、只信任上述入口,遇到其他域名的"MemPalace 官网"按仿冒处理。
发布侧的供应链防护在 docs/RELEASING.md 中有完整说明,可视为安全策略在发布管线的落地:
- PyPI 可信发布(Trusted Publishing / OIDC):上传使用 GitHub 在上传时铸造的短期身份,仓库中不存储任何 API token;
- 人工审批门:
publish.yml工作流在pypienvironment 上暂停等待评审人手动批准后才执行上传; - 只从 main 发布:工作流会拒绝任何 tag 对应提交不是 main 祖先的发布,且 tag 必须与
mempalace/version.py一致; - 入口点对齐检查:发布前要求核验
mempalace-mcp控制台脚本声明与插件配置一致,防止pip install后插件配置指向不存在的可执行文件(历史上 v3.3.2 曾因此出错)。
这些机制共同降低了"供应链投毒"和"仿冒分发包"两条路径的风险,与 SECURITY.md 的私有报告通道形成互补:前者防住外部伪造,后者处理内部漏洞。
给报告者的检查清单
综合 SECURITY.md 与仓库实践,提交漏洞报告前可以按以下清单准备:
- 先查版本:确认自己运行的版本(
mempalace/version.py对应值,当前为 3.8.0)落在受支持的 3.x 线上; - 先查 CHANGELOG:确认该问题是否已在某个版本的 Security 小节中被修复,避免重复报告;
- 走私有通道:通过仓库 Security 选项卡的 GHPVR 表单提交,绝不发公开 Issue;
- 报告要素齐备:摘要、可复现步骤(含真实文件路径或 PoC 脚本)、受影响版本与平台、影响与严重性评估;
- 等待 48 小时确认:之后关注分诊进展,修复发布后将收到安全公告;
- 认准官方入口:仅在官方仓库、PyPI 与官方文档站获取软件,警惕仿冒域名。
小结
SECURITY.md 的内容简短但每条都可执行:安全修复只覆盖 3.x 当前主版本线(2.x 及更早已停止),漏洞必须走 GitHub 私有报告通道,报告需含摘要、复现步骤、影响版本平台与严重性四项,处理侧承诺 48 小时内确认、持续分诊同步、修复后发布公告并署名致谢。而 CHANGELOG.md、docs/RELEASING.md 与 docs/HISTORY.md 中的记录表明,这套策略并非纸面文章——hook 注入、路径穿越、shell 注入修复、文件权限收紧、SSL 绕过与硬编码凭据移除、PyPI 可信发布与仿冒域名警示,共同构成 MemPalace 在 v3.8.0 阶段的安全现状。
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust0624
Hy4-previewHy4 preview 是由腾讯混元团队研发的新一代混合专家(MoE)旗舰模型。模型总参数量 770B,每个 token 激活 49B,主干共包含78层,第一层采用标准 FFN,其余 77 层均为 MoE 结构,每层包含 256 个路由专家与 1 个共享专家,每个 token 激活 top-8 路由专家及共享专家。主干之外原生内置 1 层 MTP(总参数量 10B,激活 0.7B)以支持投机解码。Python00
GLM-5.3GLM-5.3 与 GLM-5.2 使用相同的基座模型——所有提升均来自后训练。与 GLM-5.2 相比,它在复杂编程和长程任务上的表现显著提升。Jinja00
GLM-5.3-FlashGLM-5.3-Flash (320B-A18B),是GLM-5系列的首个原生多模态模型。320B总参数,能力超过GLM-5.2Jinja00
Spark-X2.5-4BSpark-X2.5-4B 旨在让强大的 AI 更实用、更高效、更易获得。在广泛日常任务中表现强劲,涵盖对话、写作、翻译、推理、编码、工具调用以及智能体工作流,并在同等规模的开源模型中取得领先成绩。Spark-X2.5 将面向效率的架构与最高 1M tokens 的原生上下文窗口相结合,并支持 200 多种语言。Python00
Spark-X2.5-1.7BSpark-X2.5-1.7B 旨在让强大的 AI 更加实用、高效且易于获取。这些模型在广泛的日常任务中表现出色,涵盖对话、写作、翻译、推理、编程、工具调用和智能体工作流,并在同等规模的开源模型中取得领先结果。Spark-X2.5 将面向效率的架构与最高 1M tokens 的原生上下文窗口相结合,并支持 200 多种语言。Python00