CVE-2026-0648CVE-2026-0648是Eclipse ThreadX实时操作系统中的一个高危安全漏洞,位于OSEK兼容层的CreateCounter()函数中。该漏洞源于错误检查逻辑不正确,具体表现为代码使用错误的返回值判断条件来检测osek_get_counter()函数的失败状态。当计数器池资源耗尽时,函数返回错误码E_OS_SYS_STACK(12U),但代码却检查cntr_id是否等于0来判断失败,导致错误处理分支永远无法执行。攻击者可以通过反复调用CreateCounter()耗尽计数器池,触发漏洞使系统将错误码强制转换为指针,创建野指针后写入非法内存地址,从而可能导致拒绝服务攻击或未授权内存访问。
该漏洞的技术根源在于tx_osek.c文件中CreateCounter()函数的错误检查逻辑错误。正常流程中,osek_get_counter()函数在失败时应返回错误码,但在资源耗尽场景下返回E_OS_SYS_STACK(12U)。然而代码中的检查逻辑为:if(cntr_id == 0u),这意味着只有当返回值为0时才认为失败。由于osek_get_counter()实际返回12U而非0,导致代码认为调用成功,继续执行后续逻辑。紧接着,代码将这个错误码(12U)强制转换为OSEK_COUNTER*类型的指针,创建一个指向地址0x0000000C的野指针。当后续代码尝试通过该指针访问其成员变量进行写操作时,实际上是在向非法内存地址写入数据,可能触发ARM Cortex-M处理器的HardFault异常,或者在某些情况下导致静默的内存损坏,破坏关键数据结构。攻击者只需本地低权限即可反复调用CreateCounter()触发计数器池耗尽,实现攻击。