From 0ddbe11eda17d46336e39b334d8d6a2b69c88cb5 Mon Sep 17 00:00:00 2001 From: Jesse Date: Thu, 6 Aug 2026 15:52:37 +0800 Subject: [PATCH] docs(bugs): record staging credential incident resolved --- docs/BUG_HISTORY.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/BUG_HISTORY.md b/docs/BUG_HISTORY.md index 5ccd0113..5c7fa924 100644 --- a/docs/BUG_HISTORY.md +++ b/docs/BUG_HISTORY.md @@ -2211,7 +2211,7 @@ ## BUG-128 | staging deploy 泄漏多行 SSH secret 且 env owner 契约互相冲突 -- 状态:resolved(local,pending quality-gate rerun) +- 状态:resolved - 首次发现:2026-08-06 - 最近更新:2026-08-06 - 影响面:Gitea/GitHub staging deploy 与 migration workflow、staging SSH 凭据、`.env.staging*` owner、加密备份和发布门禁;production 未受影响。 @@ -2219,7 +2219,7 @@ - 触发条件:Gitea workflow 将多行 OpenSSH key 直接放入 step env;root 控制脚本验证一个由 `deploy` 持有的 mode-0600 env;此前 root rollout 临时文件又通过 `mv` 把 env owner 改成 root。 - 根因:Gitea runner 不能可靠遮蔽多行 secret 的每一行;控制面同时混用了“当前脚本用户”和“部署树 owner”作为 env ownership 事实,rollout 覆盖文件时未保留原 owner/gid。 - 修复:立即停止发布,生成并验证新 staging ED25519 key,精确撤销旧 authorized key,证明旧 key 无法登录,删除本地旧 key,更新 Gitea/GitHub staging secrets,并删除 28 个可能含旧 key 的 Gitea deploy/migration runs。`STAGING_SSH_PRIVATE_KEY` 改为单行 base64;所有 staging workflow 解码到 0600 临时文件并用 `ssh-keygen` 验证。deploy/migration 以部署树 UID 校验两个 env;backup helper 继续以 `deploy` 运行;rollout 临时文件显式保留部署树 owner/gid。 -- 验证:新 key 严格主机校验登录成功,旧 key 登录失败;新 Gitea/GitHub secrets 已更新;泄漏 run `1464` 已删除;focused workflow、owner、shell/YAML 和 governance tests 待本次提交执行,完整 staging gate/deploy 待新 exact SHA。 +- 验证:新 key 严格主机校验登录成功,旧 key 登录失败;新 Gitea/GitHub secrets 已更新;泄漏 run `1464` 已删除;本地 workflow contracts 31/31、personal-report 142/142、owner regression、shell/YAML、TypeScript、ESLint、governance 和 pre-work 通过;Gitea quality gate run `1465` 在完整 Docker/PostgreSQL runner 中成功。新 exact-SHA migration/deploy 仍按发布流程单独验收。 - 防复发:禁止 staging workflow 直接注入多行私钥或打印 decoded secret 变量;env owner 必须由部署树身份决定,root 受控脚本不得用 root 临时文件改变持久 env owner。任何凭据日志暴露先轮换/撤销/清理,再修代码和重跑。 - 相关记录:BUG-124、BUG-127、ERR-092、ERR-093、ERR-094 - 复发自:无