CVE-2022-50500CVE-2022-50500是Linux内核netdevsim驱动中的一个内存泄漏漏洞。该漏洞位于nsim_drv_probe()函数中,当调用nsim_dev_resources_register()函数进行资源注册时,如果其中某些资源的注册操作失败,将导致已成功分配的内存资源无法被正确释放,从而引发内存泄漏问题。netdevsim是Linux内核中用于网络设备模拟的虚拟驱动程序,主要用于网络子系统的开发和测试。该漏洞的CVSS评分为5.5,属于中等严重等级。虽然该漏洞本身不会直接导致权限提升或数据泄露,但由于其可用性影响为高(Availability: High),在长时间运行的系统中,攻击者可以通过反复触发资源注册失败路径,逐步耗尽系统内存资源,最终可能导致系统性能下降或触发内核的OOM(Out of Memory)killer机制,造成系统不稳定或拒绝服务。该漏洞需要本地低权限用户即可触发,无需用户交互,利用门槛较低。
该漏洞的根本原因在于nsim_drv_probe()函数中的错误处理路径不完善。在Linux内核的devlink资源注册框架中,devl_resource_register()函数会通过kmalloc_trace()动态分配内存来创建设备资源对象。在nsim_drv_probe()函数中,会依次调用nsim_dev_resources_register()来注册多个devlink资源。当注册过程中某个资源注册失败时,函数返回错误码,但之前已经成功注册的资源所分配的内存并未被释放,导致内存泄漏。从泄露的堆栈跟踪信息可以看出,泄漏的内存对象大小为128字节,由kmalloc_trace()分配,在devl_resource_register()中被分配,最终在nsim_drv_probe()的偏移0x37a处被引用。攻击者可以通过编写一个简单的内核模块或利用sysfs接口(如new_device_store),触发netdevsim设备的probe过程,并人为制造资源注册失败的条件(如通过资源竞争或内存压力),从而反复触发内存泄漏。攻击向量为本地攻击(AV:L),攻击复杂度低(AC:L),所需权限为低权限(PR:L),无需用户交互(UI:N),对机密性和完整性无影响(C:N/I:N),但对可用性影响为高(A:H)。