CVE-2026-95664
Apache Camel: продюсер Camel-AWS2-S3 вычисляет недоверенные ключи объектов S3 из заголовка CamelAwsS3Key как простые выражения
- Опубликовано
- 26 окт. 2026 г.
- Обновлено
- 26 окт. 2026 г.
- Назначение CNA
- apache
- Наблюдены доказательства
- 30 окт. 2026 г.
Первичный CVSS
nvd · CVSS 3.1
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:L/A:NНизкий · следующие 30 дней
- Процентиль
- 57,6 %
- Дата модели
- 29 окт. 2026 г.
EPSS – это статистическая оценка, а не достоверность или мера воздействия. Объедините это с CVSS, статусом KEV, воздействием и вашей средой.
Резюме
Уязвимость «Некорректная нейтрализация специальных элементов, используемых в операторе языка выражений» («Инъекция языка выражений») в компоненте AWS2-s3 Apache Camel. Проблема затрагивает Apache Camel: с 4.8.0 до 4.18.5, с 4.19.0 до 4.22.2. Для объекта, который он загружает, читает или удаляет, продюсер camel-aws2-s3 берёт ключ из заголовка сообщения CamelAwsS3Key и обращается к опции keyName, настроенной на эндпоинте, только когда этот заголовок отсутствует. Начиная с 4.8.0, AWS2S3Utils.determineKey() также передавал полученное значение в язык Simple всякий раз, когда оно содержало ${ или $simple{, чтобы маршрут мог использовать динамический ключ, причём вычисление применялось как к значению, взятому из заголовка, так и к настроенной опции. Однако заголовок не является конфигурацией маршрута: консьюмер aws2-s3 устанавливает CamelAwsS3Key в создаваемых им обменах равным ключу объекта, который он прочитал, то есть имени объекта в бакете. Таким образом, в маршруте, который не делает ничего, кроме потребления из одного эндпоинта aws2-s3 и производства в другой, имя каждого потреблённого объекта достигало продюсера, и имя, содержащее любой из маркеров, вычислялось как выражение, хотя автор маршрута никогда не запрашивал никакого вычисления, и настройка keyName на продюсере не предотвращала этого, поскольку заголовок имел приоритет. Ключ, который маршрут копировал в заголовок из другого содержимого сообщения, вычислялся таким же образом. Поэтому любой, кто способен выбрать имя объекта в бакете, из которого потребляет такой маршрут, — как правило, субъект, которому разрешена загрузка в этот бакет, — мог добиться вычисления произвольных выражений Simple в процессе Camel. Язык Simple может читать системные свойства JVM, переменные окружения и свойства конфигурации, которые обычно содержат учётные данные, а при наличии camel-bean в classpath — вызывать методы бинов в реестре. Вычисленный результат становился ключом, который использовал продюсер, поэтому для обратного чтения значения дополнительно требовалась возможность видеть имена объектов в целевом бакете, тогда как вызов метода срабатывал и без неё; вместе с необходимостью назвать объект в потребляемом бакете это объясняет, почему серьёзность оценивается как средняя. Имя бакета проходило через то же вычисление, но консьюмер всегда помещает в заголовок бакета только бакет, настроенный на его собственном эндпоинте, и никогда — значение, полученное из удалённого объекта, поэтому имя бакета таким способом было недостижимо. Выпуски до 4.8.0 использовали ключ из заголовка как есть и не затронуты. Пользователям рекомендуется обновиться до версии 4.23.0, в которой исправлена проблема. Если пользователи находятся на ветке выпусков 4.22.x, им предлагается обновиться до 4.22.2. Если пользователи находятся на ветке выпусков 4.18.x, им предлагается обновиться до 4.18.5. Линии выпусков с 4.8.x по 4.17.x и с 4.19.x по 4.21.x достигли окончания жизненного цикла до того, как эта проблема была решена, и не получат исправления, поэтому развёртывания на них должны перейти на поддерживаемый выпуск. После обновления ключ или имя бакета, переданные через заголовок сообщения, используются буквально, поэтому маршрут, который помещал невычисленное выражение Simple в заголовок CamelAwsS3Key или CamelAwsS3OverrideBucketName, должен вместо этого вычислять его в маршруте, например с помощью setHeader и simple(), или настраивать его как опцию keyName или bucketName эндпоинта. Для развёртываний, которые не могут обновиться немедленно, не позволяйте ключу, производному от имени объекта или от другого недоверенного содержимого сообщения, достигать продюсера aws2-s3 без проверки: в маршрутах, которые передают обмены от консьюмера aws2-s3 к продюсеру aws2-s3, либо удалите заголовок CamelAwsS3Key перед продюсером с помощью removeHeader(“CamelAwsS3Key”), чтобы использовалась настроенная на эндпоинте опция keyName, либо отклоняйте обмены, чей заголовок CamelAwsS3Key содержит ${ или $simple{. Настройка только keyName не является обходным решением, поскольку заголовок имеет приоритет над ней. В качестве эшелонированной защиты разрешайте запись в бакеты, из которых потребляют маршруты Camel, только доверенным субъектам.
Источники
Работающий reproducer на Spring Boot и Quarkus для CVE-2026-95664, демонстрирующий инъекцию Simple-выражений через заголовок CamelAwsS3Key в camel-aws2-s3 и проверяющий исправление.
Ответственное использование
Используйте информацию об уязвимостях только в тех системах, которыми вы владеете или имеете право тестировать. Kitploit ссылается на метаданные общедоступных исследований и не хранит код эксплойта или вредоносные полезные данные.