CVE-2026-23428Linux内核中的ksmbd模块存在一个释放后重用漏洞。在处理复合请求时,smb2_get_ksmbd_tcon()函数复用work->tcon而未验证tcon->t_state状态。如果在复合请求中,前一个命令(如SMB2_TREE_DISCONNECT)将t_state设置为TREE_DISCONNECTED并通过ksmbd_share_config_put()释放了share_conf,随后的命令会通过work->tcon->share_conf引用已释放的内存。该漏洞可能导致系统崩溃或潜在的权限提升,攻击者无需身份认证即可通过网络触发此漏洞。
该漏洞源于Linux内核ksmbd驱动对复合请求处理逻辑中的竞态条件与状态验证缺失。在SMB2协议处理中,复合请求允许在一个TCP连接中发送多个命令。smb2_get_ksmbd_tcon()函数在处理后续命令时,直接复用缓存中的work->tcon结构体指针,跳过了ksmbd_tree_conn_lookup()中原本存在的t_state == TREE_CONNECTED状态检查。当攻击者构造包含SMB2_TREE_DISCONNECT和后续读写操作的复合请求时,断开连接的操作会将tcon->t_state标记为断开,并调用kfree释放tcon->share_conf指向的内存。由于后续命令未检查状态,继续访问该已释放的内存指针(Use-After-Free),导致内核崩溃或潜在的任意代码执行。KASAN报告显示错误发生在smb2_write函数中,读取已释放的share_conf对象。