Skip to content

[Security] Default admin_token hardcoded in source code, also used as JWT signing key #481

@xtcon

Description

@xtcon

[Security] Default admin_token硬编码在源码中,同时作为JWT签名密钥

项目

vastsa/FileCodeBox (8.3k ⭐)

严重度

🔴 高危

描述

core/settings.pyDEFAULT_CONFIGadmin_token 硬编码为 "FileCodeBox2023"

该值有两个用途:

  1. 管理员登录密码apps/admin/views.pyverify_password(data.password, settings.admin_token)
  2. JWT签名密钥apps/admin/dependencies.pyhmac.new(settings.admin_token.encode(), ...) 用于签名和验证所有admin JWT token

影响

攻击者知道默认密码 FileCodeBox2023 即可:

  • 登录后台,查看/删除所有文件
  • 伪造任意JWT token(因为这是签名密钥),绕过登录直接访问API
  • 如果管理员改了密码但实例未重启,旧JWT token仍然有效(密钥来自 settings.admin_token

代码位置

core/settings.py L42:

"admin_token": "FileCodeBox2023",

apps/admin/views.py — 密码验证:

if not verify_password(data.password, settings.admin_token):
    raise HTTPException(status_code=401, detail="密码错误")

apps/admin/dependencies.py — JWT签名:

signature = hmac.new(
    settings.admin_token.encode(), f"{header}.{payload}".encode(), "sha256"
).digest()

建议修复

  1. 安装时生成随机 admin_token,写入环境变量或配置文件
  2. 或强制用户在首次启动时设置
  3. JWT签名密钥应与登录密码分离

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions