深入研究CVE-2022-23943——一个新的Apache内存破坏漏洞

Apache RCE和DoS漏洞863x300

几天前,据报道,新的Apache版本2.4.53包含了对几个错误的修复,这些错误将众所周知的HTTP服务器的用户暴露在攻击中:CVE-2022-22719涉及到HTTP服务器中的一个错误mod_luaCVE-2022-22720使服务器暴露于HTTP走私攻击,CVE-2022-22721使服务器在处理大型XML输入时暴露于缓冲区溢出,CVE-2022-23943是一个漏洞mod_sed模块,当触发时可能导致DoS和可能的RCE。本文将重点讨论后者。

mod_sed是一个Apache模块,提供相同的功能GNU的流编辑器工具sed,允许对流进行操作。它可以用作输入过滤器来修改HTTP POST请求的主体,也可以用作输出过滤器,在将服务器的响应发送到客户端之前修改它们。

在这篇博文中,我们概述了Apache CVE-2022-23943漏洞,并指导如何修复该问题,以及我们在研究此漏洞时发现的缓解选项。

这项研究也推动了我们的发展语境分析扫描器,它自动检测易受攻击的配置并应用缓解措施,以确定CVE是否可在特定应用程序中被利用。

什么是CVE-2022-23943?

CVE-2022-23943是一个拒绝服务漏洞mod_sed模块。该漏洞影响到2.4.52以下的所有Apache 2.4版本(包括)mod_sed过滤器用于请求或响应编辑。

这个Apache漏洞是由于缓冲区处理不当造成的,当包含大量数据的请求或响应被模块编辑时,可能会允许越界写入。

谁会受到CVE-2022-23943的影响?

CVE-2022-23943影响所有2.4。xversions of the Apache HTTP server up to and including version 2.4.52, when running with a non-default configuration where themod_sedFilter模块用于编辑请求或响应。

当配置mod_sed,可以添加两种类型的过滤器-

  1. AddInputFilter-该过滤器将处理数据从客户端收到,然后将其转发到Apache服务器
  2. AddOutputFilter-该过滤器将处理即将从Apache服务器发送的数据,然后将其转发到客户端

一个易受攻击的Apache实例将有一个配置文件,其中一个配置文件上有一个Sed输入或输出过滤器路线目录指令。

下面的示例演示了一个易受攻击的配置,其中所有对html文件的请求都将由mod_sed,然后将请求主体中的每个字符替换为字母Z -

处理HTML文件的所有请求方法

(实际的替换逻辑不影响此漏洞的可利用性)

由于来自客户机的数据通常是不可信的(不像已经存在的来自服务器的数据),任何添加输入过滤器的服务器(AddInputFilter)更有可能受到这个问题的影响。


预订x射线安全工具的演示!
观看x射线在行动

CVE-2022-23943技术总结

像最初的GNU流编辑器一样,mod_sed使使用正则表达式模式用于输入和输出流修改。

修改提交围绕着改变int类型(4字节带符号)到apr_size_t类型(4或8字节无符号),触发此问题涉及发送非常大的数据包,大小为2GB(导致整数签名问题)或4GB(导致整数溢出问题)。

触发此漏洞appendmem_to_linebuf函数,在sed1.c,调用memcpy函数,以便向求值的流缓冲区写入。

appendmem_to_linebuf函数

实际上有两种情况我们能够触发这个漏洞。在第一个中,4GB的数据被发送到服务器,这导致了当函数运行时崩溃sed_eval_buffer仍在处理流。的函数调用appendmem_to_linebuf由于缓冲区大小计算错误,导致写越界:

appendmem_to_linebuf

在第二个场景中,使用发送到服务器的2GB数据触发漏洞。由于Apache支持最大2GB的请求体大小,在这种情况下,当试图完成流缓冲区的处理时,该漏洞被触发。的调用中可以找到这个实例appendmem_to_linebuf由以下函数调用sed_finalize_eval调用append_to_linebuf为了保证空终止符被添加到缓冲区的末尾:

appendmem_to_linebuf

CVE-2022-23943的影响是什么?

通过在请求体中发送大量数据,可以很容易地利用该漏洞mod_sedfilter模块需要处理上述数据,这会导致HTTP服务器进程的一个拒绝服务和短暂停机。如果攻击是通过在很长一段时间内向服务器发出多个请求来执行的,则可能发生完全的拒绝服务,导致所有服务器进程反复关闭。

如何修复CVE-2022-23943?

为了修复这个Apache漏洞,我们建议将Apache升级到最新版本,即目前的2.4.53。如果无法升级,我们强烈建议应用补丁中的哪个修复了此漏洞mod_sed过滤模块。

CVE-2022-23943有哪些可用的缓解选项?

如果无法将Apache升级到最新版本或应用补丁,则需要限制POST方法的主体大小,以避免触发漏洞。要做到这一点,您需要使用LimitRequestBody指令在Apache的配置文件中。

该指令可用于设置请求大小的限制,从0到2GB的数据。

例如,要将POST限制为1GB的数据,可以将以下行添加到httpd . conf

LimitRequestBody 1073741824

此缓解仅针对恶意客户端请求的攻击提供保护,而不适用于以下情况mod_sed用于修改易受攻击服务器上已经存在的大文件(>2GB)。

使用JFrog Xray查找易受攻击的版本

除了暴露新安全漏洞通过自动安全扫描,JFrog为开发人员和安全团队提供了轻松访问其软件最新相关信息的方法JFrog Xray SCA工具

JFrog Xray自动执行语境分析cve,加快了解决在生产中实际可利用的漏洞的时间。请继续关注未来的增强,包括基于软件配置检测cve的适用性。

与JFrog安全研究保持同步

关注JFrog安全研究团队的最新发现和技术更新安全研究博客文章并在推特上@JFrogSecurity