
Reprodutor executável em Spring Boot e Quarkus para a CVE-2026-85300, demonstrando o camel-pqc gravando chaves privadas com permissões de arquivo permissivas derivadas da umask e verificando a correção.
Reprodutor de prova de conceito executável para a vulnerabilidade do Apache Camel em que o FileBasedKeyLifecycleManager do camel-pqc gravava o material de chave gerado em disco com as permissões produzidas pela umask padrão do processo, em vez de restringir o arquivo ao seu proprietário. Em um host cuja umask permite leitura por grupo ou por outros usuários (a comum 022), a chave privada não criptografada era legível por outras contas locais. A exposição é para uma parte local, e não para o remetente remoto, mas, onde se aplica, a consequência é total: a posse da chave privada anula toda assinatura e troca de chaves que a implantação realiza com ela.
| Runtime | Diretório | Stack |
|---|---|---|
| Camel Spring Boot | camel-spring-boot/ | Spring Boot 3.5.13 + camel-pqc 4.22.0 (afetado; corrigido em 4.22.1) |
| Camel Quarkus | camel-quarkus/ | Quarkus 3.39.0 + camel-quarkus-pqc (Camel 4.22.0, afetado; controle corrigido CQ 3.40.0 / Camel 4.22.1) |
Ambos os módulos demonstram o comportamento afetado e o corrigido. Ambos são executados sob umask 022 (o padrão comum), que é a premissa da falha.
O driver usa o FileBasedKeyLifecycleManager real: ele armazena um par de chaves RSA em um diretório novo
(manager.storeKey("k1", keyPair, new KeyMetadata("k","RSA"))) e então lê as permissões POSIX do arquivo
k1.private.json gravado.
rw-r--r-- (0644) sob umask 022 — de modo que grupo
e outros usuários podem ler a chave privada não criptografada.rw------- (0600, somente o proprietário), independentemente da umask.# Camel Spring Boot
cd camel-spring-boot
mvn clean package
docker compose up -d --build
curl -s http://localhost:8080/exploit/attack # affected: rw-r--r-- private key; >>> PROVEN
docker compose down
# Patched control
mvn clean package -Dcamel.version=4.22.1
umask 022 && java -jar target/cve-2026-85300-pqc-key-permissions-0.0.1-SNAPSHOT.jar &
curl -s http://localhost:8080/exploit/attack # fixed: rw------- ; >>> Not exploited
# Camel Quarkus
cd camel-quarkus
mvn clean package
docker compose up -d --build
curl -s http://localhost:8080/exploit/attack # affected (Camel 4.22.0): rw-r--r-- private key
docker compose down
# Patched control: CQ 3.40.0 ships Camel 4.22.1
mvn clean package -Dcamel-quarkus.version=3.40.0 -Dquarkus.platform.version=3.40.0
umask 022 && java -jar target/quarkus-app/quarkus-run.jar &
curl -s http://localhost:8080/exploit/attack # fixed: rw-------
| Propriedade | Valor |
|---|---|
| Componente | camel-pqc (FileBasedKeyLifecycleManager.storeKey) |
| CWE | CWE-276 (Permissões Padrão Incorretas) |
| Severidade | MÉDIA |
| Vetor de ataque | Uma conta local capaz de ler o diretório de chaves em um host com umask permissivo (por exemplo, 022) |
| Impacto | Divulgação da chave privada não criptografada para outras contas locais |
| Versões Afetadas | Da 4.12.0 anterior à 4.18.5, da 4.19.0 anterior à 4.22.1 |
| Versões Corrigidas | 4.18.5, 4.22.1, 4.23.0 |
| JIRA | CAMEL-24447 |
| Crédito | Claude Security Scan Tool |
Aviso: https://camel.apache.org/security/CVE-2026-85300.html
O módulo afetado do Quarkus é construído sobre o CQ 3.39.0 (Camel 4.22.0):
camel-quarkus-pqcmapeia pela primeira vez para uma versão afetada do Camel nessa versão (CQ 3.29.0 / Camel 4.15.0 é anterior ao gerenciador de ciclo de vida de chaves baseado em arquivo usado aqui).
FileBasedKeyLifecycleManager agora restringe o diretório de chaves e cada
arquivo de chave privada ao seu proprietário (rwx------ / rw------- via setPosixFilePermissions, com um fallback
para java.io.File em sistemas de arquivos não POSIX) antes da escrita, e restringe um arquivo de chave pré-existente
legível por todos na regravação (o arquivo é truncado, não recriado, portanto, de outra forma, manteria as permissões
antigas). Material de chave já gravado com permissões permissivas deve ser tratado como exposto e rotacionado.
Coloque o diretório de chaves em um caminho que apenas a conta de serviço possa percorrer e restrinja o umask do processo; trate qualquer chave já gravada com permissões permissivas como exposta e rotacione-a.
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. O par de chaves RSA é gerado em processo em um diretório temporário e removido após a verificação. Não use este material contra sistemas que você não possui ou opera.