Require explicit authentication for the admin control plane - #507
Require explicit authentication for the admin control plane#507GOLDKUN wants to merge 2 commits into
Conversation
|
PR Title: Require explicit authentication for the admin cont... Commit: 本次变更将 daemon 的 admin 控制面默认改为强制要求管理员 token:
总体评估:改动意图是安全加固(默认关闭无认证 admin API),但存在一个关键缺口——daemon 无条件强制认证,而第一个 token 只在『store 为空 + 环境变量已设置』时才会创建。默认安装未设置环境变量时,daemon 会静默启动但所有 admin 端点(除 /status)全部 401,且 token 创建端点本身也被中间件保护,没有自服务恢复路径;既有无认证部署升级后也会被静默锁死。此外新增测试只覆盖了快乐路径,未覆盖负分支。 |
| if !ok { | ||
| t.Fatal("bootstrap token was not usable") | ||
| } | ||
| } |
There was a problem hiding this comment.
bootstrap 测试仅覆盖快乐路径,缺少对『已要求 token』与『未设置环境变量』负分支的覆盖
新增测试 TestInitializeAdminAuthBootstrapsOnlyWhenStoreIsEmpty 的命名声明了『仅当 store 为空时自举』,但实际只覆盖了『store 为空 + 环境变量已设置』的快乐路径,没有覆盖两个关键负分支:a) store 已要求 token(已有 token)时设置环境变量应被忽略且不应报错/重复创建同名 token;b) store 为空但环境变量未设置时应 no-op(而这一路径正是导致 admin API 被静默锁死的主因)。鉴于该逻辑的回归风险较高(错误的自举可能导致重复 token、启动失败或控制面锁死),建议补充这两个分支的用例以锁定预期行为。
Problem code:
Changed code at cmd/octobus/main_test.go:38-63
Recommendation:
为 initializeAdminAuth 补充『store 已有 token 且设置了环境变量』(验证不会重复创建、不会返回错误)与『store 为空且未设置环境变量』(验证 no-op 后 AdminRequiresToken 仍为 false)两个用例,并在 serve 集成层验证默认启动后非 status 的 admin 端点返回 401。
|
PR Title: Require explicit authentication for the admin cont... Commit: 变更评估(cmd/octobus 管理员认证 fail-closed 加固) 变更内容:
评估结论:
未发现达到高置信度标准的、由本变更新引入的可操作缺陷,故不提交 finding。 |
|
Follow-up fixes after CI/code review:
Verification: Admin authentication and serve lifecycle tests pass. |
问题
当数据库中没有 Admin Token 时,Admin API 会自动跳过鉴权。全新部署或所有 Token 被删除后,控制面因此匿名开放。
影响
未认证调用方可以创建 Admin Token、管理服务和实例,并触发服务导入及构建流程。若部署在可访问网络,可能导致控制面接管;结合远程导入还可能进一步执行不受信任代码。
修复内容
OCTOBUS_BOOTSTRAP_ADMIN_TOKEN,仅在数据库尚无 Admin Token 时初始化首个 Token。401,不再匿名放行。验证
go test ./cmd/octobus通过。go test ./internal/admin中与 protoc 相关的既有测试受本地缺失protoc阻塞;新增鉴权测试通过。