This release includes 4 security fixes for security teams reviewing exposed deployments.
Topics
+10 more
Affected surfaces
ReleasePort's take
Moderate signalArcadeDB 26.6.1 hardens security by adding UPDATE_SCHEMA permission checks for schema mutators and requiring admin privilege for IMPORT DATABASE, which blocks SSRF/LFI risks.
Why it matters: Security updates enforce UPDATE_SCHEMA permission and admin‑only import validation; operators with privileged accounts must review access controls to prevent unauthorized schema changes or malicious database imports.
Summary
AI summaryBroad release touches SQL, Studio & Operations, High Availability & Clustering, and Major Highlights.
Changes in this release
| Type | Severity | Summary | CVE |
|---|---|---|---|
| Security | Critical |
All LocalDocumentType/LocalProperty schema mutators now require UPDATE_SCHEMA permission. All LocalDocumentType/LocalProperty schema mutators now require UPDATE_SCHEMA permission. Source: llm_adapter@2026-06-03 Confidence: high |
— |
| Security | Critical |
IMPORT DATABASE now validates source and requires admin privilege, closing SSRF/LFI vectors. IMPORT DATABASE now validates source and requires admin privilege, closing SSRF/LFI vectors. Source: llm_adapter@2026-06-03 Confidence: high |
— |
| Feature | Medium |
TLS/SSL support added for HA cluster inter‑node replication and snapshot download over HTTPS. TLS/SSL support added for HA cluster inter‑node replication and snapshot download over HTTPS. Source: llm_adapter@2026-06-03 Confidence: high |
— |
| Dependency | Low |
Netty upgraded to 4.2.14.Final, Undertow to 2.4.1.Final, Protobuf to 4.35.0, and several other libraries updated. Netty upgraded to 4.2.14.Final, Undertow to 2.4.1.Final, Protobuf to 4.35.0, and several other libraries updated. Source: llm_adapter@2026-06-03 Confidence: high |
— |
| Bugfix | High |
SQL injection in RemoteVertex.newEdge fixed by switching to parameter binding. SQL injection in RemoteVertex.newEdge fixed by switching to parameter binding. Source: llm_adapter@2026-06-03 Confidence: high |
— |
| Bugfix | High |
WAL is now fsynced on commit by default, and data files are fsynced before WAL deletion on clean close. WAL is now fsynced on commit by default, and data files are fsynced before WAL deletion on clean close. Source: llm_adapter@2026-06-03 Confidence: low |
— |
| Bugfix | High |
Crash recovery now aborts on a WAL version gap and preserves the WAL files instead of silently skipping. Crash recovery now aborts on a WAL version gap and preserves the WAL files instead of silently skipping. Source: llm_adapter@2026-06-03 Confidence: low |
— |
| Bugfix | Medium |
`IN :param` with a collection parameter now returns rows when an index is used in SQL. `IN :param` with a collection parameter now returns rows when an index is used in SQL. Source: llm_adapter@2026-06-03 Confidence: low |
— |
| Bugfix | Medium |
`MOVE VERTEX` no longer generates an internal error. `MOVE VERTEX` no longer generates an internal error. Source: llm_adapter@2026-06-03 Confidence: low |
— |
| Bugfix | Medium |
`MERGE` on a UNIQUE‑indexed property no longer throws `DuplicatedKeyException` when the same key appears twice in a batch. `MERGE` on a UNIQUE‑indexed property no longer throws `DuplicatedKeyException` when the same key appears twice in a batch. Source: llm_adapter@2026-06-03 Confidence: low |
— |
Full changelog
ArcadeDB 26.6.1 Release Notes
Overview
ArcadeDB 26.6.1 is a stability, durability and security hardening release with over 280 commits and 66 resolved issues. The headline news is end-to-end TLS/SSL for the HA cluster, a deep wave of durability and crash-recovery hardening across the WAL, page and serialization layers, and a broad security hardening pass (schema authorization, IMPORT DATABASE source validation, injection fixes and a full CodeQL cleanup). On top of that comes a long list of High Availability / Raft, OpenCypher, SQL, vector index and wire-protocol fixes, plus Studio and operational improvements.
Major Highlights
TLS/SSL Across the HA Cluster
The Raft-based HA cluster can now run fully encrypted. Inter-node replication traffic supports SSL/TLS, and the snapshot installer was fixed so a follower can download a leader snapshot over the HTTPS listener instead of crashing with Unsupported or unrecognized SSL message. (#4470)
Durability & Crash-Recovery Hardening
A large batch of fixes closes data-integrity gaps in the storage, WAL and serialization layers so committed transactions survive crashes and power loss, and recovery never silently drops data:
- WAL is now fsynced on commit by default, and data files are fsynced before WAL files are deleted on clean close. (#4330, #4332)
- Crash recovery now aborts on a WAL version gap and preserves the WAL files instead of silently skipping the gap. (#4331, #4320)
MutablePage.moveno longer mis-tracks the modified range on backward shifts, so defrag bytes are no longer omitted from the WAL. (#4319)- Binary serialization fixes: property count now matches the bytes written, and partial reads are handled via
readFully. (#4328, #4329) - Short-write / short-read returns are now respected in
PaginatedComponentFile. (#4321) - LZ4 compression no longer corrupts data when
Binary.position() > 0. (#4317) - Simple-8b codec validation no longer silently truncates
Long.MAX_VALUE/Long.MIN_VALUE. (#4336) migratedFileIdsis now persisted inschema.json, so compaction no longer silently drops in-flight transactions across restart. (#4333)java.lang.NegativeArraySizeExceptionon transaction commit fixed. (#4420)
Security Hardening
- All
LocalDocumentType/LocalPropertyschema mutators now require theUPDATE_SCHEMApermission (previously onlycreatePropertywas gated). (#4423) IMPORT DATABASEnow validates its source and requires admin privilege, closing SSRF / LFI vectors. (#4422)- SQL injection fixed in
RemoteVertex.newEdgeby switching to parameter binding (also fixes breakage on apostrophes). (#4327) - JavaScript injection in the polyglot engine closed by replacing the "looks-like-JSON" source-concatenation heuristic with
Value.execute(). (#4326) - Full CodeQL cleanup: open Java and JavaScript code-scanning alerts resolved at their true sources (workflow permissions, ReDoS, path-injection). (#4383, #4386, #4388)
Major Fixes
High Availability & Clustering
- TimeSeries data now replicates correctly across an HA cluster, and a compaction/append deadlock that caused a WAL version gap on Raft followers was eliminated. (#4414, #4458)
- Concurrent single-row time-series
INSERTs no longer silently lose samples (sealed-slot lost update). (#4453) - Bolt writes to a follower no longer fail with "no authenticated user in the current security context"; the authenticated user is now bound on
DatabaseContextin the Bolt executor. (#4456) PeerAddressAllowlistFilterno longer rejects legitimate peers during a Kubernetes DNS-resolution race (incomplete allowlist on startup/restart). (#4471)- Stale-follower recovery is fixed when a snapshot download fails on a quiet cluster.
- New configurable paths:
arcadedb.ha.raftStorageDirectoryfor the Raft storage directory (#4446), configurable server log directory for read-only root filesystems (#4451), andarcadedb.ha.clusterTokenPathto read the cluster shared secret from a file (#4431). RemoteDatabaseno longer reuses a session id across servers on HA failover during an open transaction; aTransactionExceptionis now raised on server switch. (#4373)RemoteHttpComponentno longer mutatesleaderServer/currentServernon-atomically during retries. (#4372)- New
STICKYstrategy pins HTTP transactions to a concrete cluster member. (#4273) getReplicaAddressesnow excludes the local peer instead of the leader. (#4274)/api/v1/server?mode=clusterreturns thehasection again after the Raft migration. (#4261)- New "Force Resync" button in Studio to recover a diverged follower from the leader.
- HA bootstrap-fingerprint replay race fixed, and HA node aliases corrected. (#4259)
- Massive-insertion cluster configuration issues resolved, plus assorted HA log improvements.
Concurrency & Async
FileManagerno longer mutates itsArrayList<ComponentFile>from multiple threads without synchronization (fixes CME / AIOOBE). (#4371)LockManager.tryLocknow re-attemptsputIfAbsentafter a wait timeout and tracks the remaining timeout per await. (#4367)DatabaseAsyncTransactionnow rolls back before retrying after aConcurrentModificationException, invokes the per-taskonErrorCallback, and no longer swallows final-retry failures or contaminates the shared transaction. (#4368, #4369, #4370)PageManager.putPageInReadCacheno longer leaks RAM accounting when replacing an existingCachedPage. (#4390)
OpenCypher
CREATE INDEXnow implicitly creates the referenced property (Neo4j-style lazy schema). (#4354)nodes(),relationships()andlength()on variable-length path patterns (e.g.[*1..3]) are now implemented. (#4353)- Records written via SQL are now visible to subsequent Cypher queries (and vice versa) within the same connection/transaction. (#4355)
EXPLAINno longer fails with an idempotency error on a multi-statement query containingCREATE. (#4366)- Label disjunction
(n:A|B)no longer returns 0 rows. (#4221) allShortestPaths()now returns all co-shortest paths instead of just one.MERGEnow uses a bound anchor as the traversal start instead of a full edge-type scan (performance), and no longer crashes on a single-quote property value withUNWINDor rebinds the variable from anOPTIONAL MATCHnull endpoint. (#4213, #4210)DATETIMEproperty comparison withdatetime()no longer returns 0 rows. (#4231)- Redundant
AND true/OR falsebranches are now simplified inWHEREclauses. (#4405) MATCH ... WHERE ID(n) IN $idsnow accepts along[]parameter array.- Query results are now consistent between parameterized and hard-coded values.
SQL
IN :paramwith a collection parameter now returns rows when an index is used. (#4468)MOVE VERTEXno longer generates an internal error. (#4461, #4347)expand()projection now honors itsASalias instead of always being namedvalue. (#4389)IN (SELECT …)no longer always returns empty (InConditionnow unwraps single-property results). (#4337)MERGEon a UNIQUE-indexed property no longer throwsDuplicatedKeyExceptionwhen the same key appears twice in a batch (Neo4j matches the second occurrence). (#4351)node.*andrel.*functions no longer silently return null/0 from SQL. (#4216)- TimeSeries timestamps are now returned in queries. (#4418)
- New
cypherRID(<cypher-rid>)SQL function andasCypherRID()method for interoperating with Cypher numeric ids. ResultInternal.getPropertyno longer re-surfaces removed properties via element fall-through. (#4398)EdgeLinkedList.removeVertex/removeEdgenow iterate all segments to remove every matching entry. (#4395)MultiIterator.countEntriesno longer discards the count for non-resettable iterables. (#4396)MATCHESnow keys its regexPatterncache by the regex string rather thanhashCode()(collision no longer returns the wrong pattern). (#4397)- Case conversions across the function library now use
Locale.ROOT. (#4393) RangeFunctionand the math functions are now guarded against long-range overflow / infinite loops. (#4391, #4392)CREATE INDEX ON ... (...)without an index type now raises a clear parsing error instead of an NPE.- Inserting edges between existing nodes with mandatory properties now works. (#4413)
- Multiple-inheritance handling fixed, and
point()over a latitude property surfaced as a string no longer throws aClassCastException. SEARCH_INDEX()negative Lucene clauses now return correct results. (#4220)
Vector & Index
TRUNCATE TYPEno longer resets anLSM_VECTORindex dimension to 0, nor leaves UNIQUE indexes in an inconsistent state requiringDROP TYPE. (#4359, #4352)LSMVectorIndexnow converts JVector's EUCLIDEAN return to L2² distance in all search paths, so K-NN no longer returns the worst matches first. (#4334)LSMVectorIndexCompactornow handles the old-format tombstone rewind correctly. (#4335)- NPE in
discoverAndLoadCompactedSubIndexthat prevented loading compacted vector sub-indexes at startup fixed. LSM_VECTORinactivity rebuild timer is now re-armed after a skip. (#4272)REBUILD INDEXnow works forBY ITEMindexes. (#4448)vector.fuse()is now recognised as a SQL function (no more "Unknown method name: fuse").
Wire Protocols
- Bolt: parameterized Cypher
MATCHqueries via the JavaScriptneo4j-drivernow work (#4452); integer property values are no longer coerced to strings afterCREATE INDEX, and index-backed lookups return rows. - PostgreSQL: scalar columns are now advertised with native OIDs. (#4202)
- gRPC: correct exceptions are now thrown (
NOT_FOUNDforRecordNotFoundExceptiononlookupByRid) (#4364);LocalDateTime/LocalDateand ISO-string fallback handled inProtoUtils(#4358);InsertStreamwithCONFLICT_IGNORE+PER_STREAMno longer rolls back the whole stream on a commit-time duplicate (#4214); null values are no longer returned as the string"null";count(*)field type is now consistent betweenRemoteDatabaseandRemoteGrpcDatabase; reloading a not-yet-committed record no longer errors. - HTTP:
PostCommandHandler"Cannot execute command" fixed (#4432); the redundant decode of command/query in the HTTP layer was removed;DuplicatedKeyExceptionnow returns HTTP409 Conflictinstead of503 Service Unavailable. (#4350)
Studio & Operations
- Optional production-mode Studio: a new global setting enables Studio in production on request. (#4417)
- New show/hide toggle for the Appearance section in the graph side panel. (#4394)
- AI assistant flow, database selection and layout improvements; query profiler "Analyze with AI"; refreshed server and profiler metrics.
MessageFormatplaceholders are now substituted in JUL log records. (#4275)- New offline build mode for the distribution builder, and Python bindings build-script / vector-handling refactor.
Dependencies
Notable upgrades in this release include:
- Netty 4.2.14.Final
- Undertow 2.4.1.Final
- Protobuf 4.35.0
- JLine 4.1.3
- JUnit Jupiter 6.1.0
- Jackson Databind 2.21.4
- Apache Commons Configuration 2.15.1
- Swagger 2.2.50 / Swagger Parser 2.1.43
- SLF4J 2.0.18
- Logback 1.5.33
- Jedis 7.5.2
Plus the usual round of Studio frontend updates (ApexCharts, SweetAlert2, SwaggerUI, Marked, PDFMake, PostCSS, Terser and the webpack/build toolchain), e2e test-harness bumps (Playwright, TestContainers, protobufjs), CI / GitHub Actions updates and pre-commit hook refreshes.
Breaking Changes
- TLS/SSL support for Raft‑based HA replication is now mandatory; all inter‑node traffic must use SSL/TLS (requires configuring `arcadedb.ha.sslEnabled=true` and appropriate certificates).
Security Fixes
- Schema mutators (`LocalDocumentType`, `LocalProperty`) now require the `UPDATE_SCHEMA` permission (previously unguarded).
- `IMPORT DATABASE` validates its source and requires admin privilege, closing SSRF/LFI vectors.
- SQL injection fixed in `RemoteVertex.newEdge` via parameter binding; JavaScript polyglot engine no longer permits injection by replacing heuristic concatenation with `Value.execute()`.
- Full CodeQL sweep resolves open Java/JavaScript alerts (workflow permissions, ReDoS, path‑injection).
Weekly OSS security release digest.
The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.
No spam, unsubscribe anytime.
Share this release
About ArcadeData/arcadedb
Built-in MCP server for ArcadeDB, a multi-model database (graph, document, key-value, time-series, vector) with SQL, Cypher, Gremlin, and MongoDB QL support.
Related context
Beta — feedback welcome: [email protected]