
Reproducer eseguibile per Spring Boot e Quarkus per CVE-2026-85300, che dimostra come camel-pqc scriva le chiavi private con permessi file permissivi derivati dalla umask e verifica la correzione.
Reproduttore proof-of-concept eseguibile per la vulnerabilità di Apache Camel in cui il FileBasedKeyLifecycleManager di camel-pqc
scriveva il materiale di chiave generato su disco con i permessi prodotti dalla umask predefinita del processo,
anziché limitare il file al suo proprietario. Su un host la cui umask consente la lettura da parte del gruppo o di altri (la
comune 022), la chiave privata non cifrata era leggibile da altri account locali. L'esposizione riguarda una parte locale
anziché il mittente remoto, ma dove si applica la conseguenza è totale: il possesso della chiave privata
annulla ogni firma e scambio di chiavi che il deployment esegue con essa.
| Runtime | Directory | Stack |
|---|---|---|
| Camel Spring Boot | camel-spring-boot/ | Spring Boot 3.5.13 + camel-pqc 4.22.0 (affetto; corretto in 4.22.1) |
| Camel Quarkus | camel-quarkus/ | Quarkus 3.39.0 + camel-quarkus-pqc (Camel 4.22.0, affetto; controllo corretto CQ 3.40.0 / Camel 4.22.1) |
Entrambi i moduli dimostrano il comportamento affetto e quello corretto. Entrambi vengono eseguiti con umask 022 (il valore predefinito comune),
che è la premessa della vulnerabilità.
Il driver utilizza il vero FileBasedKeyLifecycleManager: memorizza una coppia di chiavi RSA in una nuova directory
(manager.storeKey("k1", keyPair, new KeyMetadata("k","RSA"))) e poi legge i permessi POSIX del file
k1.private.json scritto.
rw-r--r-- (0644) con umask 022 — quindi gruppo
e altri possono leggere la chiave privata non cifrata.rw------- (0600, solo proprietario) indipendentemente dalla 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-------
| Proprietà | Valore |
|---|---|
| Componente | camel-pqc (FileBasedKeyLifecycleManager.storeKey) |
| CWE | CWE-276 (Permessi predefiniti errati) |
| Gravità | MEDIA |
| Vettore di attacco | Un account locale in grado di leggere la directory delle chiavi su un host con una umask permissiva (ad es. 022) |
| Impatto | Divulgazione della chiave privata non cifrata ad altri account locali |
| Versioni interessate | Dalla 4.12.0 precedente alla 4.18.5, dalla 4.19.0 precedente alla 4.22.1 |
| Versioni corrette | 4.18.5, 4.22.1, 4.23.0 |
| JIRA | CAMEL-24447 |
| Credito | Claude Security Scan Tool |
Avviso: https://camel.apache.org/security/CVE-2026-85300.html
Il modulo Quarkus interessato è basato su CQ 3.39.0 (Camel 4.22.0):
camel-quarkus-pqcviene mappato per la prima volta a una versione di Camel interessata in quel punto (CQ 3.29.0 / Camel 4.15.0 è precedente al gestore del ciclo di vita delle chiavi basato su file utilizzato qui).
FileBasedKeyLifecycleManager ora limita la directory delle chiavi e ciascun
file di chiave privata al rispettivo proprietario (rwx------ / rw------- tramite setPosixFilePermissions, con un
fallback java.io.File per i file system non POSIX) prima della scrittura, e restringe un file di chiave preesistente
leggibile da tutti in fase di riscrittura (il file viene troncato, non ricreato, quindi altrimenti manterrebbe i vecchi
permessi). Il materiale delle chiavi già scritto con permessi permissivi deve essere considerato esposto e sottoposto a rotazione.
Collocare la directory delle chiavi su un percorso che solo l'account del servizio può attraversare e restringere la umask del processo; considerare esposta qualsiasi chiave già scritta con permessi permissivi e sottoporla a rotazione.
Questo repository è pubblicato per scopi educativi e difensivi: per aiutare gli utenti di Apache Camel a comprendere la vulnerabilità, verificare se sono interessati e confermare che l'aggiornamento la risolve. La coppia di chiavi RSA viene generata in-process in una directory temporanea e rimossa dopo il controllo. Non utilizzare questo materiale contro sistemi di cui non si è proprietari o che non si gestiscono.