CVE-2024-14030Sereal::Decoder是Perl编程语言中广泛使用的一个高性能序列化数据解码模块。CVE-2024-14030漏洞影响其4.000至4.009_002版本,根本原因是该模块在其发行包中嵌入了一个存在已知漏洞的旧版Zstandard(zstd)压缩库。该底层库受CVE-2019-11922影响,在特定场景下存在竞争条件。攻击者可以利用这一缺陷,通过发送特制的恶意数据包,在解码过程中触发底层库的越界写入错误。这不仅可能导致目标服务崩溃(拒绝服务),在特定条件下还可能允许攻击者执行任意代码,严重威胁系统的机密性、完整性和可用性。
该漏洞属于供应链安全风险,源于第三方依赖库的缺陷。Sereal::Decoder为了支持Zstandard压缩算法,直接集成了zstd库的源代码。然而,受影响版本集成的zstd库版本低于1.3.8,该版本的单次压缩函数中存在严重的竞争条件漏洞。具体技术原理是:当多线程环境下的压缩操作使用了小于推荐大小的输出缓冲区时,zstd库的内部状态管理可能出现竞态,导致写入指针越过缓冲区的末尾。在Sereal::Decoder的上下文中,攻击者无需进行复杂的认证或用户交互,仅需通过网络向使用受影响版本解码器的应用程序发送精心构造的Sereal数据流。当应用程序尝试解码这些数据时,会调用存在漏洞的zstd函数。由于缓冲区大小检查和写入操作之间的同步机制失效,攻击者可控制写入越界的数据内容和位置。这种内存破坏行为可以被用于覆盖堆上的关键数据结构或返回地址,从而绕过现代操作系统的安全保护机制,最终实现远程代码执行或导致服务进程崩溃。