CAMEL-23496: docs - add a project-level security model document#23181
Merged
Conversation
Introduce docs/user-manual/modules/ROOT/pages/security-model.adoc that documents the Camel threat model: who is trusted (committers, route authors, deployment operators), where the trust boundary sits (between the route plus its configuration and the data flowing through it), which vulnerability classes the PMC accepts as framework issues, which categories are out of scope (route-author or operator responsibility, explicit opt-ins, DoS through unthrottled routes, third-party transitive CVEs not reachable through Camel), and what operators and committers are expected to do. In-scope and out-of-scope lists are anchored in the project's accepted CVE history (~40 advisories) so each rule has a concrete precedent: unsafe deserialisation, XXE, expression/template injection, path traversal, SSRF via parser resolution, Camel-header / bean-dispatch abuse, auth bypass in AAA components, information disclosure, insecure defaults, injection into back-end queries. The document is referenced from three places: a NOTE block at the top of the existing user-manual security.adoc, a new "Security Model" section in AGENTS.md, and a pointer paragraph in SECURITY.md. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Contributor
|
🌟 Thank you for your contribution to the Apache Camel project! 🌟 🐫 Apache Camel Committers, please review the following items:
|
apupier
approved these changes
May 13, 2026
squakez
approved these changes
May 13, 2026
Contributor
squakez
left a comment
There was a problem hiding this comment.
Great write up! Thanks for putting it together!
Contributor
|
🧪 CI tested the following changed modules:
|
davsclaus
reviewed
May 13, 2026
Co-authored-by: Claus Ibsen <claus.ibsen@gmail.com>
- prod is the default profile in Camel main; invert the hardening bullet so it reads as "stay on prod" rather than "set profile to prod", and call out that switching to dev/test is the explicit opt-in to development-only behaviour. - Drop the obsolete org.apache.camel.* header prefix from the Java example and the committer checklist; the prefix is a Camel v1 leftover and is no longer emitted by core consumers. - Spell out that DefaultHeaderFilterStrategy is case-insensitive out of the box (Camel, CAMEL, caMEL filtered identically) and that custom HeaderFilterStrategy implementations must either extend the default or implement the same behaviour. - Add a hardening bullet on minimal dependencies (only the Camel components and 3rd-party JARs the application actually uses). - Strengthen the reporting section: do not disclose on mailing lists, social media or any other public channel until a coordinated fix is released; report through the ASF Security team. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Croway
approved these changes
May 13, 2026
This was referenced May 13, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Adds a project-level security/threat-model document for Apache Camel, modelled on the equivalent
work in Apache Airflow (airflow/AGENTS.md#security-model,
security_model.rst).
It gives security reporters, committers reviewing PRs, deployment operators and automated triage
tooling an authoritative scope statement.
Jira: https://issues.apache.org/jira/browse/CAMEL-23496
What's in the document
trusted; external message senders (HTTP, JMS, file, SMTP, CoAP, Kafka, …) are the primary
attacker model. The fundamental trust boundary sits between the route plus its configuration
(trusted) and the data flowing through the route (untrusted).
precedent: unsafe deserialisation, XXE, expression/template injection, path traversal, SSRF
via parser resolution, Camel-header / bean-dispatch abuse, auth bypass in AAA components,
information disclosure, insecure defaults, injection into back-end queries built by Camel.
.bean,.process,simple/groovyonuntrusted input is a route-author bug), explicit opt-ins like
allowJavaSerializedObject=trueor
trustAllCertificates=true, DoS through unthrottled routes, exposure ofcamel-management/ dev console / Jolokia / JMX on a public network, third-party transitiveCVEs not reachable through Camel, and automated scanner reports with no PoC.
internal headers, and aggregation-repository trust assumptions.
prodprofile, vaults, JSSE Utility,Camel-internal header stripping at the trust boundary, no Java serialisation on untrusted
consumers, management surfaces off the public network, minimal dependency surface).
HeaderFilterStrategymandatory on consumers,ObjectInputFiltermandatory in persistentstate,
@UriParam(security = "...")for risky knobs, no default relaxations without anupgrade-guide entry.
Files changed
docs/user-manual/modules/ROOT/pages/security-model.adoc(new) — canonical document.docs/user-manual/modules/ROOT/pages/security.adoc— adds a NOTE block at the top of theexisting security feature catalog pointing to the new model.
AGENTS.md— adds a top-level "Security Model" section between the rules of engagement andthe structure overview, summarising the trust model and review checklists inline for agents
reading the file.
SECURITY.md— adds a pointer paragraph after the vulnerability-reporting line.Why now
rule for what counts as a vulnerable default:
camel-coap(CVE-2026-33453),camel-mail(CVE-2026-33454), andcamel-jms/camel-sjms/camel-google-pubsub(CVE-2026-40453).ObjectInputStreamin aggregation repositories — CVE-2024-22369 (camel-sql)triggered CVE-2024-23114 (
camel-cassandraql), CVE-2026-25747 (camel-leveldb),CVE-2026-27172 (
camel-consul) and CVE-2026-40858 (camel-infinispan).allowJavaSerializedObject=true,trustAllCertificates=true, orBeandispatch onattacker-controlled input requires re-explaining the trust boundary per-report.
need an authoritative document to decide whether a finding is in scope.
Out of scope for this PR
HeaderFilterStrategyto a still-vulnerable consumer, or installing
ObjectInputFilteron a specific aggregationrepository remain individual CVE / improvement tickets.
severe it is.
Review path
review on both the trust assumptions and the in-scope / out-of-scope category definitions.
PMC members who aren't reviewing GitHub PRs get a chance to weigh in.
Changelog
UI commit-suggestion.
prodprofile in production (it's the default;dev/testare theopt-in to development-only behaviour). Verified against
MainConfigurationProperties.setProfileJavadoc.org.apache.camel.*header prefix from the Java example and thecommitter checklist (Camel v1 leftover, no longer emitted by core consumers).
DefaultHeaderFilterStrategyis case-insensitive out of the box (Camel,CAMEL,caMELfiltered identically) and that custom strategies must extend the defaultor implement the same behaviour.
any other channel; report through the ASF Security team.
Test plan
xref:security.adoc,xref:camel-configuration-utilities.adoc)resolve to existing pages in the user manual.
AGENTS.mdandSECURITY.mduse relative repo paths so they resolveboth on GitHub and in local checkouts.
MainConfigurationPropertiesdefaultprofile,
DefaultHeaderFilterStrategycase-insensitivity, absence oforg.apache.camel.*header emission in core consumers).
Claude Code on behalf of Andrea Cosentino