CVE-2026-78165
Açıklama
Apache Camel Spring Redis bileşeninde Güvenilmeyen Verilerin Deserializasyonu zafiyeti bulunmaktadır. Bu sorun şu Apache Camel sürümlerini etkilemektedir: 2.11.0 ile 4.18.5 arası ve 4.19.0 ile 4.22.1 arası. RedisConfiguration.getSerializer, herhangi bir serializer seçeneği yapılandırılmadığında tembel yükleme (lazy loading) yöntemiyle yalın bir JdkSerializationRedisSerializer oluşturuyordu ve bu örnek, bileşenin gerçekleştirdiği her okuma işlemi için kullanılıyordu. Spring uygulaması, DeserializingConverter üzerinden DefaultDeserializer'a yetkilendirme yapar; bu da baytları bir ConfigurableObjectInputStream ile okur ve akış üzerinde herhangi bir java.io.ObjectInputFilter kurmaz, böylece rastgele bir serileştirilmiş sınıf grafiği somutlaştırılır ve bunun readObject metodu yürütülür. RedisConsumer.setBody, Exchange oluşturulmadan ve dolayısıyla herhangi bir rota mantığı mesajı inceleyebilmeden önce, abone olunan kanallara yayınlanan her mesajın ham baytlarına bu serializer'ı uyguluyordu; bu nedenle, abone olunan bir kanal üzerinde PUBLISH komutu çalıştırabilen bir aktör, doğrudan deserialization sink noktasına ulaşabiliyordu. Aynı varsayılan serializer, RedisConfiguration.createDefaultTemplate tarafından oluşturulan RedisTemplate'in temelini oluşturuyordu, bu nedenle üretici okuma komutları olan GET, HGET, HGETALL ve HVALS, Redis anahtar alanında depolanan her şeyi deserialize ediyordu ve SpringRedisIdempotentRepository bu şablonu paylaşıyordu. Özel bir redisTemplate yapılandırmak tüketici yolunu kapatmıyordu çünkü RedisConsumer.setBody, şablona ekli serializer yerine doğrudan getSerializer'ı okuyordu; bu nedenle kendi şablonuna bir String serializer bağlamış olan bir dağıtım, aynı zamanda serializer seçeneğini de ayarlamadığı sürece tüketici tarafında savunmasız kalmaya devam ediyordu. Bileşen hiçbir zaman kendisi bir java.io.ObjectInputStream oluşturmadı, bu yüzden Camel kod tabanındaki filtresiz Java deserialization işlemleri için yapılan önceki taramalar buraya ulaşmadı. Bu davranış, bileşenin ilk olarak 2.11.0 sürümünde tanıtılmasına kadar uzanmaktadır ve bu düzeltmeye kadar değişmemiştir. Kullanıcıların sorunu gideren 4.23.0 sürümüne yükseltmeleri önerilir. Eğer kullanıcılar 4.22.x sürüm akışındaysa, 4.22.1 sürümüne yükseltmeleri önerilir. Kullanıcılar 4.18.x sürüm akışındaysa, 4.18.5 sürümüne yükseltmeleri önerilir. 4.14.x sürüm akışı ve daha eski sürümler, bu sorun çözülmeden önce ömrünü tamamladığından (EOL) bir düzeltme almayacaktır, bu nedenle bu hatlardaki dağıtımlar desteklenen bir sürüme geçmelidir. Hemen yükseltme yapamayan dağıtımlar için, etkilenen kod yolu java.io.ObjectInputStream üzerinden okuma yaptığı için bunu dikkate alan JVM genelindeki jdk.serialFilter sistem özelliği ayarlanmalıdır (örneğin -Djdk.serialFilter=!java.net.**;java.**;javax.**;org.apache.camel.**;!* ); veya serializer uç nokta seçeneği, StringRedisSerializer gibi Java serialization kullanmayan bir serializer olarak ayarlanmalıdır; burada bunun sadece özel bir redisTemplate üzerinde değil, serializer seçeneği olarak ayarlanması gerektiği unutulmamalıdır. Derinlemesine savunma (defence in depth) önlemi olarak, Redis örneğinde kimlik doğrulaması zorunlu tutulmalı, hangi istemcilerin abone olunan kanallara yayın yapabileceği kısıtlanmalı ve Camel tarafından tüketilen bir Redis örneği güvenilmeyen ağlara açılmamalıdır.
Nasıl düzeltilir
- Apache Software Foundation Apache Camel4.18.5, 4.22.1 ya da sonraki bir sürüm
Etkilenen ürünler
| Ürün | Etkilenen sürümler | Düzeltildiği sürüm |
|---|---|---|
| Apache Software Foundation Apache Camel | 2.11.0 ≤ v < 4.18.5, 4.19.0 ≤ v < 4.22.1 | 4.18.5, 4.22.1 |
Sürümünüzü kontrol edin
Ürünü seçin ve kullandığınız sürümü yazın; sürümün etkilenen aralıkta olup olmadığını görün.
Attack Surface Management
Alan adlarınıza bağlı varlıkları, bu varlıklarda çalışan teknolojileri ve bilinen zafiyetleri tek listede görün.