Andrea Cosentino created CAMEL-23609:
----------------------------------------

             Summary: Tighten in-code ObjectInputFilter defaults with JEP-290 
graph-shape limits
                 Key: CAMEL-23609
                 URL: https://issues.apache.org/jira/browse/CAMEL-23609
             Project: Camel
          Issue Type: Improvement
          Components: camel-infinispan, camel-mina, camel-netty, camel-leveldb, 
camel-jms, camel-netty-http, camel-vertx-http, camel-sjms, camel-cassandraql, 
camel-consul, camel-sql
            Reporter: Andrea Cosentino
            Assignee: Andrea Cosentino
             Fix For: 4.21.0


Follow-up to the CAMEL-23297 / CAMEL-23319 / CAMEL-23321 / CAMEL-23322 / 
CAMEL-23324 / CAMEL-23372 series, which introduced an in-code default 
{{ObjectInputFilter}} across components that perform Java deserialization 
(aggregation repositories, on-the-wire converters, exchange holders).

The current in-code default is a class-pattern allowlist:

{noformat}
!java.net.**;java.**;javax.**;org.apache.camel.**;!*
{noformat}

{{ObjectInputFilter}} (JEP 290) supports additional structural clauses that the 
current defaults do not use: {{maxdepth}}, {{maxrefs}}, {{maxbytes}}, 
{{maxarray}}, {{maxinternalrefs}}. Adding conservative values for these to the 
in-code defaults provides defense in depth so that operators who have not set 
{{-Djdk.serialFilter}} still get sensible graph-shape limits out of the box.

Operators retain the existing override path:

* JVM-wide {{-Djdk.serialFilter}} takes precedence over the Camel default in 
every site that ships one.
* The configurable repositories and endpoint configurations 
({{LevelDBAggregationRepository}}, {{JdbcAggregationRepository}}, 
{{CassandraAggregationRepository}}, {{ConsulRegistry}}, {{JmsConfiguration}}, 
{{SjmsComponent}}, {{NettyHttp}} / {{VertxHttp}} configuration, etc.) already 
expose a {{deserializationFilter}} {{@UriParam}} that lets a route author pass 
a fully custom filter string including the structural clauses.

Affected default-filter sites:

* 
{{components/camel-infinispan/camel-infinispan/.../DefaultExchangeHolderUtils.java}}
* {{components/camel-jms/.../JmsBinding.java}}
* {{components/camel-sjms/.../jms/JmsBinding.java}}
* {{components/camel-mina/.../MinaConverter.java}}
* {{components/camel-netty/.../NettyConverter.java}}
* {{components/camel-netty-http/.../NettyHttpHelper.java}}
* {{components/camel-vertx/camel-vertx-http/.../VertxHttpHelper.java}}
* {{components/camel-leveldb/.../LevelDBAggregationRepository.java}}
* {{components/camel-cassandraql/.../CassandraAggregationRepository.java}}
* {{components/camel-consul/.../ConsulRegistry.java}}
* {{components/camel-sql/.../JdbcAggregationRepository.java}}

Proposed defaults (subject to review):

{noformat}
!java.net.**;java.**;javax.**;org.apache.camel.**;maxdepth=20;maxrefs=10000;maxbytes=10485760;!*
{noformat}

Tests should confirm:

* Legitimate aggregation payloads continue to deserialize.
* The new structural clauses are present in the resolved filter.
* The JVM-wide {{-Djdk.serialFilter}} still takes precedence when set.

An upgrade-guide entry on {{main}} is required because the tightened defaults 
may reject extremely deep / very-large legitimate payloads on first upgrade. 
The entry should explain the new defaults, list the override options, and note 
that operators can restore the previous behaviour per endpoint via the 
{{deserializationFilter}} option or JVM-wide via {{-Djdk.serialFilter}}.

h3. Acceptance criteria

* New defaults applied consistently across all sites above.
* Tests added at each site asserting that the resolved {{ObjectInputFilter}} 
contains the structural clauses.
* JVM-wide {{-Djdk.serialFilter}} precedence preserved.
* Upgrade-guide entry on {{main}} (and the matching 
{{camel-4x-upgrade-guide-4_XX.adoc}} for any backport line that picks this up).



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to