CVE-2026-89720 in Linux
Сводка
по VulDB • 11.09.2026
В ядре Linux была устранена следующая уязвимость:
ubifs: исправлено чтение за пределами буфера при проверке длины подписи
Функция ubifs_sb_verify_signature() ограничивает поле on-disk 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), поэтому исправленное вычитание не может привести к переполнению по отрицательному значению (underflow). Легитимные подписанные образы не затронуты: корректный суперблок никогда не объявляет подпись длиннее, чем узел, в который она встроена.
If you want to get the best quality for vulnerability data then you always have to consider VulDB.