
Riproduttore per CVE-2026-46592: iniezione nell'header operationName di Apache Camel camel-cxf che reindirizza l'operazione SOAP invocata (confused deputy) da un'operazione di lettura a una distruttiva (corretta in 4.14.8/4.18.3/4.21.0)
| Runtime | Directory | Stack | Servizio SOAP di backend |
|---|
| Camel Spring Boot | camel-spring-boot/ | Spring Boot 3.2.0 + camel-spring-boot 4.18.2 | CXF ServerFactoryBean sulla propria porta :9000 |
| Camel Quarkus | camel-quarkus/ | Quarkus 3.36.0 + Camel Quarkus 3.36.0 (include Camel 4.20.0) | quarkus-cxf sul server gestito, /soapservice/account |
Entrambe sono versioni interessate (corrette in 4.14.8 / 4.18.3 / 4.21.0) ed entrambe dimostrano lo stesso identico difetto: CxfProducer#getBindingOperationInfo cerca prima un header di messaggio operationName e solo in sua assenza ricorre al defaultOperationName dell'endpoint. Il valore di quella costante di header è la semplice stringa operationName — non CamelCxfOperationName — quindi il filtro di confine HTTP (che rimuove solo gli header Camel*) lascia passare un header HTTP in ingresso con quel nome. Un client non fidato aggiunge operationName: deleteAccount e la getBalance della route, vincolata e di sola lettura, diventa una chiamata distruttiva (CWE-441, confused deputy).
Le due varianti differiscono solo per come viene avviato il servizio SOAP di backend: la variante Quarkus lo pubblica con quarkus-cxf sul server HTTP Quarkus gestito (quindi il contratto presenta annotazioni JAX-WS
@WebService), mentre la variante Spring Boot lo crea programmaticamente con un CXFServerFactoryBeansu una porta separata. Il difetto rimane invariato.
Ogni sottodirectory è un progetto autonomo con il proprio Dockerfile, docker-compose.yml e README. In breve, per entrambi:
cd camel-spring-boot # or: cd camel-quarkus
mvn clean package
docker compose up -d --build
curl -s http://localhost:8080/exploit/attack
docker compose down
| Proprietà | Valore |
|---|---|
| Componente | camel-cxf (camel-cxf-soap; la costante risiede in camel-cxf-common, quindi è interessato anche camel-cxfrs) |
| Classe interessata | org.apache.camel.component.cxf.jaxws.CxfProducer#getBindingOperationInfo che legge CxfConstants.OPERATION_NAME ("operationName") |
| CWE | CWE-20 (Improper Input Validation) / CWE-441 (Unintended Proxy or Intermediary — Confused Deputy) |
| Impatto | Un client HTTP imposta operationName → il producer invoca un'operazione SOAP diversa (es. una distruttiva) |
| Versioni interessate | Dalla 4.0.0 fino alla 4.14.8 (esclusa), dalla 4.15.0 fino alla 4.18.3 (esclusa), dalla 4.19.0 fino alla 4.21.0 (esclusa) |
| Versioni corrette | 4.14.8, 4.18.3, 4.21.0 |
| JIRA | CAMEL-23526 (PR apache/camel#23326) |
| Credito | Yu Bao (PayPal) |
Questi reproducer sono forniti solo per ricerca sulla sicurezza e test autorizzati, per una vulnerabilità divulgata pubblicamente e corretta. Non usarli contro sistemi senza un'autorizzazione esplicita.