Ad

CVE-2026-89648

HIGH CVSS 3.1: 7,5 EPSS 0.61%
Обновлено 13 сентября 2026
Ceph
Параметр Значение
CVSS 7,5 (HIGH)
Поставщик Ceph
Публичный эксплойт Нет

В ядре Linux устранена следующая уязвимость: ceph: ограничение количества делегированных индексных дескрипторов в ceph_parse_deleg_inos() ceph_parse_deleg_inos() декодирует наборы интервалов делегированных номеров индексных дескрипторов из ответа MDS на создание с делегированием. Для каждого набора он читает 64-битный start и 64-битный len с ceph_decode_64_safe(), который проверяет только что в сообщении присутствуют восемь байтов, а не значение, а затем циклически обрабатывает len при вставке записей в s_delegated_inos. Лен полностью контролируется злоумышленниками.

Вредоносный или скомпрометированный MDS может отправлять один огромный интервал, много интервалов в одном ответе, повторяющиеся интервалы или повторяющиеся ответы, которые накапливают делегированные индексные дескрипторы в одном сеансе. Исходный код не ограничивал ни один из них и мог вращать цикл вставки или выращивать xarray без ограничений. Связывает оба измерения одной точкой принуждения.

Отслеживать номер делегированных индексных дескрипторов, хранящихся в каждом сеансе MDS в атомном счетчике и выращивать его только в ceph_insert_deleg_ino(), который используетatomic_add_unless() отказаться от увеличения счетчика за пределы CEPH_MAX_DELEG_INOS. Потому что этот помощник это единственное место, где счетчик растет, население за сеанс никогда не сможет превышает ограничение, поэтому отдельная предварительная проверка для каждого сеанса не требуется. счетчик уменьшается, когда async create использует делегированный индексный дескриптор или при сбое вставки, увеличивается при восстановлении делегированного индексного дескриптора, инициализируется с помощью xarray сеанса и сбрасывается при повторном подключении рентгеновский снимок. Ограничение на сеанс по-прежнему позволяет одному ответу запускать цикл вставки. дублируйте диапазоны без увеличения счетчика, а также ограничивайте совокупность длина интервала, принимаемая из одного ответа.

Вместе они связали обоих количество циклов на ответ и количество xarray в ответах. Ограничение — это фиксированная константа, выбираемая клиентом, а не производное значение. из МДС. mds_client_prealloc_inos — это конфигурация MDS пользовательского пространства. вариант; он никогда не отправляется клиенту ядра по сети, и привязке, предоставляемой сервером, нельзя доверять в качестве защитного предела ни при каких обстоятельствах. случай. Константа установлена намного выше задокументированного значения по умолчанию для этой опции. 1000 (большое кратное), поэтому законное поведение пополнения не затрагивается. в то время как процессор и память xarray некорректный поток делегирования может потреблять остается ограниченным.

Воздействие: вредоносный или скомпрометированный Ceph MDS больше не может создавать клиент вращаться через неограниченный интервал делегированных индексных дескрипторов или увеличивать один сеанс xarray с делегированным индексом без ограничений.

Показать оригинальное описание (EN)

In the Linux kernel, the following vulnerability has been resolved: ceph: cap delegated inode count in ceph_parse_deleg_inos() ceph_parse_deleg_inos() decodes interval sets of delegated inode numbers from an MDS create-with-delegation reply. For each set it reads a 64-bit start and a 64-bit len with ceph_decode_64_safe(), which only validates that the eight bytes are present in the message, not the value, and then loops over len while inserting entries into s_delegated_inos. len is fully attacker controlled. A malicious or compromised MDS can send one huge interval, many intervals in one reply, duplicate intervals, or repeated replies that accumulate delegated inodes on the same session. The original code bounded none of these and could spin the insert loop or grow the xarray without limit. Bound both dimensions with a single enforcement point. Track the number of delegated inodes held by each MDS session in an atomic counter and grow it only in ceph_insert_deleg_ino(), which uses atomic_add_unless() to refuse to push the count past CEPH_MAX_DELEG_INOS. Because that helper is the only place the counter grows, the per-session population can never exceed the cap, so no separate per-session pre-check is needed. The counter is decremented when async create consumes a delegated inode or when an insert fails, incremented when a delegated inode is restored, initialized with the session xarray, and reset when reconnect destroys the xarray. A per-session cap alone still lets one reply spin the insert loop on duplicate ranges without growing the counter, so also cap the aggregate interval length accepted from a single reply. Together these bound both the loop trip count per reply and the xarray population across replies. The cap is a fixed, client-chosen constant rather than a value derived from the MDS. mds_client_prealloc_inos is a userspace MDS configuration option; it is never sent to the kernel client on the wire, and a server-supplied bound could not be trusted for a defensive limit in any case. The constant is set well above that option's documented default of 1000 (a generous multiple), so legitimate refill behavior is unaffected while the CPU and xarray memory a malformed delegation stream can consume stays bounded. Impact: a malicious or compromised Ceph MDS can no longer make a client spin through an unbounded delegated-inode interval or grow one session's delegated-inode xarray without limit.

Характеристики атаки

Способ атаки
По сети
Атака возможна удалённо
Сложность
Низкая
Легко эксплуатировать
Нужны права
Не требуются
Права не нужны
Участие пользователя
Не требуется
Не нужно действие пользователя

Последствия

Конфиденциальность
Нет
Нет утечки данных
Целостность
Нет
Нет модификации данных
Доступность
Высокое
Полный отказ в обслуживании

Строка CVSS v3.1