CIB seven 2.2.4 EE - Release Notes
Release Date: October 17, 2026
Highlights
- Security The task filter expression whitelist is now enabled by default
- Security The initial setup that creates the first administrator is now only offered on an unconfigured engine
- Security AI Agent Connector chat memory is now persisted as a process variable, so a conversation can no longer be read from another process instance and survives engine restarts and replicas
- Security Process descriptions and warning messages are now rendered as text instead of HTML, closing a stored cross-site scripting (XSS) issue
- Security 14 CVEs resolved (1 Critical, 6 High, 6 Medium, 1 Low) in
jackson(jackson-core,jackson-databind),lz4-java,freemarker, andzlib, through the dependency and Alpine base image updates below - Variables Users with read-only permissions can now view variable values without entering edit mode, and
Bytesvariables can be downloaded and uploaded as files - Direct Provider Fixed paging, runtime instance counts, the user operation log, and process instance termination when the webclient accesses the engine directly
- Logging The engine now uses
SLF4J2 - Migration (EE exclusive) Fixed the migration wizard’s query mode migrating instances that did not match the applied filter
- Process Instance Search (EE exclusive) The “With incidents” criterion in the history search now only matches instances with a currently open incident
- Process Modification (EE exclusive) When modifying multiple instances, the instance search is now preset to the instances at the activity being cancelled
Breaking Changes
- The task filter expression whitelist is now enabled by default. Task filter expressions outside the whitelist are rejected with HTTP 400. In the Tasklist, a stored filter that uses such an expression shows an error instead of the task list. See Patch Level Update for how to find affected filters before updating
- The initial setup that creates the first administrator is now only offered while the identity service is writable, holds no users, groups or authorizations, and no administrators are configured besides
camunda-admin. An installation that has users, groups or authorizations but no administrator no longer gets the setup and must configure its administrator viaadmin-useroradminUsers. A fresh database still gets the setup - An AI Agent Connector
memoryIdis now scoped to one process instance: it no longer continues a conversation in another process instance, including one started by a call activity. AmemoryIdmay be at most 222 characters long - The engine now manages
SLF4J2 (slf4j-api2.0.18,logback1.5.38) instead ofSLF4J1.7. Applications that embed the engine with anSLF4J1.x binding must switch to anSLF4J2 provider, e.g.log4j-slf4j2-implinstead oflog4j-slf4j-impl. The CIB seven Run distributions already usedSLF4J2
Configuration Changes
- The default of the process engine property
enableFilterExpressionWhitelistchanged fromfalsetotrue. Setting it tofalserestores the previous behavior (not recommended). UseallowedFilterExpressionsto allow additional expressions - New AI Agent Connector property
cibseven.connect.ai-agent.chatMemoryVariable.enabled(environment variableCIBSEVEN_CONNECT_AI_AGENT_CHAT_MEMORY_VARIABLE_ENABLED, defaulttrue). Setting it tofalserestores the JVM-local chat memory store and with it the cross-instance disclosure (not recommended) - New AI Agent Connector property
cibseven.connect.ai-agent.chatMemoryMaxPayloadByteslimits the size of the persisted chat memory (default 1 MiB) - The unused, deprecated webclient permission keys
deleteProcessInstanceanddeleteHistoricProcessInstancewere removed fromconfig.json, the built-in defaults and the Helm values. Configurations that still contain them are not affected
New Features
Variables
- In the Variables tab of a process instance, each variable now offers either Edit or View. View opens the variable dialog read-only, so users with read permissions only can inspect variable values without entering an editable state. Add, Edit, Upload and Delete are shown only with the matching permission
- Variables of type
Bytesare no longer shown asnull; their value can now be downloaded and uploaded as a file, with the file name sanitized
Tasklist on Mobile Devices
- Optimized the task list, filter panel and task header navigation for mobile devices: selecting a filter now opens its task list and closes the filter panel in one step
User Experience Improvements
Authorizations
- Batch authorizations now offer the
CREATE_BATCH_DELETE_DEPLOYMENTSandCREATE_BATCH_CORRELATE_MESSAGEpermissions; the misspelledUDPATEentry was removed
Preferences
- The number format setting for BPMN diagrams is now shown only to users with Cockpit access, with user-specific
DENYauthorizations correctly overriding group-wideGRANTauthorizations
Process Modification (EE exclusive)
- When modifying multiple instances from the process definition view, the instance search is now preset to the instances that are active at the activity being cancelled
Batch Operations (EE exclusive)
- Batch operations the user has no permission for are no longer shown, and a “No permissions” warning appears when the user may not run any batch operation
- Batch operations no longer require the
UPDATEpermission; the “delete deployments” and “correlate message” batch operations are checked against the newCREATE_BATCH_DELETE_DEPLOYMENTSandCREATE_BATCH_CORRELATE_MESSAGEpermissions - The “Set removal time to historic batches” batch operation now applies the selected sort order to its batch list
Process Instance Search (EE exclusive)
- The process instance search menu entry now opens the runtime search when the history level is
none, and the history search otherwise - The process instances table shows the stop and delete history actions according to the user’s permissions, and also offers to delete the history of internally terminated instances
Variables (EE exclusive)
Bytesvariables can now be downloaded from the variable log dialog
Bug Fixes
Security
- Task filter JUEL expressions could still invoke arbitrary functions, methods or beans unless the whitelist introduced in 2.2.2 was enabled explicitly. It is now enabled by default and also accepts the expressions suggested by the Tasklist filter dialog
- The first-run setup could create a new administrator without any login on an engine that was already administered (administrators configured via
adminUsers/adminGroupsor granted through authorizations) but had an empty or missingcamunda-admingroup. The Admin app’s setup and the engine REST setup endpoint used by the webclient now share a single check that only allows the setup on an unconfigured engine. Engines using the LDAP plugin remain excluded - Process descriptions and warning messages are now rendered as text instead of HTML, so crafted content in a deployed BPMN model can no longer execute script in the browser of users who open it
- The webclient no longer logs the full authentication response, including the token, to the browser console after login
AI Agent Connector
- The chat memory was a JVM-wide map keyed only by
memoryId, so another user could read a conversation by reusing itsmemoryIdin a different process instance; conversations were also lost on restart and not shared between replicas. The conversation is now stored in the process variablecibseven-connect-ai-agent-memory_<memoryId>at process instance scope - Concurrent branches that share one
memoryIdnow log a warning, andAgentChatMemoryStore.clear()now fails outside an engine command instead of silently clearing only an in-memory buffer
Variables
- Fixed deleting a historic variable requiring a permission the engine does not have, so only users with
ALLsaw the button; it now requiresDELETE_HISTORYon the process definition - Deleting a runtime variable now requires the same permissions as the engine:
UPDATE_VARIABLEorUPDATEon the process instance, orUPDATE_INSTANCE_VARIABLEorUPDATE_INSTANCEon the process definition - Process instance authorizations are now matched against the process instance id; previously only grants on
*were taken into account - The “Stop instance” button now requires
DELETEon the process instance orDELETE_INSTANCEon the process definition, as the engine does
Tasklist
- Fixed creating a filter with comma-separated “Candidate groups” failing with HTTP 500
- Fixed the filter counter counting tasks that the task list then hid; the list now shows all tasks returned by the engine without an additional client-side permission check
Process Instances
- Fixed the activity-scoped incidents list being empty for external task incidents
- Fixed the list of called process instances and definitions being incomplete
Direct Provider
- Fixed incident and external task queries ignoring
firstResult/maxResultsand returning the full result set; on a process definition with many incidents this could crash the browser tab with an out-of-memory error - Fixed the runtime process instance count returning the number of historic process instances
- Fixed the user operation log not being written when engine authorization is disabled
- Stopping a process instance now marks it as externally terminated, as with the REST provider, so the process instance search offers to delete its history
- Fixed an error when opening a historic process instance, runtime results not keeping the runtime query’s order, and incidents not being loaded for runtime process instances
LDAP
- Fixed
LdapUserProvidernever closing the LDAP directory contexts and search results it opened during login, user lookup and token verification. Each open context kept a socket and a reader thread alive, consuming memory outside the Java heap that counts against the container limit
Spring Configuration
- Removed a duplicate
PropertySourcesPlaceholderConfigurerbean from the webclient’s Spring context. Spring Boot registers its own, and the second bean caused property placeholders to fall back to theEnvironmentand prevented applications from declaring their own placeholder configurer
Migration (EE exclusive)
- Fixed the migration wizard’s query mode migrating all instances of the process definition instead of only those matching the applied filter (e.g. “With incidents”); the instance list and count now use the same runtime query that is sent to the migration
Process Instance Search (EE exclusive)
- Fixed the “With incidents” criterion in the history process instance search also matching instances whose incident had already been resolved; it now filters by open incidents only
- With the Direct Provider, the process instance search now loads incidents directly from the engine instead of over the REST API, which failed with a generic error when the REST API does not accept the webclient’s authentication
Technical Updates
Dependency Updates
- Update
jackson(jackson-core,jackson-databind) from2.21.5to2.21.7, resolving multiple vulnerabilities (see Resolved CVE Vulnerabilities below) - Update
jackson3 from3.1.5to3.1.7 - Update the
jackson-coreandjackson-databindmodules bundled with WildFly (mainslot) from2.21.5to2.21.7(WildFly distribution) - Update
lz4-javafrom1.11.1to1.11.4(WildFly distribution), resolving multiple vulnerabilities (see Resolved CVE Vulnerabilities below) - Update
freemarkerfrom2.3.31to2.3.35, fixingCVE-2026-84939 - Update
slf4j-apifrom1.7.26to2.0.18 - Update
logbackfrom1.2.13to1.5.38 - Update
springdoc-openapifrom2.8.13to2.9.1(Spring Boot 3) and from3.0.2to3.0.3(Spring Boot 4) - Update
swagger-uifrom5.32.6to5.32.14 - Update
zlibfrom1.3.2-r0to1.3.2-r1(Alpine base image), fixingCVE-2026-85091
Resolved CVE Vulnerabilities
Critical Severity
- CVE-2026-84939 - Path traversal in Apache FreeMarker’s template loading when an attacker can supply a malformed locale identifier and localized lookup is enabled, which it is by default. Affects
org.freemarker:freemarker. - CVSS 9.1.
High Severity
- CVE-2026-106451 - Vulnerability in
lz4-javafixed in version1.11.4. Affectsat.yawk.lz4:lz4-java. - CVSS 7.0. - CVE-2026-68497 - An unauthenticated attacker can send a request of a few megabytes with an oversized
Durationvalue (e.g.Pfollowed by several million digits andY) to force tens of seconds to several minutes of single-threaded CPU work per request, so a handful of concurrent requests can saturate the server. Affectscom.fasterxml.jackson.core:jackson-databind. - CVSS 7.5. - CVE-2026-89407 - Attacker-supplied JSON deserialized into a numeric type (
BigDecimal,BigInteger,Double,Float) reaches a vulnerable number-parsing method through jackson-databind’s default String-to-number coercion. Affectscom.fasterxml.jackson.core:jackson-core. - CVSS 7.5. - CVE-2026-89425 -
UTF8DataInputJsonParser._reportInvalidToken()builds the offending-token text for its error message in a loop with no upper bound. Affectscom.fasterxml.jackson.core:jackson-core. - CVSS 7.5. - CVE-2026-91776 -
TypeDeserializerBase._findDeserializer()caches resolved deserializers under the raw, attacker-supplied type ID. Affectscom.fasterxml.jackson.core:jackson-databind. - CVSS 7.5. - CVE-2026-91777 - Vulnerability exploitable when an application deserializes attacker-influenced JSON into an identity-enabled collection or map. Affects
com.fasterxml.jackson.core:jackson-databind. - CVSS 7.5.
Medium Severity
- CVE-2026-106450 -
LZ4FrameInputStream.readHeader()allocates two new 4 MiB block buffers for every maximum-block-size frame header, so an attacker-controlled stream of many minimal empty frames triggers excessive memory allocation. Affectsat.yawk.lz4:lz4-java. - CVSS 5.3. - CVE-2026-106452 -
LZ4BlockInputStream.refill()allocates a compressed-input buffer of the attacker-controlled size from a legacy block header before reading any payload, so a header-only stream can request a near-2 GiB allocation. Affectsat.yawk.lz4:lz4-java. - CVSS 5.3. - CVE-2026-106453 -
LZ4DecompressorWithLengthtrusts the four-byte decompressed-length header before validating the compressed input, so a five-byte input can request up to approximately 2 GiB and exhaust the JVM heap. Affectsat.yawk.lz4:lz4-java. - CVSS 5.3. - CVE-2026-19032 - The deserializer for
java.nio.file.Pathresolves an attacker-supplied URI without restricting the URI scheme. Affectscom.fasterxml.jackson.core:jackson-databind. - CVSS 5.3. - CVE-2026-83557 - Attacker-controlled input can instantiate objects, e.g. a
java.io.Filefor an arbitrary path, which becomes path-traversal-adjacent if the application then calls path-sensitive methods on the value. Affectscom.fasterxml.jackson.core:jackson-databind. - CVSS 5.6. - CVE-2026-85091 - Heap buffer overflow in
gz_vacate()when processing non-blockinggzwrite()operations with stale external buffer pointers (zlib1.3.1.2through1.3.2). Affectszlib.
Low Severity
- CVE-2026-106449 -
LZ4BlockInputStreamwithstopOnEmptyBlockset tofalserecursively callsrefill()for each empty block, so a long sequence of empty blocks in an attacker-controlled stream can exhaust the decoding thread’s stack. Affectsat.yawk.lz4:lz4-java. - CVSS 3.7.