CVE-2026-67340:ArcadeDB虚拟机脚本触发器可远程命令执行(CVSS 9.8)

事件概述

2026 年 7 月 16 日,ArcadeData 官方通过 GitHub Security Advisory(GHSA-x9f9-r4m8-9xc2)公布了 ArcadeDB 发行版本 26.7.2 之前的一个高危漏洞,NVD 于 2026-08-01 给出 CVE 编号 CVE-2026-67340,2026-08-03 被 CISA-ADP 加入资产调度记录。该漏洞被 VulnCheck 评定为 CVSSv3.1 9.8(严重)、CVSSv4.0 9.3(严重),依然是资产库场景下极少见的“未授权 RCE”质量。

ArcadeDB 是一款支持图、文档、锡值与树型数据的多模型 NoSQL 数据库,广泛用于快速原型验证、实时推荐、边缘计算、知识图谱等场景。本次漏洞出现在它的 arcadedb-engine 组件中的脚本触发器执行器(ScriptTriggerExecutor)。

技术细节

ArcadeDB 允许在表上创建受驱动的脚本(trigger),默认使用 GraalVM 中的 JavaScript 引擎执行。为了让脚本能够调用部分宿主机 Java API,ScriptTriggerExecutor 在 allowedPackages 中包含了 java.lang.*java.util.*java.time.*java.math.*,同时将主机访问氡权设为 HostAccess.ALL

问题在于,java.lang.Runtime.getRuntime().exec(...) 依然可以被调用。具体构造路径为。

  • 创建一个 JavaScript 触发器,代码中使用 Java.type("java.lang.Runtime") 获取主机 JVM 中的 Runtime 类;
  • 调用 Runtime.getRuntime().exec(["id"])new ProcessBuilder(...).start() 运行任意系统命令;
  • 随后向该表插入一条记录触发触发器,服务器进程权限下的代码就会被执行。

ArcadeDB 官方本意设置的反射黑名单以及 allowCreateProcess(false) 都不能阻止该调用:黑名单不能阻止 Java.type 主机类查找,而 allowCreateProcess(false) 仅限制 GraalVM 自身的客户端进程 API,不会影响通过 java.lang.Runtime 调用的主机进程。

问题的另一个难点是权限阈值太低:创建触发器只需要 UPDATE_SCHEMA 权限(schema admin),仓位严格低于安全管理员。这意味着在典型多租户场景下,任何具有表结构修改权的帐号都可以植入钔钉。

SecureLayer7 已在公开博客中发布 PoC,仅需两条 SQL 语句即可在服务器上调用 id、读取任意文件:

-- 步骤1:创建钔钉触发器(需 UPDATE_SCHEMA 权限)
CREATE TRIGGER rce_trigger ON Document AFTER INSERT
  EXECUTE JAVASCRIPT 'var RT = Java.type("java.lang.Runtime");
                     var p = RT.getRuntime().exec(["id"]);
                     var is = p.getInputStream();
                     var sc = Java.type("java.util.Scanner");
                     var out = new sc(is).useDelimiter("\A").next();
                     out;'
-- 步骤2:插入记录点火触发器
INSERT INTO Document SET x = 1

影响评估

  • 严重性评分:CVE-2026-67340 在 NVD CVSSv3.1 上评定为 9.8(严重),CVSSv4.0 为 9.3,CWE-94(代码注入)。全局可用性已被 CISA-ADP 加入 SSVC 记录并标记为“可自动化、技术影响为总体”。
  • 利用复杂度:低。需要 UPDATE_SCHEMA 权限,但该权限常作为普通 DBA 账号标配,多租户 SaaS 场景下不可避免。
  • 实际危害:受影响产品包括但不限于全球开发者开发的测试环境、在线推荐、边缘计算后端。与传统 SQL 注入不同,本漏洞允许跨语言调用主机 JVM,能直接获取服务器 shell。与漏洞同场揭示的还有 IMPORT DATABASE 的 SSRF、BACKUP/EXPORT DATABASE 缺乏授权、包体体积限制绕过等伴随问题。

修复建议

  1. 立即升级:升级到 arcadedb-engine 26.7.2 或更高版本。该补丁从 allowedPackages 中删除了 java.lang.*,仅保留 java.util.*java.time.*java.math.*,这些包中不含可执行原语。
  2. 调整权限阈值:若需保留触发器能力,将创建触发器的门槛从 UPDATE_SCHEMA 提升到 UPDATE_SECURITY,限定仅安全管理员可创建。
  3. 主机访问氡权改造:HostAccess.ALL 改为 HostAccess.EXPLICIT,与其依赖一个明确的 @HostAccess.Export API 面向脚本暴露,避免“整包允许”的设计。
  4. 计量脚本汇总扫描:检查库中现有触发器,对使用 Java.typejava.lang.RuntimeProcessBuilder 的脚本进行审计并重新生成。
  5. 网络层隔离:将 ArcadeDB 端口限定在可信以太网/VPN 中,拒绝公网直接访问;打开访问日志,以便对发生异常触发器创建、插入请求进行告警。

参考来源