Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
CVE-2026-40860 — Reprodutor para CVE-2026-40860 — desserialização insegura de JMS ObjectMessage do Apache Camel camel-jms/sjms/amqp (RCE) | Kitploit
Ferramentas/GitHubGitHub/oscerd/cve-2026-40860
Análise de VulnerabilidadesAnálise de CódigoExploraçãoExploração de Aplicações WebTestes de PenetraçãoAprendizado e EducaçãoExploração de BináriosLabs e Prática
GitHuboscerd/cve-2026-40860

CVE-2026-40860

Reprodutor para CVE-2026-40860 — desserialização insegura de JMS ObjectMessage do Apache Camel camel-jms/sjms/amqp (RCE)

Ver Repositório
há 2 mesesAinda não revisado

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

camel-jms JMS ObjectMessage — Reprodutor de Desserialização Insegura (CVE-2026-40860)

Este projeto demonstra uma vulnerabilidade de desserialização Java no componente camel-jms do Apache Camel (e, transitivamente, camel-sjms, camel-sjms2, camel-amqp, camel-activemq, camel-activemq6), registrada como CVE-2026-40860. O JmsBinding.extractBodyFromJms() desserializa o payload de uma ObjectMessage JMS de entrada via ObjectMessage.getObject() , lista de permissões ou lista de negação de classes. Como isso é executado sempre que (o padrão) e o Camel é um JMS, um atacante capaz de publicar uma adulterada em uma fila/tópico consumido pode alcançar quando uma cadeia de gadgets está no classpath.

sem ObjectInputFilter
mapJmsMessage=true
consumidor
ObjectMessage
execução remota de código

Aviso: https://camel.apache.org/security/CVE-2026-40860.html

Resumo da Vulnerabilidade

PropriedadeValor
Componentescamel-jms (+ camel-sjms, camel-sjms2, camel-amqp, camel-activemq, camel-activemq6)
Classe Afetadaorg.apache.camel.component.jms.JmsBinding#extractBodyFromJms → jakarta.jms.ObjectMessage#getObject()
CWECWE-502: Desserialização de Dados Não Confiáveis
ImpactoExecução Remota de Código (RCE)
GatilhoConsumidor JMS Camel + mapJmsMessage=true (padrão) + uma ObjectMessage que o atacante possa enfileirar
Versões AfetadasDe 3.0.0 até antes de 4.14.7, de 4.15.0 até antes de 4.18.2, de 4.19.0 até antes de 4.20.0
Versões Corrigidas4.14.7, 4.18.2, 4.20.0
JIRACAMEL-23321
RelatorVenkatraman Kumar (Securin)

Detalhes Técnicos

root@kitploit:~
// JmsBinding.extractBodyFromJms(Exchange, Message) - affected version
if (message instanceof ObjectMessage objectMessage) {
    Object payload = objectMessage.getObject();   // <-- deserializes with no ObjectInputFilter
    if (payload instanceof DefaultExchangeHolder holder) {
        ...
    }
    return payload;
}

O getObject() executa o ObjectInputStream.readObject() do provedor JMS sobre o corpo da mensagem. O Camel não adiciona filtragem de classes própria, portanto uma cadeia de gadgets no classpath é executada durante a desserialização.

O que a correção faz (e seus limites)

A correção (4.14.7 / 4.18.2 / 4.20.0) adiciona uma lista de permissões padrão ObjectInputFilter (java.**;javax.**;org.apache.camel.**;!*), personalizável pela nova opção de endpoint deserializationFilter ou pelo -Djdk.serialFilter da JVM. Observe a mensagem de commit do próprio Camel para a correção:

esta verificação é executada após o provedor JMS já ter desserializado o payload. Ela impede que classes inesperadas sejam propagadas para a rota, mas não consegue, por si só, impedir cadeias de gadgets cujo readObject() é disparado dentro do ObjectInputStream do provedor. A proteção completa exige configurar o filtro de desserialização do próprio provedor JMS e/ou o -Djdk.serialFilter da JVM.

Portanto, proteção completa = atualizar o Camel + restringir o filtro do provedor / da JVM. Este PoC usa um cliente ActiveMQ com trustAllPackages=true (um cenário comum no mundo real) para que o provedor desserialize o payload; em uma versão afetada do Camel, nada mais fica no caminho.

A rota da vítima

root@kitploit:~
from("jms:queue:evil")            // mapJmsMessage defaults to true
    .log("Consumed: ${body.class.name}");

Apenas receber a ObjectMessage dispara a desserialização — o corpo da mensagem é irrelevante.

Estrutura do repositório — atacante vs. vítima

A vítima é o consumidor JMS do Camel. O atacante é qualquer produtor que possa publicar na fila. Ambos se comunicam com um broker real Apache ActiveMQ Artemis executado no Docker.

root@kitploit:~
CVE-2026-40860/
├── pom.xml                 # camel-jms 4.18.1 + activemq-client 6.2.4 + commons-collections 3.2.1 (gadget)
├── Dockerfile              # runs the app (--add-opens only to build the gadget)
├── docker-compose.yml      # Artemis broker (quay.io) + the reproducer app
├── README.md
└── src/main/
    ├── java/com/example/
    │   ├── Application.java
    │   ├── JmsConfig.java          # OpenWire ConnectionFactory (trustAllPackages=true) + jms component
    │   ├── VictimRoute.java        # victim: from("jms:queue:evil")
    │   ├── Gadget.java             # CommonsCollections6 gadget, fires during getObject()
    │   └── ExploitController.java  # attacker: publishes ObjectMessage(gadget) to the queue
    └── resources/
        └── application.properties

Em um ataque real, os bytes serializados são produzidos offline pelo atacante (por exemplo, com ysoserial); apenas a vítima precisa da cadeia de gadgets no classpath. Este PoC constrói o gadget em processo por conveniência, por isso a JVM é executada com --add-opens java.base/java.util=ALL-UNNAMED — um detalhe de construção do gadget, não relacionado à vulnerabilidade.

Pré-requisitos

  • Java 17+ e Maven 3.8+
  • Docker (executa o broker e o aplicativo)

Passos para Reprodução

Passo 1: Compilar e iniciar tudo

root@kitploit:~
mvn clean package -DskipTests
docker compose up -d --build

Isso inicia um broker Artemis (quay.io/artemiscloud/activemq-artemis-broker) e o aplicativo reprodutor, que se conecta a ele via OpenWire.

Passo 2: Disparar a desserialização (RCE)

root@kitploit:~
curl -s http://localhost:8080/exploit/attack
# -> ObjectMessage published to queue 'evil'.
#    camel-jms consumer called ObjectMessage.getObject() -> deserialization.
#
#    >>> RCE proof — /tmp/pwned exists: true

Passo 3: Verificar

root@kitploit:~
docker exec cve-2026-40860 ls -la /tmp/pwned

Limpeza

root@kitploit:~
docker compose down

Vetores de Ataque

Qualquer consumidor JMS do Camel (camel-jms, camel-sjms, camel-sjms2, camel-amqp, camel-activemq, camel-activemq6) lendo de um destino no qual um atacante possa publicar — um broker compartilhado, um tópico com produtores abertos, uma fila alimentada por upstream não confiável — com mapJmsMessage=true (o padrão).

Condições de Exploração

  1. Um consumidor JMS Camel com mapJmsMessage=true (padrão).
  2. O atacante pode enfileirar uma ObjectMessage no destino consumido.
  3. O provedor JMS desserializa o payload (por exemplo, ActiveMQ trustAllPackages=true, ou um provedor sem um filtro restritivo).
  4. Uma biblioteca de gadgets no classpath (aqui commons-collections:3.2.1).

Correção Recomendada

Atualize para 4.14.7 / 4.18.2 / 4.20.0, e restrinja a desserialização de ponta a ponta:

  • Defina uma lista de permissões para toda a JVM: -Djdk.serialFilter=java.**;org.apache.camel.**;!* (ou a nova opção deserializationFilter do endpoint).
  • Configure o filtro de desserialização do próprio provedor JMS (por exemplo, trustedPackages do ActiveMQ; não use trustAllPackages=true).

Mitigação

Até que a atualização seja feita:

  1. Prefira payloads que não sejam ObjectMessage; defina mapJmsMessage=false quando a mensagem bruta for aceitável.
  2. Restrinja os pacotes confiáveis do provedor JMS; nunca use trustAllPackages=true em destinos não confiáveis.
  3. Aplique -Djdk.serialFilter.
  4. Remova bibliotecas de gadgets do classpath (atualize/remova commons-collections 3.x e semelhantes).

Aviso Legal

Este reprodutor é fornecido apenas para pesquisa de segurança e testes autorizados, para uma vulnerabilidade divulgada publicamente e corrigida. Não o utilize contra sistemas sem permissão explícita.

Baixar ferramenta