CVE-2023-53610CVE-2023-53610是Linux内核irqchip子系统中存在的一个引用计数泄漏漏洞。该漏洞位于platform_irqchip_probe函数中,具体问题出现在调用of_irq_find_parent()函数后未正确处理返回的设备节点引用。在Linux内核的设备树(Device Tree)处理机制中,of_irq_find_parent()函数会返回一个带有引用计数递增的节点指针,调用者有责任在使用完毕后通过of_node_put()释放该引用。然而,在platform_irqchip_probe函数的实现中,缺少了对该引用的释放操作,导致每次调用该函数时都会泄漏一个引用计数。
引用计数泄漏虽然不会直接导致安全漏洞,但长期累积可能导致系统资源耗尽,特别是在频繁调用相关函数的场景下。攻击者可以利用此漏洞通过本地权限提升对系统造成可用性影响,例如触发内核模块的反复加载和卸载,最终导致系统不稳定或拒绝服务。该漏洞的CVSS评分为5.5,属于中危级别,主要影响系统的可用性,对机密性和完整性无直接影响。
该漏洞已于2025年10月4日公开披露,影响多个Linux内核稳定版本。修复方案已在多个内核稳定分支中合并,包括4401b485855700f296cae4d0db36a52948bff4fa等多个提交。
该漏洞的技术原理基于Linux内核设备树(Device Tree)框架中的引用计数管理机制。在Linux内核中,设备树节点通过引用计数来管理其生命周期,当一个节点被引用时,其引用计数会递增;当不再需要时,需要调用of_node_put()来递减引用计数。
具体到platform_irqchip_probe函数,该函数用于探测平台irqchip设备,在探测过程中需要查找中断控制器(interrupt controller)的父节点。of_irq_find_parent()函数用于查找指定节点的IRQ父节点,并返回一个指向该父节点的指针,同时该节点的引用计数会被递增。按照Linux内核的设备树API规范,调用者必须在使用完该节点后调用of_node_put()来释放引用。
漏洞的根本原因是platform_irqchip_probe函数在调用of_irq_find_parent()后,未在适当的代码路径上调用of_node_put(),导致每次函数执行都会泄漏一个引用计数。虽然单次泄漏的影响较小,但在长时间运行的系统或频繁调用场景下,泄漏的引用计数会持续累积,最终可能导致以下后果:
1. 设备树节点无法被正确释放,占用内核内存资源;
2. 在节点被释放后,其他代码仍持有过期的指针,可能导致use-after-free漏洞;
3. 极端情况下可能导致系统资源耗尽,引发内核panic或系统不稳定。
利用方式:本地攻击者可以通过编写恶意的内核模块或利用现有的系统调用接口,反复触发platform_irqchip_probe的调用路径,逐步耗尽内核资源,最终导致系统可用性受到影响。由于该漏洞需要本地权限(PR:L)才能利用,且不需要用户交互(UI:N),攻击门槛相对较低。