CVE-2022-50518CVE-2022-50518是Linux内核中parisc(PA-RISC)架构相关的一个高危安全漏洞,位于固件调用函数pdc_iodc_print()中。该漏洞主要涉及三个方面的问题:首先,在对iodc_dbuf[]缓冲区进行并行修改时,缺少使用pdc_lock自旋锁进行保护,导致存在竞争条件(race condition)风险;其次,未对输入长度进行检查,可能导致iodc_dbuf[]缓冲区发生溢出;此外,代码中还删除了iodc_retbuf[]缓冲区并修复了一些错误的缩进格式。
该漏洞的CVSS评分为7.8,属于高危级别。虽然利用该漏洞需要本地访问权限和低权限认证,但成功利用后可能导致高机密性影响、高完整性影响和高可用性影响。这意味着攻击者可以利用此漏洞在内核上下文中执行任意代码、提升权限、读取敏感数据或导致系统崩溃。
由于该漏洞存在于Linux内核的parisc架构特定代码路径中,主要影响运行在HP PA-RISC硬件平台上的Linux系统。虽然parisc架构在现代服务器和个人电脑中使用较少,但在一些遗留系统和嵌入式设备中仍有应用。该漏洞已于2025年10月7日公开披露,相关的修复补丁已经合并到Linux内核稳定版本中。
该漏洞的技术根源在于Linux内核parisc架构的固件调用接口实现中。具体来说,pdc_iodc_print()函数负责调用PA-RISC固件进行I/O诊断控制台打印操作。
1. **竞争条件问题**:iodc_dbuf[]是一个全局共享缓冲区,用于在调用固件时传递数据。当多个CPU核心同时执行pdc_iodc_print()时,如果没有适当的锁保护,会出现数据竞争。多个线程可能同时修改同一缓冲区,导致数据损坏或不一致状态。正确的做法是使用pdc_lock自旋锁来序列化对iodc_dbuf[]的访问。
2. **缓冲区溢出风险**:函数未对传入数据的长度进行检查。如果用户提供的数据超过iodc_dbuf[]的容量,会导致缓冲区溢出,可能覆盖相邻的内存区域,包括内核栈或其他重要数据结构,从而造成任意代码执行或系统崩溃。
3. **冗余缓冲区问题**:iodc_retbuf[]缓冲区被删除,因为其存在可能导致混淆或不必要的内存使用。
利用方式:攻击者需要具有本地访问权限和低权限用户身份。通过精心构造的输入数据触发pdc_iodc_print()函数,可能导致内核态缓冲区溢出或竞争条件利用。由于该漏洞在内核上下文中触发,成功利用可能允许攻击者提升权限至root级别,或导致内核panic造成拒绝服务。