Synacktiv 的安全研究员 Baptiste Mayaud 披露了 FastCGI 库中的一个高危漏洞,编号为 CVE-2025-23016(CVSS 9.4)。该漏洞源于对参数长度的不当处理,可能导致可利用的堆溢出,尤其会影响摄像头和嵌入式系统等低功耗设备。
FastCGI 是一个 C 语言库,旨在将 Nginx 或 Apache 等 Web 服务器与第三方 Web 应用程序连接起来。它广泛应用于需要轻量级编译应用程序的环境。虽然 PHP-FPM 重新实现了 FastCGI,并且不受影响,但许多嵌入式技术仍然直接使用了该易受攻击的库。
该漏洞存在于 ReadParams() 函数中。在处理传入的 HTTP 参数时,FastCGI 库会错误地计算内存分配所需的总大小:
“可能是为了在键和值之间存储‘=’字符,并在字符串末尾添加一个空字节,因此在最终的分配计算中添加了‘+2’, ”Baptiste Mayaud解释道。
在 32 位系统上,此加法运算可能导致整数溢出,导致尽管预期数据量很大,但内存分配却很小。当数据被复制到这个过小的缓冲区时,就会发生堆溢出。
能够控制HTTP 请求参数的攻击者可以:
-
触发堆溢出。
-
损坏的内存结构。
-
可能在受影响的设备上执行任意代码。
这尤其危险,因为嵌入式系统通常缺乏现代漏洞缓解措施。
在演示中,Mayaud 使用 FastCGI 设置了一个存在漏洞的 lighttpd 服务器。通过利用该漏洞,他成功操纵堆内存,覆盖了 FastCGI 流结构中的函数指针。最终,他通过劫持 fillBuffProc 函数指针实现了任意代码执行。
该漏洞利用策略基于获取 FCGX_Stream 结构体之前的易受攻击指针,然后覆盖其缓冲区以重写该结构体,并将 fillBuffProc 替换为系统的 PLT 条目。Mayaud 发布了针对此漏洞的概念验证 (POC) 漏洞利用代码。
建议用户将 FastCGI 库升级到2.4.5或更高版本,该版本已修复该错误。
参考文章:
https://www.synacktiv.com/en/publications/cve-2025-23016-exploiting-the-fastcgi-library
原文始发于微信公众号(Ots安全):CVE-2025-23016:严重的 FastCGI 堆溢出威胁嵌入式设备,PoC 发布
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论