Download Latest Version k8m-linux-s390x.zip (45.1 MB) Google Add to Preferred Sources
Home / v0.26.21
Name Modified Size InfoDownloads / Week
Parent folder
k8m-darwin-amd64.zip 2026-10-03 46.3 MB
k8m-darwin-arm64.zip 2026-10-03 44.9 MB
k8m-linux-amd64.zip 2026-10-03 45.8 MB
k8m-linux-arm64.zip 2026-10-03 43.1 MB
k8m-linux-ppc64le.zip 2026-10-03 43.2 MB
k8m-linux-s390x.zip 2026-10-03 45.1 MB
k8m-windows-amd64.zip 2026-10-03 46.3 MB
k8m-windows-arm64.zip 2026-10-03 43.2 MB
README.md 2026-10-03 2.4 kB
v0.26.21 source code.tar.gz 2026-10-03 12.7 MB
v0.26.21 source code.zip 2026-10-03 13.4 MB
Totals: 11 Items   383.9 MB 1

安全修复:移除 JWT 默认密钥,改为服务端会话凭证

修复 [#482]:JWT_TOKEN_SECRET 缺省值为公开的 your-secret-key,攻击者可据此伪造平台管理员 token。 空库首次启动会自动创建 k8m 平台管理员账户,因此仅修改默认密码无法阻止伪造; 一旦 JWT 密钥被知晓,伪造 token 在修改密码后依然有效。

变更内容

改用服务端会话(Opaque Token)凭证

  • 新增 user_sessions 表与 TokenService:签发 256 位随机凭证(库中仅存 SHA-256 哈希); 校验为哈希比对 + 过期检查 + 撤销检查(30 秒结果缓存)
  • 不再存在可被伪造的签名密钥,your-secret-key 一类公开默认值问题从机制上消失
  • 凭证撤销立即生效:禁用用户、删除用户、修改密码(管理员操作与自助修改)会即时注销该用户全部会话
  • 删除 API 密钥 / MCP 密钥时同步撤销对应会话,保证「删除即失效」

覆盖范围

  • 签发侧:密码登录、LDAP 登录、临时管理员、SSO/OIDC 回调、OpenAPI 密钥、MCP 密钥、MCP host 内部调用
  • 校验侧:Auth 中间件、平台管理员中间件、k8m MCP server
  • 前端:顶栏用户名与角色改由 /params/user/role 获取,移除 jwt-decode 依赖

存量数据兼容(无需重新生成密钥)

启动时自动执行一次幂等迁移,把升级前已签发的密钥登记为服务端会话:

密钥类型 来源字段 有效期
OpenAPI 密钥 api_keys.key 取 api_keys.expires_at
MCP 密钥 mcp_keys.jwt 签发时间 + 10 年(该表未存过期字段)

迁移仅登记密钥表中确实存在的凭证,因此用公开默认密钥伪造的 JWT 依然无法通过校验。

升级注意

  • 浏览器登录态需重新登录一次(登录凭证不做迁移,避免旧签名继续有效)
  • 已签发的 API 密钥 / MCP 密钥自动迁移后继续可用,无需重新生成
  • 启动参数 --jwt-token-secret / 环境变量 JWT_TOKEN_SECRET 保留但不再生效,启动时会打印弃用提示; 存量部署脚本可继续携带该参数,不会导致启动失败

新增测试

pkg/service/token_test.go:覆盖签发与校验、哈希不落明文、单条撤销、按用户全量撤销、非法有效期拒绝、伪造凭证拒绝。

Source: README.md, updated 2026-10-03