CVE-2025-39964CVE-2025-39964是Linux内核中crypto: af_alg子系统中的一个并发写入漏洞。该漏洞源于af_alg套接字未对并发写入操作进行适当的同步控制。在Linux内核的AF_ALG套接字接口中,应用程序可以通过sendmsg系统调用向af_alg套接字发送数据以执行加密操作。然而,当多个线程或进程同时对同一个af_alg套接字执行写入操作时,由于缺乏互斥机制,会导致数据以不可预测的方式交错混合,同时可能引发套接字内部状态的不一致问题。该漏洞的CVSS评分为3.3,属于低危级别。攻击者需要本地访问权限和低权限账户即可触发此漏洞,无需用户交互。虽然该漏洞不会导致机密性泄露或数据完整性破坏,但可能导致系统可用性降低,例如造成内核态数据处理异常或触发内核警告。Linux内核维护者通过引入ctx->write字段来实现写入操作的独占所有权机制,从而修复了该问题。此漏洞影响多个稳定版本的Linux内核,需要通过内核更新来修复。
从技术层面分析,该漏洞存在于Linux内核的crypto: af_alg模块中。AF_ALG套接字是Linux内核提供的加密操作接口,允许用户空间程序通过套接字API访问内核的加密子系统。
漏洞的根本原因是af_alg_sendmsg函数在处理写入请求时没有对并发访问进行保护。当两个或多个线程同时调用sendmsg向同一个af_alg套接字写入数据时,会产生以下问题:
1. **数据交错**:多个写入请求的数据会在内核缓冲区中以不可预测的顺序混合,导致最终传递给加密引擎的数据既不是线程A的完整数据,也不是线程B的完整数据,而是两者的混合片段。
2. **状态不一致**:af_alg套接字维护着内部状态信息(如当前操作模式、缓冲区偏移量等),并发写入可能导致这些状态变量被多个线程同时修改,产生竞态条件。
3. **内核稳定性影响**:不一致的状态可能导致后续操作产生未定义行为,包括内核oops或panic。
修复方案是通过添加ctx->write字段来实现写入操作的互斥。当一个线程开始写入时,该字段被设置以指示独占所有权,其他线程的写入请求将被拒绝或阻塞,直到当前写入完成。这种方法类似于文件操作中的FMODE_WRITE标志机制。