CVE-2026-28780Apache HTTP Server 的 mod_proxy_ajp 模块存在严重的基于堆的缓冲区溢出漏洞。该漏洞发生在当 mod_proxy_ajp 尝试连接并与恶意的 AJP 后端服务器通信时。攻击者可以通过控制恶意 AJP 服务器发送特制的 AJP 消息数据包,从而触发 mod_proxy_ajp 的解析逻辑错误。这将导致 mod_proxy_ajp 在堆缓冲区的末尾之后写入 4 个由攻击者控制的字节。由于该漏洞无需认证且无用户交互即可通过网络触发,攻击者可利用此漏洞造成服务拒绝或可能在受影响系统上执行任意代码,完全危及系统安全。
该漏洞的根源在于 Apache HTTP Server 的 mod_proxy_ajp 模块在处理从后端 AJP 服务器接收到的网络数据包时,对特定消息长度的校验逻辑存在缺陷。当 Apache 作为反向代理使用 AJP 协议连接后端时,mod_proxy_ajp 会根据消息头中的长度字段分配内存缓冲区。然而,恶意构造的 AJP 消息可以欺骗长度计算逻辑,使得实际接收或处理的数据量超出了预分配的堆缓冲区大小。
具体而言,漏洞允许攻击者在堆缓冲区末尾之后精确写入 4 个字节的数据。在复杂的堆内存布局中,这 4 字节的越界写入虽然看似微小,但足以破坏相邻堆块的元数据(如大小标志位或指针)。通过精心构造内存布局并利用这些被破坏的指针,攻击者可以覆盖关键的函数返回地址或虚表指针,进而劫持程序的执行流。结合堆喷射等技术,攻击者可绕过地址空间布局随机化(ASLR)等防御机制,最终实现远程代码执行(RCE),获取 Web 服务的 privileges。