CVE-2026-95664
Apache Camel: il producer Camel-AWS2-S3 valuta chiavi di oggetti S3 non attendibili provenienti dall'header CamelAwsS3Key come espressioni semplici
- Pubblicato
- 26 ott 2026
- Aggiornato
- 26 ott 2026
- Assegnazione CNA
- apache
- Evidenza osservata
- 30 ott 2026
CVSS primario
nvd · CVSS 3.1
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:L/A:NBasso · prossimi 30 giorni
- Percentile
- 57,6%
- Data del modello
- 29 ott 2026
L'EPSS è una stima statistica, non una certezza o una misura di impatto. Combinalo con CVSS, stato KEV, esposizione e ambiente.
Riepilogo
Vulnerabilità di neutralizzazione impropria di elementi speciali utilizzati in un'istruzione del linguaggio di espressione ('Expression Language Injection') nel componente AWS2-s3 di Apache Camel. Il problema riguarda Apache Camel: dalla 4.8.0 precedente alla 4.18.5, dalla 4.19.0 precedente alla 4.22.2. Per l'oggetto che carica, legge o elimina, il producer camel-aws2-s3 preleva la chiave dall'header del messaggio CamelAwsS3Key e ricorre all'opzione keyName configurata sull'endpoint solo quando tale header è assente. A partire dalla 4.8.0, AWS2S3Utils.determineKey() passava inoltre il valore risultante al linguaggio Simple ogni volta che conteneva ${ o $simple{, così che una route potesse usare una chiave dinamica, e la valutazione si applicava sia a un valore prelevato dall'header sia all'opzione configurata. L'header, tuttavia, non è configurazione della route: il consumer aws2-s3 imposta CamelAwsS3Key sugli exchange che crea alla chiave dell'oggetto letto, cioè al nome dell'oggetto nel bucket. In una route che non fa altro che consumare da un endpoint aws2-s3 e produrre verso un altro, il nome di ciascun oggetto consumato raggiungeva quindi il producer, e un nome contenente uno dei due marcatori veniva valutato come espressione, sebbene l'autore della route non avesse mai richiesto alcuna valutazione, e configurare keyName sul producer non lo impediva, perché l'header aveva la precedenza. Una chiave che una route copiava nell'header da altri contenuti del messaggio veniva valutata allo stesso modo. Chiunque fosse in grado di scegliere il nome di un oggetto in un bucket che tale route consuma, tipicamente un principal autorizzato a caricare su quel bucket, poteva quindi far valutare espressioni Simple di propria scelta nel processo Camel. Il linguaggio Simple può leggere proprietà di sistema della JVM, variabili d'ambiente e proprietà di configurazione, che comunemente contengono credenziali e, dove camel-bean è nel classpath, invocare metodi su bean nel registry. Il risultato valutato diventava la chiave usata dal producer, quindi rileggere un valore richiedeva inoltre la capacità di vedere i nomi degli oggetti nel bucket di destinazione, mentre un'invocazione di metodo aveva effetto senza di essa; insieme alla necessità di nominare un oggetto in un bucket consumato, questo è il motivo per cui la gravità è valutata media. Il nome del bucket passava attraverso la stessa valutazione, ma il consumer inserisce in un header di bucket solo il bucket configurato sul proprio endpoint, mai un valore derivato da un oggetto remoto, quindi il nome del bucket non era raggiungibile in questo modo. Le release precedenti alla 4.8.0 usavano la chiave dall'header così com'era e non sono interessate. Si raccomanda agli utenti di aggiornare alla versione 4.23.0, che corregge il problema. Se gli utenti sono sul ramo di release 4.22.x, si suggerisce di aggiornare alla 4.22.2. Se gli utenti sono sul ramo di release 4.18.x, si suggerisce di aggiornare alla 4.18.5. Le linee di release dalla 4.8.x alla 4.17.x e dalla 4.19.x alla 4.21.x hanno raggiunto l'end of life prima che questo problema fosse risolto e non riceveranno una correzione, quindi i deployment su di esse devono passare a una release supportata. Dopo l'aggiornamento, una chiave o un nome di bucket forniti tramite un header del messaggio vengono usati letteralmente, quindi una route che inseriva un'espressione Simple non valutata nell'header CamelAwsS3Key o CamelAwsS3OverrideBucketName deve valutarla nella route, ad esempio con setHeader e simple(), oppure configurarla come opzione keyName o bucketName dell'endpoint. Per i deployment che non possono aggiornare immediatamente, non lasciare che una chiave derivata da un nome di oggetto o da altri contenuti non attendibili del messaggio raggiunga un producer aws2-s3 senza controlli: nelle route che passano exchange da un consumer aws2-s3 a un producer aws2-s3, rimuovere l'header CamelAwsS3Key prima del producer con removeHeader(“CamelAwsS3Key”), così che venga usato il keyName configurato sull'endpoint, oppure rifiutare gli exchange il cui header CamelAwsS3Key contiene ${ o $simple{. Configurare solo keyName non è una mitigazione, perché l'header ha la precedenza su di esso. Come difesa in profondità, consentire solo a principal attendibili di scrivere nei bucket che le route Camel consumano.
Fonti
Reproducer eseguibile in Spring Boot e Quarkus per CVE-2026-95664, che dimostra l'iniezione di espressioni Simple tramite l'header CamelAwsS3Key in camel-aws2-s3 e verifica la correzione.
Utilizzo responsabile
Utilizza le informazioni sulla vulnerabilità solo sui sistemi che possiedi o che sei autorizzato a testare. Kitploit si collega ai metadati della ricerca pubblica e non memorizza codici exploit o payload dannosi.