CVE-2026-89607 in Linux
摘要
由 VulDB • 2026-09-12
在 Linux 内核中,已修复以下漏洞:
ecryptfs:拒绝 parse_tag_3_packet() 中的 oversized encrypted_key_size(过大的加密密钥大小)
parse_tag_3_packet() 从 Tag 3 数据包主体设置 encrypted_key_size,但未将其限制在 ECRYPTFS_MAX_KEY_BYTES (64) 范围内。当 encrypted_key_size > 64 时,decrypt_passphrase_encrypted_session_key() 将 decrypted_key_size 设置为等于 encrypted_key_size,并执行两次越界写入:
1. crypto_skcipher_decrypt() 通过 scatterlist 向 decrypted_key[64] 写入 encrypted_key_size 个字节,溢出到父级 ecryptfs_auth_tok struct。
2. memcpy(crypt_stat->key, decrypted_key, decrypted_key_size) 向 crypt_stat->key[64] 写入数据,损坏了 ecryptfs_crypt_stat 中的 root_iv、keysig_list 和 mutexes(互斥锁)。
仅 AES-192(密码代码 0x08)会触发此漏洞,因为它独立于 encrypted_key_size 设置 crypt_stat->key_size = 24,允许 crypto_skcipher_setkey() 成功执行,而同时 encrypted_key_size 超过了 ECRYPTFS_MAX_KEY_BYTES。
PKI 解密路径 (parse_tag_65_packet) 已经验证 decrypted_key_size <= ECRYPTFS_MAX_KEY_BYTES;但 passpharse(口令)路径省略了此检查。
将 encrypted_key_size 限制在 ECRYPTFS_MAX_KEY_BYTES (64) 范围内,而不是 ECRYPTFS_MAX_ENCRYPTED_KEY_BYTES (512)。64 字节的限制也保护了 512 字节的 encrypted_key[] 缓冲区,因此移除之前冗余的 512 字节检查。
[tyhicks:调整代码注释以引用表示缓冲区大小的宏,而不是提及具体的缓冲区大小值,因为这些值未来可能会发生变化]
If you want to get best quality of vulnerability data, you may have to visit VulDB.