CVE-2026-59230: Apache Camel Header Injection Vulnerability in MimeMultipart
Executive Summary
CVE-2026-59230 is an improper input validation vulnerability affecting Apache Camel’s camel-mail component. When the MimeMultipart unmarshaler is configured with headersInline=true (a non-default setting), it copies arbitrary MIME header names directly into Camel Exchange headers without applying a HeaderFilterStrategy. This allows remote attackers to inject headers into Camel’s internal namespace (e.g., Camel*), potentially manipulating downstream components that rely on control headers for runtime behavior—such as camel-sql executing queries from header values.
Key Facts:
- Affected Versions: Apache Camel 2.17.0 through 4.22.0 (multiple release streams)
- Default Risk: Low—vulnerability only manifests with explicit non-default configuration
- Attack Vector: Remote, requires ability to send or influence MIME multipart messages
- Impact: Depends on downstream component usage; ranges from parameter tampering to unauthorized command execution
What is CVE-2026-59230?
Vulnerability Overview
CVE-2026-59230 is a header injection vulnerability in Apache Camel’s camel-mail component. The MimeMultipart data format, when configured to process headers inline, fails to validate or filter incoming MIME header names before copying them into the Camel message Exchange. This creates a pathway for attackers to inject headers matching Camel’s internal control header namespace.
The vulnerability is particularly concerning because:
- Silent Exploitation: Injected headers appear legitimate within the Camel routing context
- Downstream Propagation: Malicious headers flow through the entire route, affecting multiple components
- Configuration-Dependent: Only triggered when
headersInline=trueis explicitly set - Component-Agnostic: Impact depends on which downstream components read control headers
Affected Component and Versions
Vulnerable Versions:
- Apache Camel 2.17.0 through 4.14.8 (2.x/3.x/4.x streams)
- Apache Camel 4.15.0 through 4.18.3 (4.15.x stream)
- Apache Camel 4.19.0 through 4.21.x (main development stream)
Fixed Versions:
- Apache Camel 4.14.9 (LTS)
- Apache Camel 4.18.4 (4.18.x stream)
- Apache Camel 4.22.0 or later (main release)
Why This Matters for Your Infrastructure
Organizations running Apache Camel in production—particularly those processing email, file transfers, or other MIME-based message formats—need to assess their exposure immediately. The vulnerability’s impact scales with:
- Message Volume: High-throughput routes processing untrusted MIME content face greater exploitation risk
- Downstream Complexity: Routes with dynamic routing, SQL producers, or conditional logic are higher-risk targets
- Trust Boundaries: External-facing endpoints accepting MIME messages are primary attack surfaces
- Configuration Visibility: Many teams may not be aware of
headersInline=truesettings in inherited or legacy routes
Technical Breakdown
How the MimeMultipart Unmarshaler Works
The MimeMultipart data format in Apache Camel is designed to parse MIME multipart messages (commonly used in email and HTTP multipart form submissions). The unmarshaling process follows this sequence:
- Parse Incoming Payload: The unmarshaler reads the MIME message structure, identifying headers and body parts
- Extract Headers: All MIME headers are enumerated from the message
- Apply Filter Strategy (Conditional): Under normal circumstances, a
HeaderFilterStrategyfilters headers before they enter the Camel Exchange - Populate Exchange: Remaining headers are written to the message Exchange as Camel headers
Default Behavior (headersInline=false):
MIME Message → Parse → Extract Headers → Convert to Attachments → Exchange
Vulnerable Behavior (headersInline=true):
MIME Message → Parse → Extract Headers → [NO FILTER] → Direct to Exchange
The Header Injection Mechanism
When headersInline=true, the unmarshaler performs minimal filtering:
// Simplified vulnerable logic
for (Header mimeHeader : mimeMessage.getAllHeaders()) {
String headerName = mimeHeader.getName();
// Only three headers are excluded
if (!headerName.equals("Message-ID") &&
!headerName.equals("MIME-Version") &&
!headerName.equals("Content-Type")) {
// No HeaderFilterStrategy applied here
exchange.setHeader(headerName, mimeHeader.getValue());
}
}
An attacker can craft a MIME message with headers like:
From: attacker@example.com
To: victim@example.com
Camel-SQL-Query: DROP TABLE users;
X-Custom-Camel-Route: /admin/bypass
Subject: Legitimate Subject
These injected headers bypass filtering and enter the Camel Exchange directly, where downstream components may act on them.
Default vs. Non-Default Configuration Risk
Default Configuration (headersInline=false):
- MIME headers are converted to message attachments
- Headers do not populate the Camel Exchange header namespace
- No injection pathway exists
- Risk Level: Minimal
Non-Default Configuration (headersInline=true):
- MIME headers are copied directly to Exchange headers
- No
HeaderFilterStrategyvalidation occurs - Camel-internal header namespace is exposed to external input
- Risk Level: High (if downstream components use control headers)
Downstream Component Exploitation
The vulnerability’s impact depends entirely on what downstream components do with Exchange headers. High-risk scenarios include:
1. SQL Injection via camel-sql:
.unmarshal().mimeMultipart(true) // Vulnerable configuration
.to("sql:SELECT * FROM users WHERE id = :#${header.Camel-SQL-Query}")
An attacker injects Camel-SQL-Query: 1 OR 1=1 to bypass the intended query.
2. Dynamic Routing Hijacking:
.unmarshal().mimeMultipart(true)
.choice()
.when(header("Camel-Route-Override").isNotNull())
.to("direct:admin-panel") // Unintended destination
.otherwise()
.to("direct:user-panel")
3. Component Configuration Override:
.unmarshal().mimeMultipart(true)
.to("http:example.com?authenticationPreemptive=${header.Camel-Auth-Override}")
Real-World Attack Scenarios
SQL Command Injection via camel-sql
Scenario Setup:
- Organization runs an email processing service that extracts data from MIME attachments
- Route unmarshals MIME content with
headersInline=truefor performance reasons - Downstream
camel-sqlcomponent executes queries based on message content
Attack Execution:
- Attacker sends a crafted email to the processing endpoint:
From: attacker@example.com
Subject: Invoice Processing
Camel-SQL-Query: '; DROP TABLE invoices; --
Content-Type: multipart/mixed; boundary="boundary"
--boundary
Content-Type: text/plain
Invoice data here
--boundary--
- The route unmarshals the message with
headersInline=true - The
Camel-SQL-Queryheader is copied to the Exchange without filtering - The downstream SQL producer executes:
SELECT * FROM invoices WHERE id = ''; DROP TABLE invoices; --'
- The invoices table is deleted, causing data loss and service disruption
Impact: Data destruction, business logic bypass, potential compliance violations
Route Dispatch Hijacking
Scenario Setup:
- Multi-tenant SaaS platform uses Camel for message routing
- Routes use dynamic routing based on message headers to direct traffic to tenant-specific processors
headersInline=trueis enabled to preserve email metadata
Attack Execution:
- Attacker sends a message to a low-privilege tenant endpoint:
From: attacker@tenant-b.example.com
Camel-Tenant-ID: tenant-a
Camel-Route-Destination: /admin/billing
Subject: Legitimate Request
- The unmarshaler copies
Camel-Tenant-IDandCamel-Route-Destinationto the Exchange - A downstream dynamic router evaluates these headers:
.choice()
.when(header("Camel-Tenant-ID").isEqualTo("tenant-a"))
.to("direct:tenant-a-processor")
.when(header("Camel-Route-Destination").contains("admin"))
.to("direct:admin-panel")
- The message is routed to the admin panel instead of the intended tenant processor
- Attacker gains unauthorized access to administrative functions
Impact: Privilege escalation, unauthorized data access, cross-tenant data leakage
Control Flow Manipulation Attacks
Scenario Setup:
- Financial services firm uses Camel to process payment instructions from various sources
- Route includes conditional logic based on message headers to determine approval workflows
headersInline=trueis enabled for email-based payment submissions
Attack Execution:
- Attacker sends a payment instruction email:
From: attacker@example.com
Camel-Approval-Required: false
Camel-Amount-Limit: 999999
Subject: Payment Request
- The route processes the message:
.unmarshal().mimeMultipart(true)
.choice()
.when(header("Camel-Approval-Required").isEqualTo("true"))
.to("direct:approval-queue")
.otherwise()
.to("direct:process-payment")
- The injected
Camel-Approval-Required: falseheader bypasses the approval workflow - The payment is processed immediately without authorization checks
- Unauthorized funds transfer occurs
Impact: Financial fraud, regulatory violations, audit trail manipulation
Threat Assessment
Attack Prerequisites
An attacker must satisfy all of the following conditions to exploit CVE-2026-59230:
- Route Configuration: Target Camel route must use
MimeMultipartunmarshaling withheadersInline=true - Message Access: Attacker must be able to send or influence MIME multipart messages to the vulnerable endpoint
- Downstream Vulnerability: Route must contain downstream components that:
- Read and act on Exchange headers
- Use header values to determine runtime behavior (routing, SQL queries, component configuration)
- Lack independent input validation
- Trust Boundary: The vulnerable route must process messages from untrusted sources (external users, third-party systems, public APIs)
Threat Actor Capabilities
Required Capabilities:
- Ability to craft MIME multipart messages (basic technical skill)
- Knowledge of target system’s route structure and downstream components (reconnaissance)
- Access to an endpoint that accepts MIME messages (network access)
Threat Actor Profile:
- Skill Level: Low to Medium (basic MIME message construction)
- Access Level: Unauthenticated or low-privilege user
- Motivation: Data theft, service disruption, privilege escalation, financial fraud
Impact Severity by Configuration
| Configuration | Downstream Component | Impact Severity | Likelihood |
|---|---|---|---|
headersInline=true |
camel-sql with dynamic queries | Critical | High |
headersInline=true |
Dynamic routing based on headers | High | High |
headersInline=true |
HTTP producer with header-based auth | High | Medium |
headersInline=true |
Conditional processors | Medium | Medium |
headersInline=false (default) |
Any component | None | N/A |
Exploitation Complexity
Low Complexity Factors:
- No authentication required (if endpoint is public)
- MIME message format is well-documented
- Header injection is straightforward (add custom headers to MIME message)
- No special tools required (standard email clients or HTTP tools work)
Moderate Complexity Factors:
- Requires knowledge of target route structure
- Downstream component behavior must be understood
- Injected header names must match expected control header names
- May require multiple attempts to identify vulnerable headers
High Complexity Factors:
- Identifying which routes use
headersInline=true(requires code access or reconnaissance) - Understanding complex route logic with multiple conditional branches
- Crafting payloads that bypass downstream validation
Detection and Audit
Route Configuration Scanning
Automated Scanning Approach:
Search your codebase for vulnerable patterns:
# Java DSL
grep -r "headersInline(true)" --include="*.java"
grep -r "\.mimeMultipart.*true" --include="*.java"
# XML DSL
grep -r "headersInline=\"true\"" --include="*.xml"
grep -r "headersInline='true'" --include="*.xml"
# YAML DSL
grep -r "headersInline: true" --include="*.yaml" --include="*.yml"
Manual Code Review Checklist:
- [ ] Locate all
unmarshal().mimeMultipart()calls - [ ] Check if
headersInlineparameter is explicitly set totrue - [ ] Identify downstream components that read Exchange headers
- [ ] Verify if downstream components validate header values
- [ ] Assess if untrusted input can reach the vulnerable route
Dependency Version Checking
Maven-based Projects:
# Check camel-mail version
mvn dependency:tree | grep camel-mail
# Identify vulnerable versions
mvn dependency:tree | grep -E "camel-(mail|core).*:(2\.1[7-9]|3\.|4\.([0-9]|1[0-4]\.[0-8]|1[5-8]\.[0-3]|1[9-9]|2[0-1]))"
Gradle-based Projects:
// In build.gradle
configurations.all {
resolutionStrategy {
dependencySubstitution {
substitute module('org.apache.camel:camel-mail') using module('org.apache.camel:camel-mail:4.22.0')
}
}
}
SBOM Analysis:
- Generate Software Bill of Materials (SBOM) using tools like CycloneDX
- Parse SBOM for Apache Camel component versions
- Cross-reference against known vulnerable version ranges
Runtime Header Monitoring
Logging-Based Detection:
Add a processor immediately after vulnerable unmarshal steps:
.unmarshal().mimeMultipart(true)
.process(exchange -> {
Map<String, Object> headers = exchange.getIn().getHeaders();
// Log all headers for audit
headers.forEach((key, value) -> {
if (key.startsWith("Camel")) {
logger.warn("Suspicious Camel header from MIME input: {} = {}", key, value);
}
});
})
Metrics-Based Detection:
Monitor for anomalies:
- Unexpected header names in MIME-sourced messages
- Headers matching internal Camel namespace from external sources
- Correlation between injected headers and downstream component failures
Example Monitoring Query (Prometheus):
rate(camel_header_injection_attempts_total[5m]) > 0
Audit Checklist
- [ ] Inventory: Document all Camel routes processing MIME messages
- [ ] Configuration: Identify routes with
headersInline=true - [ ] Dependencies: Verify Apache Camel version against vulnerable ranges
- [ ] Downstream: Map downstream components that read Exchange headers
- [ ] Validation: Confirm downstream components validate header values
- [ ] Trust Boundaries: Identify external-facing endpoints accepting MIME messages
- [ ] Logging: Verify audit logging captures header values from MIME sources
- [ ] Testing: Conduct penetration testing with injected headers
- [ ] Remediation: Plan upgrade or mitigation strategy
- [ ] Monitoring: Deploy runtime detection for suspicious headers
Remediation Strategy
Immediate Upgrade Path
Priority 1 (Immediate – within 24-48 hours):
If you’ve confirmed vulnerable configurations in production:
- Prepare Upgrade Plan:
- Test patched versions in staging environment
- Verify compatibility with existing routes
- Plan maintenance window
- Execute Upgrade:
<!-- pom.xml -->
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-mail</artifactId>
<version>4.22.0</version> <!-- or 4.18.4 for 4.18.x, 4.14.9 for LTS -->
</dependency>
- Validate Deployment:
- Run integration tests
- Monitor application logs for errors
- Verify message processing continues normally
Priority 2 (Short-term – within 1 week):
For non-critical systems or those with complex upgrade requirements:
- Apply temporary workarounds (see below)
- Schedule upgrade during next maintenance window
- Implement enhanced monitoring
Disable Inline Headers Workaround
Recommended for immediate risk reduction:
Change headersInline from true to false (or remove the explicit setting):
Before (Vulnerable):
.unmarshal().mimeMultipart(true)
.to("direct:process")
After (Safe):
.unmarshal().mimeMultipart(false) // or simply .unmarshal().mimeMultipart()
.to("direct:process")
Impact Assessment:
- MIME headers are converted to message attachments instead of Exchange headers
- Downstream components cannot access headers directly
- May require code changes if components expect headers in Exchange
- Performance impact is negligible
Verification:
.unmarshal().mimeMultipart(false)
.process(exchange -> {
// Headers should be empty or minimal
Map<String, Object> headers = exchange.getIn().getHeaders();
logger.info("Headers after unmarshal: {}", headers.keySet());
// Attachments should contain MIME headers
Map<String, DataHandler> attachments = exchange.getIn().getAttachments();
logger.info("Attachments: {}", attachments.keySet());
})
Header Sanitization Implementation
For cases where headersInline=true must remain enabled:
Immediately strip Camel-internal headers after unmarshaling:
.unmarshal().mimeMultipart(true)
.removeHeaders("Camel*") // Remove all Camel-internal headers
.removeHeaders("CamelHttp*") // Remove HTTP-specific headers
.removeHeaders("CamelSql*") // Remove SQL-specific headers
.to("direct:process")
Comprehensive Sanitization:
.unmarshal().mimeMultipart(true)
.process(exchange -> {
Message message = exchange.getIn();
List<String> headersToRemove = new ArrayList<>();
// Identify all Camel-internal headers
for (String headerName : message.getHeaders().keySet()) {
if (headerName.startsWith("Camel") ||
headerName.startsWith("CamelHttp") ||
headerName.startsWith("CamelSql")) {
headersToRemove.add(headerName);
}
}
// Remove identified headers
headersToRemove.forEach(message::removeHeader);
// Log removal for audit
logger.info("Removed {} Camel-internal headers from MIME message", headersToRemove.size());
})
.to("direct:process")
Whitelist Approach (More Secure):
.unmarshal().mimeMultipart(true)
.process(exchange -> {
Message message = exchange.getIn();
Map<String, Object> allowedHeaders = new HashMap<>();
// Define whitelist of safe headers
Set<String> whitelist = Set.of("From", "To", "Subject", "Date");
// Copy only whitelisted headers
for (String headerName : whitelist) {
Object value = message.getHeader(headerName);
if (value != null) {
allowedHeaders.put(headerName, value);
}
}
// Clear all headers and restore only whitelisted ones
message.getHeaders().clear();
allowedHeaders.forEach(message::setHeader);
})
.to("direct:process")
Route Restructuring for Untrusted Input
Architectural Approach:
Separate MIME processing from downstream logic:
Before (Vulnerable Architecture):
External MIME Input → Unmarshal (headersInline=true) → SQL Producer
↓
Routing Logic
After (Secure Architecture):
External MIME Input → Unmarshal (headersInline=false) → Extract Attachments
↓
Validate Content
↓
Create Safe Headers
↓
SQL Producer
Implementation Example:
from("direct:process-email")
// Step 1: Unmarshal with headers disabled
.unmarshal().mimeMultipart(false)
// Step 2: Extract and validate content
.process(exchange -> {
Message message = exchange.getIn();
Map<String, DataHandler> attachments = message.getAttachments();
// Process attachments safely
for (DataHandler attachment : attachments.values()) {
// Validate content type, size, etc.
validateAttachment(attachment);
}
})
// Step 3: Create safe headers from validated content
.process(exchange -> {
Message message = exchange.getIn();
// Extract specific, validated data
String sender = extractSender(message);
String subject = extractSubject(message);
// Set only safe, validated headers
message.setHeader("ProcessedFrom", sender);
message.setHeader("ProcessedSubject", subject);
})
// Step 4: Route to downstream components
.to("sql:SELECT * FROM emails WHERE sender = :#${header.ProcessedFrom}")
.to("direct:notify");
Implementation Guidance
Code Examples for Mitigation
Example 1: Minimal Fix (Disable Inline Headers)
import org.apache.camel.builder.RouteBuilder;
public class EmailProcessingRoute extends RouteBuilder {
@Override
public void configure() throws Exception {
from("direct:process-mime")
// BEFORE: .unmarshal().mimeMultipart(true) // VULNERABLE
// AFTER:
.unmarshal().mimeMultipart(false) // Safe - headers become attachments
.log("Processing MIME message safely")
.to("direct:handle-message");
}
}
Example 2: Header Sanitization
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.Exchange;
import org.apache.camel.Processor;
public class SanitizedEmailRoute extends RouteBuilder {
@Override
public void configure() throws Exception {
from("direct:process-mime")
.unmarshal().mimeMultipart(true)
// Sanitize headers immediately after unmarshal
.process(new Processor() {
@Override
public void process(Exchange exchange) throws Exception {
exchange.getIn().removeHeaders("Camel*");
exchange.getIn().removeHeaders("CamelHttp*");
exchange.getIn().removeHeaders("CamelSql*");
}
})
.log("Processing sanitized MIME message")
.to("direct:handle-message");
}
}
Example 3: Whitelist-Based Approach
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.Exchange;
import org.apache.camel.Processor;
import java.util.*;
public class WhitelistEmailRoute extends RouteBuilder {
private static final Set<String> SAFE_HEADERS = Set.of(
"From", "To", "Subject", "Date", "Content-Type"
);
@Override
public void configure() throws Exception {
from("direct:process-mime")
.unmarshal().mimeMultipart(true)
// Apply whitelist filter
.process(new Processor() {
@Override
public void process(Exchange exchange) throws Exception {
Map<String, Object> headers = exchange.getIn().getHeaders();
List<String> toRemove = new ArrayList<>();
// Identify headers not in whitelist
for (String headerName : headers.keySet()) {
if (!SAFE_HEADERS.contains(headerName)) {
toRemove.add(headerName);
}
}
// Remove unsafe headers
toRemove.forEach(exchange.getIn()::removeHeader);
// Log for audit
if (!toRemove.isEmpty()) {
exchange.getIn().setHeader("RemovedHeaders", toRemove.size());
}
}
})
.log("Processing whitelisted MIME message")
.to("direct:handle-message");
}
}
Example 4: XML DSL Configuration
<!-- camel-routes.xml -->
<routes xmlns="http://camel.apache.org/schema/spring">
<!-- VULNERABLE CONFIGURATION -->
<!-- <route id="vulnerable-route">
<from uri="direct:process-mime"/>
<unmarshal>
<mimeMultipart headersInline="true"/>
</unmarshal>
<to uri="direct:handle-message"/>
</route> -->
<!-- FIXED CONFIGURATION -->
<route id="safe-route">
<from uri="direct:process-mime"/>
<!-- Disable inline headers -->
<unmarshal>
<mimeMultipart headersInline="false"/>
</unmarshal>
<!-- Alternative: Sanitize headers -->
<!-- <unmarshal>
<mimeMultipart headersInline="true"/>
</unmarshal>
<removeHeaders pattern="Camel.*"/> -->
<log message="Processing MIME message safely"/>
<to uri="direct:handle-message"/>
</route>
</routes>
Testing Your Fixes
Unit Test Example:
import org.apache.camel.test.junit5.CamelTestSupport;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
public class MimeMultipartSecurityTest extends CamelTestSupport {
@Test
public void testHeadersInlineDisabledPreventsInjection() throws Exception {
// Create MIME message with injected header
String mimeMessage = "From: attacker@example.com\r
" +
"Camel-SQL-Query: DROP TABLE users;\r
" +
"Subject: Test\r
" +
"\r
" +
"Body";
// Send to route with headersInline=false
template.sendBody("direct:safe-route", mimeMessage);
// Verify injected header is not in Exchange
Exchange exchange = consumer.receive("direct:output", 1000);
assertNull(exchange.getIn().getHeader("Camel-SQL-Query"),
"Injected header should not be present");
}
@Test
public void testHeaderSanitizationRemovesInternalHeaders() throws Exception {
String mimeMessage = "From: sender@example.com\r
" +
"Camel-Route-Override: /admin\r
" +
"Subject: Test\r
" +
"\r
" +
"Body";
template.sendBody("direct:sanitized-route", mimeMessage);
Exchange exchange = consumer.receive("direct:output", 1000);
assertNull(exchange.getIn().getHeader("Camel-Route-Override"),
"Sanitized headers should be removed");
}
@Override
protected RouteBuilder createRouteBuilder() throws Exception {
return new RouteBuilder() {
@Override
public void configure() throws Exception {
from("direct:safe-route")
.unmarshal().mimeMultipart(false)
.to("direct:output");
from("direct:sanitized-route")
.unmarshal().mimeMultipart(true)
.removeHeaders("Camel*")
.to("direct:output");
}
};
}
}
Integration Test Example:
import org.apache.camel.test.spring.junit5.CamelSpringBootTest;
import org.springframework.boot.test.context.SpringBootTest;
import org.junit.jupiter.api.Test;
@CamelSpringBootTest
@SpringBootTest
public class MimeMultipartIntegrationTest {
@Test
public void testEndToEndSecureProcessing() throws Exception {
// Simulate real MIME message from external source
String mimeMessage = buildMimeMessage(
"From: external@untrusted.com",
"Camel-SQL-Query: '; DROP TABLE--",
"Subject: Malicious"
);
// Send through production route
template.sendBody("direct:email-processor", mimeMessage);
// Verify message was processed safely
// - No SQL injection occurred
// - Malicious headers were removed
// - Legitimate content was preserved
verifyDatabaseIntegrity();
verifyAuditLog("Removed malicious headers");
}
}
Monitoring Post-Remediation
Metrics to Track:
import io.micrometer.core.instrument.MeterRegistry;
public class MimeSecurityMetrics {
private final MeterRegistry meterRegistry;
public void recordHeaderRemoval(int count) {
meterRegistry.counter("mime.headers.removed", "type", "camel-internal")
.increment(count);
}
public void recordSuspiciousHeader(String headerName) {
meterRegistry.counter("mime.headers.suspicious", "name", headerName)
.increment();
}
public void recordProcessingTime(long durationMs) {
meterRegistry.timer("mime.processing.duration")
.record(durationMs, TimeUnit.MILLISECONDS);
}
}
Alerting Rules (Prometheus):
groups:
- name: mime_security
rules:
- alert: SuspiciousMimeHeaders
expr: rate(mime_headers_suspicious_total[5m]) > 0
for: 1m
annotations:
summary: "Suspicious MIME headers detected"
- alert: HighHeaderRemovalRate
expr: rate(mime_headers_removed_total[5m]) > 10
for: 5m
annotations:
summary: "Unusually high rate of header removal"
Frequently Asked Questions
Default Configuration Safety
Q: Is Apache Camel vulnerable in its default configuration?
A: No. The vulnerability only manifests when headersInline is explicitly set to true. The default setting (headersInline=false) converts MIME headers to attachments rather than Exchange headers, preventing the injection pathway entirely. If you haven’t explicitly configured headersInline=true, your system is not vulnerable to this specific issue.
Q: What is the difference between headersInline=true and headersInline=false?
A:
headersInline=false(Default): MIME headers are converted to message attachments. They do not populate the Camel Exchange header namespace. This is safe.- **
headersInline=true(Non-Default