CVE-2026-78165
Apache Camel: нефильтрованная десериализация Java полезных нагрузок Redis в Camel-Spring-Redis
- Опубликовано
- 19 окт. 2026 г.
- Обновлено
- 19 окт. 2026 г.
- Назначение CNA
- apache
- Наблюдены доказательства
- 17 окт. 2026 г.
Первичный CVSS
cvelist · CVSS 3.1
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:HРезюме
Уязвимость десериализации недоверенных данных в компоненте Apache Camel Spring Redis. Проблема затрагивает Apache Camel: с 2.11.0 до 4.18.5, с 4.19.0 до 4.22.1. RedisConfiguration.getSerializer лениво создавал экземпляр JdkSerializationRedisSerializer без дополнительных настроек всякий раз, когда опция serializer не была сконфигурирована, и этот экземпляр использовался для каждого чтения, выполняемого компонентом. Реализация Spring делегирует через DeserializingConverter в DefaultDeserializer, который читает байты с помощью ConfigurableObjectInputStream и не устанавливает java.io.ObjectInputFilter в поток, поэтому произвольный граф сериализованных классов материализовался и его метод readObject выполнялся. RedisConsumer.setBody применял этот сериализатор к сырым байтам каждого сообщения, опубликованного в подписанные каналы, до создания Exchange и, следовательно, до того, как какая-либо логика маршрута могла проверить сообщение, поэтому субъект, способный выполнить PUBLISH в подписанный канал, напрямую достигал точки десериализации. Тот же сериализатор по умолчанию лежал в основе RedisTemplate, создаваемого RedisConfiguration.createDefaultTemplate, поэтому команды чтения производителя GET, HGET, HGETALL и HVALS десериализовали всё, что хранилось в пространстве ключей Redis, и SpringRedisIdempotentRepository использовал этот же шаблон. Настройка пользовательского redisTemplate не закрывала путь через consumer, поскольку RedisConsumer.setBody читает getSerializer напрямую, а не сериализатор, привязанный к шаблону, поэтому развёртывание, в котором в собственный шаблон был подключён String-сериализатор, оставалось уязвимым на стороне consumer, если только не была также установлена опция serializer. Компонент никогда сам не создавал java.io.ObjectInputStream, поэтому предыдущие проверки кодовой базы Camel на предмет нефильтрованной десериализации Java не доходили до него. Такое поведение восходит к моменту появления компонента, впервые выпущенного в 2.11.0, и оставалось неизменным до этого исправления. Пользователям рекомендуется обновиться до версии 4.23.0, в которой проблема исправлена. Если пользователи находятся на ветке выпусков 4.22.x, им рекомендуется обновиться до 4.22.1. Если пользователи находятся на ветке выпусков 4.18.x, им рекомендуется обновиться до 4.18.5. Ветка выпусков 4.14.x и более ранние достигли окончания срока поддержки до того, как эта проблема была решена, и не получат исправления, поэтому развёртывания на этих линиях должны перейти на поддерживаемый выпуск. Для развёртываний, которые не могут обновиться немедленно, следует установить общесистемное для JVM свойство jdk.serialFilter, которое учитывается затронутым путём кода, поскольку он читает через java.io.ObjectInputStream, например -Djdk.serialFilter=!java.net.**;java.**;javax.**;org.apache.camel.**;!* ; или установить опцию эндпоинта serializer в сериализатор, не использующий сериализацию Java, такой как StringRedisSerializer, учитывая, что это должно быть задано как опция serializer, а не только в пользовательском redisTemplate. В качестве эшелонированной защиты следует требовать аутентификацию на экземпляре Redis и ограничивать, какие клиенты могут публиковать в подписанные каналы, а также не предоставлять экземпляр Redis, используемый Camel, недоверенным сетям.
Ответственное использование
Используйте информацию об уязвимостях только в тех системах, которыми вы владеете или имеете право тестировать. Kitploit ссылается на метаданные общедоступных исследований и не хранит код эксплойта или вредоносные полезные данные.