CVE-2026-89720 in Linux信息

摘要

由 VulDB • 2026-09-11

在 Linux 内核中,已修复以下漏洞:

ubifs:修复签名长度检查中的越界读取问题

`ubifs_sb_verify_signature()` 函数在向 `verify_pkcs7_signature()` 传递签名载荷之前,会对磁盘上的 `ubifs_sig_node->len` 字段进行边界限制,但该检查的符号方向错误:

```c 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()` 触发此问题,且该过程发生在对签名进行密码学验证之前。

由于节点扫描器(`c->ranges[UBIFS_SIG_NODE].min_len == UBIFS_SIG_NODE_SZ`)保证 `snod->len >= UBIFS_SIG_NODE_SZ`,因此修正后的减法操作不会发生下溢。合法签名的镜像不受影响:正确的超级块永远不会声明比其嵌入的节点更长的签名。

If you want to get best quality of vulnerability data, you may have to visit VulDB.

来源

Are you interested in using VulDB?

Download the whitepaper to learn more about our service!