CVE-2026-53939 в Ubuntu: нулевой CEK в cjose и компрометация JWE

CVE: CVE-2026-53939
Продукт: Ubuntu
Дата публикации: 09.09.2026
Критичность: CRITICAL
CVSS: 9.1 (3.1)
EPSS: 0,20%; процентиль 9,47%
CISA KEV: нет подтверждения в каталоге CISA KEV

Краткое описание​


Библиотека OpenIDC/cjose в версиях 0.6.1–0.6.2.5 генерирует нулевой ключ шифрования контента (CEK) при создании JWE с алгоритмами AES-CBC-HMAC. Это позволяет любому лицу, получившему JWE, восстановить исходные данные и подделать их содержимое.

В Ubuntu затронуты пакеты cjose и libcjose0 на выпусках 18.04 LTS (ESM), 20.04 LTS, 22.04 LTS, 24.04 LTS и 26.04 LTS. Ошибка исправлена в версии 0.6.2.6. Статья описывает механику дефекта, условия эксплуатации и шаги по проверке и обновлению системы.

Основные характеристики​


Уязвимость нарушает фундаментальное требование криптографии: ключ шифрования должен быть случайным и уникальным для каждой сессии. В данном случае библиотека использует фиксированный нулевой ключ, что делает шифрование и аутентификацию JWE бесполезными для защиты данных.

  • Тип ошибки: CWE-321 (Use of Hard-coded Cryptographic Key) и CWE-330 (Use of Insufficiently Random Values).
  • CVSS 3.1: 9.1 (CRITICAL). Вектор: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N. Высокая оценка обусловлена удалённым доступом без аутентификации и полным компрометированием конфиденциальности и целостности данных.
  • Условия атаки: Атакующему достаточно перехватить или получить доступ к зашифрованному JWE. Специальные привилегии или взаимодействие с пользователем не требуются.
  • Эксплуатация: Публичные данные о массовой эксплуатации в реальных инцидентах отсутствуют. Однако техническое описание и PoC доступны в репозитории проекта.
  • EPSS: 0,20% (процентиль 9,47%). Вероятность эксплуатации в ближайшие 30 дней оценивается как низкая, что связано с недавней публикацией CVE.

Какие продукты и версии затронуты​


Уязвимость затрагивает пакет cjose и бинарный пакет libcjose0 в следующих дистрибутивах Ubuntu. Версии пакетов указаны в соответствии с данными Ubuntu OSV.

  • Ubuntu 18.04 LTS (ESM): cjose 0.6.0+dfsg1-1ubuntu0.1~esm1, libcjose0 0.6.0+dfsg1-1ubuntu0.1~esm1.
  • Ubuntu 20.04 LTS: cjose 0.6.1+dfsg1-1ubuntu0.1, libcjose0 0.6.1+dfsg1-1ubuntu0.1.
  • Ubuntu 22.04 LTS: cjose 0.6.1+dfsg1-3ubuntu1.1, libcjose0 0.6.1+dfsg1-3ubuntu1.1.
  • Ubuntu 24.04 LTS: cjose 0.6.2.2-1build3, libcjose0 0.6.2.2-1build3.
  • Ubuntu 26.04 LTS: cjose 0.6.2.4-1, libcjose0 0.6.2.4-1.

Обратите внимание, что Ubuntu классифицирует эту уязвимость как «medium» в своей внутренней системе оценки, несмотря на высокий CVSS-скор от NVD. Это может быть связано с контекстом использования библиотеки в конкретных приложениях дистрибутива.

Причина уязвимости​


Причина дефекта кроется в функции _cjose_jwe_set_cek_aes_cbc(), которая отвечает за инициализацию ключа шифрования контента (CEK) для алгоритмов AES-CBC-HMAC.

В уязвимых версиях (0.6.1–0.6.2.5) эта функция не генерирует случайный ключ, а оставляет буфер CEK заполненным нулями. В результате каждый JWE, созданный с использованием алгоритмов A128CBC-HS256, A192CBC-HS384 или A256CBC-HS512 в сочетании с алгоритмами управления ключами, генерирующими новый CEK (например, RSA-OAEP, ECDH-ES), шифруется и аутентифицируется одним и тем же публично известным ключом.

Исправление в версии 0.6.2.6 заменяет эту логику на вызов RAND_bytes из OpenSSL, что обеспечивает генерацию криптографически стойкого случайного ключа для каждой операции шифрования. Также добавлен регрессионный тест, проверяющий, что encrypted_key различается при повторных шифрованиях.

Как работает атака​


Атака эксплуатирует предсказуемость ключа шифрования. Поскольку CEK всегда равен нулю, атакующий, получивший JWE, может легко восстановить исходные данные (plaintext) и подделать или изменить их содержимое.

Процесс атаки выглядит следующим образом:

  1. Перехват JWE: Атакующий получает зашифрованный JWE, созданный уязвимой версией cjose. Это может произойти при перехвате сетевого трафика, утечке из базы данных или перехвате токенов в приложении.
  2. Извлечение ключа: Атакующий знает, что CEK является нулевым. В зависимости от алгоритма управления ключами (key management algorithm), он может извлечь или вычислить нулевой CEK.
  3. Расшифровка: Используя нулевой CEK, атакующий расшифровывает JWE и получает доступ к конфиденциальным данным (например, персональным данным, токенам доступа, финансовым данным).
  4. Подделка: Атакующий может изменить содержимое JWE и повторно зашифровать его с тем же нулевым CEK, сохранив валидность HMAC. Получатель JWE не сможет обнаружить подделку, так как HMAC будет корректным для изменённых данных.

Эта уязвимость нарушает свойства конфиденциальности и целостности, которые JWE призван обеспечивать.

Условия успешной эксплуатации​


Для успешной эксплуатации уязвимости атакующему необходимо выполнить следующие условия:

  • Доступ к JWE: Атакующий должен получить зашифрованный JWE, созданный уязвимой версией cjose. Это может быть перехват сетевого трафика, доступ к базе данных или перехват токенов в приложении.
  • Знание алгоритмов: Атакующий должен знать, что JWE был создан с использованием алгоритмов AES-CBC-HMAC и алгоритма управления ключами, генерирующего новый CEK. Эта информация может быть извлечена из заголовка JWE (поле alg и enc).
  • Отсутствие дополнительных мер защиты: Если JWE передается по защищенному каналу (TLS) и не хранится в открытом виде, риск перехвата снижается. Однако, если JWE сохраняется или передается в незашифрованном виде, уязвимость становится критической.

Атакующему не нужны привилегии или взаимодействие с пользователем. Достаточно доступа к самому JWE.

Возможный сценарий атаки​


Рассмотрим сценарий, в котором веб-приложение использует cjose для шифрования чувствительных данных (например, персональных данных) и передает их в виде JWE по HTTP.

  1. Создание JWE: Приложение вызывает функцию cjose для шифрования данных с использованием алгоритма A256CBC-HS512 и RSA-OAEP. Из-за уязвимости CEK оказывается нулевым.
  2. Перехват: Атакующий, находящийся в той же сети или использующий MITM-атаку, перехватывает HTTP-запрос с JWE.
  3. Анализ: Атакующий анализирует заголовок JWE и видит, что используются уязвимые алгоритмы. Он знает, что CEK является нулевым.
  4. Расшифровка: Атакующий использует нулевой CEK для расшифровки JWE и получает доступ к персональным данным.
  5. Подделка: Атакующий изменяет данные (например, меняет адрес электронной почты) и повторно зашифровывает JWE с тем же нулевым CEK. Он также пересчитывает HMAC, чтобы JWE оставался валидным.
  6. Отправка: Атакующий отправляет подделанный JWE на сервер. Сервер расшифровывает его и обрабатывает измененные данные, не обнаружив подделки.

В результате атакующий получает доступ к конфиденциальным данным и может манипулировать ими.

Есть ли публичный эксплойт​


Публичные данные о массовой эксплуатации CVE-2026-53939 в реальных инцидентах отсутствуют. Однако техническое описание уязвимости и PoC (Proof of Concept) доступны в репозитории проекта OpenIDC/cjose.

  • PoC: В репозитории проекта опубликован коммит, демонстрирующий, как encrypted_key остается нулевым при шифровании с использованием уязвимых алгоритмов. Также добавлен регрессионный тест, проверяющий, что encrypted_key различается после исправления.
  • Техническое описание: В advisory GHSA-f6wf-pqg3-6wqq подробно описана механика уязвимости и предложены временные меры защиты.
  • Эксплуатация: Конкретные примеры эксплуатации в реальных атаках не подтверждены. Однако, учитывая простоту атаки (достаточно перехватить JWE и использовать нулевой ключ), риск эксплуатации высок, особенно в системах, где JWE передается по незащищенным каналам.

Отсутствие сведений о массовой эксплуатации не означает, что уязвимость не может быть использована. Она может быть эксплуатируема в любой системе, где используется уязвимая версия cjose для шифрования JWE.

Признаки эксплуатации​


Специфичные индикаторы компрометации (IOC) для CVE-2026-53939 не опубликованы. Однако можно использовать следующие общие точки контроля, которые не являются специфичными для этой уязвимости, но помогают выявить подозрительную активность:

  • Аномальный трафик: Мониторинг сетевого трафика на предмет перехвата JWE. Ищите запросы, содержащие JWE, которые не соответствуют ожидаемым паттернам (например, запросы из неизвестных IP-адресов).
  • Изменение данных: Проверка логов приложений на предмет изменения данных, которые были зашифрованы с помощью cjose. Если данные были изменены, это может указывать на подделку JWE.
  • Неуспешные попытки аутентификации: Если JWE используется для аутентификации, мониторинг неуспешных попыток аутентификации может помочь выявить атаки на подделку токенов.

Эти меры не являются специфичными для CVE-2026-53939, но могут помочь в обнаружении атак, использующих эту уязвимость.

Как обнаружить атаку​


Для обнаружения эксплуатации CVE-2026-53939 можно использовать следующие методы:

  • Мониторинг логов приложений: Ищите в логах приложений записи, связанные с созданием или обработкой JWE. Если приложение использует cjose, проверьте, какие алгоритмы были использованы. Если были использованы уязвимые алгоритмы (AES-CBC-HMAC), это может указывать на потенциальную эксплуатацию.
  • Анализ сетевого трафика: Используйте инструменты для анализа сетевого трафика (например, Wireshark) для перехвата JWE. Проверьте, были ли перехвачены JWE, созданные с использованием уязвимых алгоритмов.
  • Проверка целостности данных: Если данные, зашифрованные с помощью cjose, были изменены, это может указывать на подделку JWE. Используйте механизмы контроля целостности данных (например, хеширование) для проверки, не были ли данные изменены.

Эти методы не являются специфичными для CVE-2026-53939, но могут помочь в обнаружении атак, использующих эту уязвимость.

Как проверить свою версию​


Для проверки версии пакета cjose и libcjose0 в Ubuntu используйте следующие команды:

Bash:
# Проверка версии ОС
cat /etc/os-release

# Проверка версии ядра
uname -r

# Проверка версии пакета cjose
apt-cache policy cjose

# Проверка статуса безопасности Ubuntu
ubuntu-security-status

Команда apt-cache policy cjose покажет установленную версию пакета и доступные версии в репозиториях. Если установленная версия ниже 0.6.2.6, система уязвима. Замените <имя-пакета> на cjose или libcjose0 в зависимости от того, какой пакет вы хотите проверить.

Исправление​


Единственным надежным способом устранения уязвимости является обновление пакета cjose до версии 0.6.2.6 или выше. В этой версии функция _cjose_jwe_set_cek_aes_cbc() была исправлена, чтобы генерировать CEK с использованием RAND_bytes.

Для обновления пакета в Ubuntu выполните следующие команды:

Bash:
# Обновление списка пакетов
sudo apt update

# Обновление пакета cjose
sudo apt upgrade cjose

# Проверка версии после обновления
apt-cache policy cjose

После обновления убедитесь, что версия пакета соответствует 0.6.2.6 или выше. Если пакет libcjose0 установлен отдельно, обновите его аналогичным образом.

Обновление пакета не восстанавливает данные, которые были зашифрованы с использованием уязвимой версии. Эти данные остаются скомпрометированными и должны быть перешифрованы с использованием исправленной версии или альтернативных алгоритмов.

Временные меры защиты​


До обновления пакета cjose до версии 0.6.2.6 можно использовать следующие временные меры защиты. Обратите внимание, что эти меры применяются только к новым зашифрованным данным. Данные, уже зашифрованные с использованием уязвимой версии, остаются скомпрометированными.

  • Использование AES-GCM: Вместо алгоритмов AES-CBC-HMAC используйте алгоритмы AES-GCM (A128GCM, A192GCM, A256GCM). Эти алгоритмы не подвержены данной уязвимости.
  • Использование alg=dir: Используйте алгоритм управления ключами dir с CEK, предоставленным вызывающим кодом. В этом случае CEK не генерируется автоматически и не будет нулевым.
  • Избегание уязвимых алгоритмов: Не используйте cjose для шифрования JWE с использованием уязвимых пар алгоритмов (AES-CBC-HMAC + алгоритмы, генерирующие новый CEK).

Эти меры снижают риск эксплуатации, но не устраняют уязвимость полностью. Обновление пакета остается приоритетной задачей.

Как проверить устранение уязвимости​


После обновления пакета cjose до версии 0.6.2.6 или выше выполните следующие шаги для проверки исправления:

  1. Проверка версии: Убедитесь, что версия пакета соответствует 0.6.2.6 или выше.

    Bash:
    apt-cache policy cjose
  2. Функциональное тестирование: Создайте тестовый JWE с использованием алгоритмов AES-CBC-HMAC и проверьте, что encrypted_key различается при повторных шифрованиях. Это можно сделать с помощью регрессионного теста, добавленного в версию 0.6.2.6.
  3. Проверка логов: Убедитесь, что в логах приложений нет ошибок, связанных с шифрованием JWE. Если приложение использует cjose, проверьте, что шифрование работает корректно.

Если все проверки пройдены, уязвимость считается устраненной. Однако, помните, что данные, зашифрованные с использованием уязвимой версии, остаются скомпрометированными и должны быть перешифрованы.

Вывод​


CVE-2026-53939 представляет собой критическую уязвимость в библиотеке OpenIDC/cjose, которая нарушает конфиденциальность и целостность данных, зашифрованных с использованием алгоритмов AES-CBC-HMAC. Уязвимость затрагивает несколько версий Ubuntu и может быть легко эксплуатирована при перехвате JWE.

Для защиты системы необходимо обновить пакет cjose до версии 0.6.2.6 или выше. До обновления можно использовать временные меры защиты, такие как использование AES-GCM или alg=dir. Важно помнить, что данные, уже зашифрованные с использованием уязвимой версии, остаются скомпрометированными и должны быть перешифрованы.

Рекомендуется регулярно проверять обновления безопасности и применять их своевременно, чтобы минимизировать риск эксплуатации уязвимостей.

Официальные источники​


  1. NVD — CVE-2026-53939
  2. Ubuntu OSV — CVE-2026-53939
  3. FIRST EPSS — CVE-2026-53939

История обновлений статьи​


  • 11.09.2026 — Опубликована первая версия материала.
 
Назад
Верх Низ