CVE-2026-22820Outray是一款开源的ngrok替代方案。在0.1.5版本之前,存在一个TOCTOU(Time-of-Check to Time-of-Use)竞态条件漏洞。攻击者可以利用该漏洞在并发请求的情况下,突破其订阅计划所设置的活跃隧道数量限制。正常情况下,系统应该根据用户的订阅等级限制同时运行的隧道数量,但由于检查(Check)和使用(Use)之间存在时间窗口,恶意用户可以通过快速发起多个隧道创建请求,在系统完成验证之前创建超出允许数量的隧道。该漏洞无需任何认证即可利用,攻击复杂度较低,CVSS评分3.7,属于低危漏洞。漏洞已被修复,修复版本为0.1.5。
该漏洞的根本原因在于Outray对活跃隧道数量的检查存在竞态条件。在典型的TOCTOU攻击模式中,攻击者首先发起一个隧道创建请求,系统在T1时刻检查当前活跃隧道数量是否低于订阅限制。如果检查通过,系统在T2时刻实际创建隧道。攻击者在T1和T2之间的时间窗口内,通过并发请求快速创建多个隧道,使得在T2时刻实际创建时,总数已经超过了限制。具体来说,当多个请求同时到达时,多个线程可能同时通过检查(因为它们看到的是同一个当前数量),然后都执行创建操作,导致最终创建的隧道数量超出预期。修复方案需要在创建隧道时使用原子操作或加锁机制,确保检查和创建是一个不可分割的原子操作,防止并发请求绕过数量限制。攻击者无需认证,只需在客户端快速发送多个隧道创建请求即可利用此漏洞。