OpenSSL HollowByte 漏洞:11 字节载荷即可瘫痪全球服务器内存

📅 2026/7/20 21:30:54 👁️ 阅读次数 📝 编程学习
OpenSSL HollowByte 漏洞:11 字节载荷即可瘫痪全球服务器内存

Okta 红队(Red Team)在七月披露了一个潜伏于 OpenSSL 核心代码深处的拒绝服务漏洞,代号为 HollowByte。这个缺陷的诡异之处在于,攻击者无需任何身份凭证,仅凭一封 11 字节的恶意数据包,就能让一台运行中的 Web 服务器逐步陷入内存枯竭,直至被系统 OOM 机制强制终止。更棘手的是,OpenSSL 官方早在六月九日便已静默修复,却未发布安全公告、未分配 CVE 编号,也未在更新日志中明确提及——这意味着大量依赖自动漏洞扫描的企业,至今仍暴露在风险之下。


漏洞本质:一次握手阶段的"空头支票"

要理解 HollowByte 的杀伤逻辑,得先回到 TLS 握手的起点。在标准流程中,客户端向服务端发起连接时,每条握手消息前都会附带一个 4 字节的头部,其中 3 字节用来声明后续消息体的长度。正常情况下,服务端收到头部后,会等待对应长度的数据完整到达,再进行下一步处理。

然而,存在缺陷的 OpenSSL 版本在这个环节做了过于"慷慨"的假设:它一旦读取到头部声明的长度,便立刻在内存中预留出相应大小的缓冲区,哪怕后续数据尚未抵达。攻击者正是钻了这个空子——发送一个精心伪造的 11 字节头部,谎报接下来有数万字节的消息体,然后直接断开 TCP 连接。服务端的工作线程会因此陷入无限期等待,而那块被预分配的内存(最高可达 131KB)则成了无人认领的"孤儿"。


内存碎片化的致命陷阱

单看 131KB 似乎微不足道,但真正的杀招藏在 glibc 的内存分配器行为里。当 OpenSSL 因连接中断而释放这些缓冲区时,底层的 GNU C 库并不会把中小块内存立即归还给操作系统,而是将其保留在进程自身的堆池中,以备后续复用。攻击者通过海量并发连接,并随机化每次声明的虚假长度,使得分配器根本无法高效合并和重用这些零散区块。堆内存由此产生严重碎片化,进程的常驻内存(RSS)持续攀升,且永不回落。

Okta 在实测中给出了触目惊心的数据:一台配置 1GB 内存的 NGINX 服务器,在攻击流量仅 547MB 碎片化后即被 OOM 杀死;而一台 16GB 内存的主机,在遭受持续冲击后,竟丢失了四分之一的可用内存。更隐蔽的是,由于攻击者发送的实际流量极低,传统网络防火墙和 DDoS 清洗设备几乎无法察觉异常,流量特征完全处于正常阈值之内。


波及范围:互联网基础设施的根基动摇

OpenSSL 作为支撑全球加密通信的基石库,其影响面远超一般应用层漏洞。从 NGINX、Apache 这类主流 Web 服务器,到 Python、Ruby、Node.js 等编程语言的加密模块,再到 MySQL、PostgreSQL 等数据库的 TLS 连接层,几乎只要涉及 HTTPS 或加密传输的场景,底层都有 OpenSSL 的身影。Okta 的报告虽未给出具体统计数字,但业内普遍认为,未打补丁的实例规模可能达到数百万台。

值得庆幸的是,目前尚未确认有野外大规模利用的实锤。然而,这种"无 CVE、无公告"的静默修复方式,给防御方带来了极大的信息不对称。企业常用的 Qualys、Nessus 等漏洞扫描器,因缺乏 CVE 标识作为匹配依据,根本无法识别出风险主机。许多运维团队甚至不知道自己运行的 OpenSSL 版本已经处于危险地带。


修复与应对:手动排查是唯一出路

OpenSSL 开发团队通过引入"渐进式缓冲区分配"策略堵上了这个口子。新版本的代码不再盲目信任头部声明的长度,而是根据实际到达的网络数据量按需扩展内存。已确认的安全版本包括:OpenSSL 4.0.1、3.6.3、3.5.7、3.4.6 以及 3.0.21,这些补丁均于六月九日随版本发布。对于仍在使用 1.1.1 和 1.0.2 延长支持分支的用户,则需要通过付费支持渠道获取对应修复版。

对于安全运维人员而言,当前最紧迫的任务是手动清点环境中所有 OpenSSL 实例的版本号,包括操作系统包管理器安装的、容器镜像内嵌的、以及各类商业设备或语言运行时静态链接的副本。由于下游发行版(如 Red Hat、Debian)通常采用"补丁回移"策略——即在旧版本号上打补丁——单纯查看版本字符串可能产生误判,必须结合厂商的具体安全通报进行确认。


深层反思:信任边界与披露争议

HollowByte 的命名颇具隐喻意味——"空洞的字节",恰如攻击者开出的那张永远无法兑现的内存支票。Okta 红队公开细节后,社区对 OpenSSL 安全团队的响应方式产生了分歧。官方将该问题归类为"bug 或加固修复",而非正式漏洞,因此未触发 CVE 分配流程。但对比今年一月,OpenSSL 曾为另一个需要特定配置才能触发的证书压缩内存分配问题(CVE-2025-66199,Low 级别)授予 CVE 编号,HollowByte 的无条件触发特性显然更具威胁性。

这一事件再次警示:在供应链安全领域,"静默修复"虽能避免恐慌,却也可能让防御体系出现盲区。对于承载关键业务的网络基础设施,主动追踪上游代码变更、建立版本基线监控,远比依赖自动化扫描工具更为可靠。