Ad

CVE-2026-89720

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

В ядре Linux устранена следующая уязвимость: ubifs: исправлено чтение за пределами границ при проверке длины подписи. ubifs_sb_verify_signature() ограничивает поле ubifs_sig_node->len на диске перед передачей полезных данных подписи вverify_pkcs7_signature(), но чек имеет неправильный знак: if (le32_to_cpu(signode->len) > snod->len + sizeof(struct ubifs_sig_node)) Байты подписи начинаются с sizeof(struct ubifs_sig_node) (UBIFS_SIG_NODE_SZ, 64 байта) в узел, поэтому полезная нагрузка не превышает snod->len - sizeof(struct ubifs_sig_node) длиной в байтах. Добавление размера заголовка вместо его вычитания принимает заявленная длина до 2 * UBIFS_SIG_NODE_SZ больше, чем фактический узел удерживается — после конца c->sbuf, то есть vmalloc(c->leb_size). verify_pkcs7_signature() -> pkcs7_parse_message() -> asn1_ber_decoder() затем передается эта завышенная длина и считывается за пределами выделения, в то время как обход заголовков DER. Длина узла исходит прямо из установленного образ, поэтому созданный подписанный образ UBIFS достигает этого через ubifs_read_superblock() перед криптографической проверкой подписи. snod->len гарантированно будет >= UBIFS_SIG_NODE_SZ сканером узла (c->ranges[UBIFS_SIG_NODE].min_len == UBIFS_SIG_NODE_SZ), поэтому исправленное вычитание не может привести к опустошению.

Законно подписанные изображения не затрагиваются: a правильный суперблок никогда не объявляет подпись длиннее, чем ее узел встроенный.

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

In the Linux kernel, the following vulnerability has been resolved: ubifs: fix out-of-bounds read in signature length check ubifs_sb_verify_signature() bounds the on-disk ubifs_sig_node->len field before handing the signature payload to verify_pkcs7_signature(), but the check has the wrong sign: if (le32_to_cpu(signode->len) > snod->len + sizeof(struct ubifs_sig_node)) The signature bytes start sizeof(struct ubifs_sig_node) (UBIFS_SIG_NODE_SZ, 64 bytes) into the node, so the payload is at most snod->len - sizeof(struct ubifs_sig_node) bytes long. Adding the header size instead of subtracting it accepts a declared length up to 2 * UBIFS_SIG_NODE_SZ larger than the node actually holds -- past the end of c->sbuf, which is vmalloc(c->leb_size). verify_pkcs7_signature() -> pkcs7_parse_message() -> asn1_ber_decoder() is then handed that inflated length and reads beyond the allocation while walking the DER headers. The node length comes straight from the mounted image, so a crafted signed UBIFS image reaches this via ubifs_read_superblock() before the signature is cryptographically checked. snod->len is guaranteed to be >= UBIFS_SIG_NODE_SZ by the node scanner (c->ranges[UBIFS_SIG_NODE].min_len == UBIFS_SIG_NODE_SZ), so the corrected subtraction cannot underflow. Legitimately signed images are unaffected: a correct superblock never declares a signature longer than the node it is embedded in.

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

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

Последствия

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

Строка CVSS v3.1