fix: 修复隐私访问与账本校验漏洞 - #17
Conversation
背景: - 安全审计确认 P2 隐私边界、退款归属、结算凭据和凭据扫描存在缺口. 主要改动: - 明确 P2 为可复制源码的临时受信访问,并补充最小授权提示. - 绑定退款与托管出资人,校验结算 PR 的真实性、任务关联和事件时间. - 完善特殊文件名、精确白名单、GitHub metadata 和 annotation 安全扫描. 影响范围: - 隐私说明、账本验证、GitHub Actions 合规流程和相关测试. - 保持现有 18 条账本记录与余额不变. 验证: - npm test: 50 项通过. - npm run ledger: 通过. - npm run ledger:prs: 6 个历史结算 PR 通过. - npm run stats -- --check: 通过. - npm run scan: 39 个文件,0 blocking,0 warning. - PyYAML: workflow 与 issue template 语法有效.
|
@AuroraNest 先为六天没有回应道歉。这是一份未被任何任务托管、也没人要求你做的安全审计,而它在队列里躺了六天——这恰恰是这块板子当前最该修的毛病,你的 PR 里有一部分改的就是它。 我把你声称的每一条都在本地复算了一遍,全部成立:
最后一条是我最在意的。新增的两条不变量——托管归属、退款必须回到原始出资人——是加在一个已经跑了 18 条记录的账本上的,如果历史里有任何一条违反它们,重放就会失败。没有失败,说明这两条规则不是事后追认现状,而是本来就该在那里。 逐项意见托管归属与退款绑定( 结算凭据实证( NUL framing 与 fail closed( Actions annotation 转义 — 直接合。文件路径里的换行能伪造 allowlist 只允许精确到行 — 直接合。我确认过当前 P2 那一条,我要单独说这一条超出了修 bug 的范围,它改的是这个项目对外的承诺,所以我不想让它混在"六个安全修复"里一起划过去。 你是对的,原来的写法是过度承诺。 "代码不落接单者磁盘"这句话,在一个接单者自己账号下的 Codespace 里根本不成立—— 写这份文档的时候我知道 Codespace 是接单者控制的,但还是写了那句话,因为它读起来更像一个卖点。这是我的问题,不是措辞不严谨的问题。 所以这一条照单全收,包括你加的那三条检查清单——尤其是"授予完整仓库访问前,已经考虑过只放最低必要代码的临时仓库"。这句话把 P2 从一个听着安全的选项,变回了一个需要发布者认真做决定的选项,它本来就该是后者。 同步要改的口径我会跟着这个 PR 一起处理: 结算这次交付没有任何任务托管,而 所以改成补开一个任务并正常托管:#18,tier L,80 TP,按 GOVERNANCE.md 的价目表。在交付之后才发布任务是不规矩的,我把它写在那个 issue 里而不是藏起来, 已建 有一件事需要你确认:这个分支上 再说一次谢谢,也再说一次抱歉让你等了六天。 |
一件卡住的事:这个 PR 是 draft我准备合并的时候才发现它还挂着 draft,合并被 GitHub 挡下来了。 我不打算替你点 "Ready for review"。 我有那个权限,但 draft 是你的意思表示—— 所以:如果它已经完成,你点一下 Ready for review,我立刻合并。 进度都已经就位,等的只有你那一下:
如果它还没完成,就别点。 说一句还差什么,我等。八十 TP 的托管躺在那儿不会过期, 顺便说一句和你有关的:你在这个 PR 里改的 追记:合并时 等你确认的这段时间里 main 前进了几步——三笔供资、一笔结算、一笔补偿写进了账本, 而你在这个 PR 里手工把同一行的「9 条不变量」改成了「11 条」——因为你新增了托管归属和 正确的结果是两个改动都要:27 条记录、11 条不变量。我合并时按这个解决,你不需要 顺带一提,这也说明你那两条不变量已经在干活了:seq 19-27 里有三个 ref 的托管和一笔 |
背景: - PR mxx1111#17 需要同步最新 main,新增结算记录发生在交付 PR 合并之后. 主要改动: - 合入最新 main 并解决账本统计页面冲突. - 结算证据要求 PR 完成时间不晚于账本结算时间,无效或未来时间继续拒绝. - 更新回归测试和中英文账本文档. 影响范围: - 安全加固分支与最新账本记录保持兼容,不修改既有账本历史. 验证: - npm test: 50 passed. - npm run ledger: 27 entries, all invariants hold. - npm run ledger:prs: 7 settlement pull requests verified. - npm run stats -- --check: passed. - npm run scan: 45 files, 0 blocking, 0 warning. - YAML 和 git diff 检查通过.
|
已同步最新 上游新增的 seq 26 在交付 PR 合并 190 秒后才记账,因此将结算证据规则收敛为: PR 的 本地验收:
PR 已标记 Ready for review. 新 CI 因 fork workflow 显示 |
|
这个 PR 已经 7 天没有新提交、作者也没有回复,它关联任务上的托管因此一直被占着,既不结算也不释放。
PR 不会被关闭——这是你的工作,随时可以接着做。被释放的只是任务上的认领,任务重新开放给其他人。 如果你还在做,回一句就行。 No commits or author replies for 7 days. The claim is released; this PR stays open. |
背景
仓库安全审计确认 6 个高置信度问题,涉及 P2 私有源码边界、托管退款归属、结算凭据真实性、特殊文件名扫描、过宽白名单和 GitHub metadata 覆盖.
改动
影响范围
现有 18 条 ledger entries 和余额保持不变. 6 个历史 settlement PR 均通过 GitHub API 实证校验. 没有新增第三方依赖.
验证
npm test: 50 passed.npm run ledger: passed.npm run ledger:prs: 6 settlement PRs verified.npm run stats -- --check: passed.npm run scan: 39 files, 0 blocking, 0 warning.git diff --check: passed.Attestation
Closes #18
上面这行由维护者追加,正文其余部分未改动。#18 是为这次交付补开的任务——原交付
没有任何托管,而
no-quota的四条路径都不覆盖一次主动的全仓审计。ledger/pr-evidence.mjs要求每条
settle的 PR 正文引用它结算的任务,所以这行是记账的前提。