curl 和 libcurl 中的一项高严重性漏洞,改变了人们通常理解客户端安全问题的方式。CVE-2026-92392 会在 HTTP/2 上传期间触发,但发送恶意响应的是接收上传内容的服务器。客户端传输数据时,恶意服务器可以发出特定的流重置响应,使 curl 保留一个已经释放对象的引用。结果是内存损坏。curl 项目表示,在构建方式、架构、内存分配器、时序和协议条件同时满足的情况下,这个缺陷已被证明可以转化为远程代码执行。

网络安全编辑插图:HTTP/2 上传到达服务器,工程师正在跟踪 curl 修复程序和依赖项清单。

curl 和 libcurl 8.23.0 已包含修复,该版本于 2026 年 10 月 14 日发布。受影响范围为 8.12.0 至 8.22.0。这个范围之所以重要,是因为 libcurl 经常嵌入应用程序、操作系统组件、自动化工具、包管理器、安全产品和服务中,而这些软件未必会公开说明自己使用了 curl。因此,只更新某位管理员工作站上的命令行程序,可能会遗漏更重要的副本。

这是一项补丁工作,但并不是简单地“到处运行更新”。第一步是找出哪些地方通过 HTTP/2 使用 curl 进行上传,包括经由库调用或静态链接应用程序完成的上传。第二步是在永久修复经过供应商软件包和生产变更窗口之前,判断暂时降低协议能力是否可行。第三步是检查执行上传的系统是否只会连接到预期目标,并确认这些目标具备可信边界。

CVE-2026-92392 实际影响什么

curl 公告将其描述为 HTTP/2 上传路径中的释放后使用漏洞。上传期间,服务器可以发送 HTTP/2 RST_STREAM,原因可以是 HTTP_1_1_REQUIRED 或 REFUSED_STREAM。连接本身仍可能保持活动状态,而单次传输已经停止。在存在漏洞的状态机中,curl 随后清理传输和连接时的顺序,会留下指向传输对象的悬空引用。

释放后使用并不自动意味着每次调用都会变成代码执行。它表示软件在内存所有者释放内存后仍继续使用该内存。之后这块内存被什么内容占据,会影响直接结果:可能是崩溃、状态损坏、信息暴露,或者更可控的内存安全故障。在本案中,curl 项目将问题列为高严重性,并记录了从内存错误走向远程代码执行的路径。

受影响版本包括 curl 和 libcurl 8.12.0 至 8.22.0,含首尾版本。8.12.0 之前的版本不受这一具体缺陷影响,8.23.0 则包含修复。区分 curl 与 libcurl 对运营工作很重要:命令行工具只是其中一个使用者,而直接调用该库的应用数量要多得多。某台服务器即使从不运行 curl 可执行文件,只要应用链接了 libcurl,仍可能受到影响。

该漏洞需要 HTTP/2。这不表示每次 HTTPS 传输都会自动存在风险,但团队不能仅因用户没有显式传入 HTTP/2 选项,就推断系统安全。连接到提供 HTTP/2 的 HTTPS 服务时,只要本地构建包含相关支持,curl 就可能协商使用 HTTP/2。应用也可能通过 libcurl 选项或更高层网络框架主动选择 HTTP/2。

存在漏洞的操作是客户端向服务器上传内容。公告描述的场景不是普通下载。这会缩小暴露面,却不意味着问题罕见。备份代理、构件发布器、遥测客户端、文档接收服务、CI 系统、云连接器、客户支持工具、同步软件和内部 API 都经常向外发送数据。有些系统只在较大工作流中的一个小环节使用 curl,这正是仅凭软件包清单可能漏掉实际暴露原因。

攻击者位于接收端

许多防御手册默认危险服务器是提供下载内容的服务器。CVE-2026-92392 恰好反转了这种思维模型:客户端向一个自认为可信的服务器发起上传,而服务器可能是提供恶意协议行为的组件。

这并不意味着攻击者只要在互联网上放置恶意页面,就能利用任意 curl 进程。受害进程必须连接到攻击者控制或影响的服务器,执行上传,协商使用 HTTP/2,并满足进入易受攻击清理序列所需的实现条件。在真实环境中,入口可能是专门构造的恶意端点、被入侵的服务、被重定向的工作流、用户选择的上传目标,或接受远程配置的应用。具体路径取决于外围产品。

curl 项目列出了将该缺陷转化为代码执行所需的具体条件。攻击者需要知道确切的 curl 版本和对象布局,掌握目标架构细节,使用兼容的 libc 分配器和堆布局,预测 nghttp2 与 TLS 1.3 的影响,并在并行传输之间精确控制时序。公开利用还受到短命令约束。这些要求使可靠利用变得困难,但不是把问题视为无害的理由。现代攻击链经常从崩溃或部分内存损坏开始,随后随着目标细节增加而改进。

目前公开记录区分了可利用性与已知在野利用。公告记录了概念验证,以及在精确条件下通向代码执行的路径。NVD 条目没有提供自己的 CVSS 评估,也没有表示该漏洞正在野外被利用。公开概念验证仍是防御者应重视的信号,尤其是在 curl 嵌入长期运行服务或更新缓慢的系统中。但它并不证明每个易受攻击的安装都已被入侵。

为什么 8.23.0 需要谨慎处理

这次修复随一次协调发布进入 curl,同时处理了另外 23 个已公开的安全问题,其中大多数被项目评为低严重性。CVE-2026-92392 是该版本唯一的高严重性问题。这样的集中发布会带来两种相反的运营风险:有些团队看到公告数量较多,认为升级复杂而暂缓;另一些团队更新了可见的命令行软件包,就以为整个依赖图都已覆盖。

正确做法是把紧迫性与统一性分开。紧迫任务是找出执行上传的易受攻击构建,并将这些系统迁移到包含修复的供应商软件包或 curl、libcurl 8.23.0。具体实施路径可能因操作系统、容器基础镜像、语言运行时、设备或商业应用而不同。发行版维护的 libcurl 可能回移修复,却不会以简单版本检查所期待的方式改变上游版本号。因此,安全团队应确认供应商公告和软件包变更日志,而不是只依赖一次字符串比较。

这次发布不只改变了安全代码。项目移除了 SMB 和 SMBS 支持,也引入了其他行为变化与错误修复。这并不意味着升级本身不安全,但说明依赖少见协议、特殊认证流程、自定义 TLS 后端或严格文件处理行为的应用需要测试。安全修复不应为了等待完美的全量测试套件而无限延期;分阶段发布则可以避免补救过程本身中断关键上传服务。

curl 为标准版本和 Rock-solid 分支维护了分开的发布信息。使用受支持长期分支的组织,应检查适用的分支版本是否为 8.14.3、8.16.2 或 8.20.2,而不是直接用最新标准分支替换。真正的问题不是“上游命令行下载页面显示了哪个数字”,而是“哪个受支持软件包包含 CVE-2026-92392 的修复,以及如何证明该软件包已经部署”。

针对该漏洞的实用清单

先检查显而易见的安装位置,但不要止步于此。搜索端点和服务器镜像中的 curl 可执行文件,查询操作系统包管理器,检查容器层,审阅软件物料清单,并查看 libcurl 的构建清单。软件包名称可能不同:主机可能显示 curl、libcurl、开发包或供应商专用运行时包。静态链接可能让库从主机普通软件包数据库中消失,因此应用发布清单和 SBOM 是重要证据。

接着把行为纳入清单。最高优先级的记录通常同时满足以下条件:

  • 运行易受影响的 curl 或 libcurl 构建;
  • 向远程服务上传文件或请求体;
  • 允许协商 HTTP/2,或显式启用 HTTP/2;
  • 处理丢失后会造成实际影响的数据或凭据。

仅用于本地元数据解析的易受影响库,不应与向公共服务上传凭据、构建构件、客户文档或备份的自动化服务接受同样的即时处置。风险排序还应考虑目标控制方式。固定的供应商端点白名单,与接受用户、作业参数、Webhook 或远程配置文件提供任意 URL 的工具,暴露情况不同。

对于静态链接或不透明产品,应向供应商提出三个具体问题:产品是否在受影响范围内包含 curl 或 libcurl;是否可能执行 HTTP/2 上传;哪个构建包含修复。把答案保存在资产记录中。“产品使用 HTTPS”不足以完成评估,“产品界面没有显示 curl”也不是关于嵌入式依赖的答案。

容器环境还需要额外检查。更新主机不会更新旧镜像,重建应用镜像也不一定会替换复制到最终阶段的 curl 库。应同时扫描正在运行的镜像和下一步准备推广的镜像。如果编排器在滚动部署期间保留旧副本,应确认每个活动副本都已离开受影响范围,再关闭事件或漏洞工单。

补丁推进期间的临时缓解

curl 公告列出避免 HTTP/2 这一后备措施,适用于无法立即升级或打补丁的情况。这是缓解措施,不是修复替代品。对于命令行工作流,操作员可能可以为限定的传输强制使用 HTTP/1.1。对于应用,等效设置可能是库选项、代理策略、服务网格规则或供应商配置。必须验证控制确实生效:如果底层应用通过另一条代码路径打开独立连接,在某个包装脚本中禁用 HTTP/2 并没有帮助。

临时协议限制也可能产生副作用。有些服务要求 HTTP/2,依靠连接多路复用提升吞吐量,或者按协议采用不同的认证和超时行为。记录例外情况,明确负责人,并设置到期日期。若没有人知道缓解措施是否仍在启用,导致它长期存在,就会变成另一项清单问题。

在可能的情况下,临时限制上传目标。为自动化作业执行出站白名单;除非工作流确实需要,否则拒绝用户提供的目标;并验证重定向,而不是静默地沿着重定向链访问意外主机。这些措施可以降低易受攻击客户端连接恶意接收服务器的机会,却不能替代补丁:合法目标也可能被入侵,宽泛白名单仍可能包含攻击者控制的基础设施。

不要通过关闭证书验证或削弱 TLS 来应对。公告中的利用条件包括服务器能够通过客户端证书检查,这提醒我们:普通传输认证并不能完全防御已被入侵或由恶意方运营的端点。取消证书验证只会扩大攻击面,并不能解决内存安全缺陷。

如果易受攻击的客户端曾暴露,应检查什么

存在易受攻击版本不等于已经被攻陷,崩溃也不等于已经发生利用。不过,曾暴露的上传客户端值得进行符合比例的审查。确认相关时期访问过哪些目标、发送了哪些文件或请求体、使用了哪个确切的 curl 或 libcurl 构建,以及是否协商了 HTTP/2。即使 curl 自身只记录了笼统的传输错误,应用日志、代理日志、TLS 遥测和端点进程记录也可能回答这些问题。

寻找异常终止、反复重试某个不寻常端点、上传器启动的子进程发生变化、出现意外文件,以及失败传输后立即开始的异常出站连接。这些是分诊信号,不是 CVE-2026-92392 独有的特征。正常上传失败也可能触发重试,崩溃也可能触发重启,因此解释必须结合主机预期行为。

如果进程能够访问凭据、令牌、签名密钥或敏感本地文件,应单独评估这些访问权限。已公开的漏洞是客户端内存安全问题,并未被描述为直接的凭据泄露漏洞。然而,如果上传器成功执行代码,攻击者可能取得该进程原本拥有的权限和数据。当调查无法证明进程始终处于预期边界内时,应轮换秘密,并在日常保留策略删除相关记录前保存日志。

对于高价值系统,应比较易受影响构建与修复构建,并保留更新证据。记录软件包校验和或镜像摘要、正在运行的进程版本以及部署时间。如果产品供应商提供的是热修复而非上游版本,应记录供应商公告和软件包构建标识。同一主机上存在多个库副本时,这类证据比写着“curl 已打补丁”的工单备注更有用。

开发团队应作出的改变

开发者应把 libcurl 视为应用安全边界的一部分,而不是藏在业务逻辑下方、可以随意替换的工具。如果运行时镜像提供了不同的共享库、基础镜像过期,或者重建时包管理器解析出易受影响版本,那么在构建文件中固定版本仍然不够。应在 SBOM 中明确依赖,并使更新路径可重复执行。

审查上传代码中的目标控制、重定向行为、重试逻辑和协议选择。只向固定端点上传的服务,与接受任意 URL 的服务拥有不同威胁模型。重试库可能使用与第一次不同的选项建立第二次连接。即使应用没有显式声明,代理也可能协商 HTTP/2。安全审查应沿着真实连接路径进行,而不是只看最方便的配置文件。

限制上传工作进程的权限。让它只拥有任务需要的最小文件系统、网络和凭据访问权限。读取本地文件与发布文件应使用不同身份,避免为通用传输工作进程授予云管理员凭据、签名密钥或主机容器套接字访问权。最小权限不能消除漏洞,却能把代码执行事件限制为服务事故,而不是扩大为主机失陷。

围绕中断的 HTTP/2 传输、服务器重置、重试和清理增加负向路径测试。目标不是在生产环境复现利用,也不是构建攻击能力,而是验证应用能安全处理失败传输、实际加载了修复后的依赖,并确认重启与重试行为不会绕过更新形成第二条路径。

运营团队应如何沟通

最有用的内部通知应当精确:CVE-2026-92392 影响 curl 和 libcurl 8.12.0 至 8.22.0;易受攻击场景涉及 HTTP/2 上传;上游修复版本是 8.23.0;嵌入式库副本同样计入范围。不要通知所有员工更新浏览器或停止使用互联网。大多数人并不运行受影响的上传工作流,而无差别警告会让下一次严重告警更难被重视。

要求服务负责人回答:系统是否上传数据,连接哪些目标,是否启用 HTTP/2,以及哪个软件包或镜像提供 curl。为他们提供可验证的临时缓解措施,并指定永久更新负责人。这样可以把宽泛的依赖告警转化为一组可以回答的问题。

curl 项目的披露还带来更广泛的启示。一个成熟且受到大量审查的组件,仍然可能发布严重的内存安全缺陷。这不应引发恐慌式替换,让团队用未经验证的替代品换掉可靠软件;它应推动更清晰的依赖可见性、更快的补丁传播、更安全的进程权限,以及对网络协议协商方式更明确的证据。

结论

CVE-2026-92392 值得优先处理,因为它同时具备广泛的依赖覆盖面,以及在客户端上传期间由服务器触发的特性。它不是对每个 curl 安装的普遍远程接管,公开的利用条件也相当苛刻。但当前没有已知在野利用标记,并不意味着可以长期保留未打补丁的上传服务。

找出每一个 curl 和 libcurl 副本,确认哪些副本通过 HTTP/2 上传,把易受影响构建更新到供应商支持的修复版本,并仅将 HTTP/1.1 或目标限制作为临时控制。随后保留证据,证明实际运行的进程——而不只是构建文件或基础镜像——已经包含修复。这正是该漏洞需要的响应:具体、理解依赖关系,而且足够冷静,能够找到那些没人记得还存在的副本。

来源

本文事实依据包括 curl 项目发布的《HTTP/2 upload Use-After-Free — CVE-2026-92392》、美国国家标准与技术研究院 NVD 条目、Daniel Stenberg 对“从 UAF 到 RCE”的背景说明、《The Hacker News》相关讨论、curl 8.23.0 变更记录,以及 curl 发布表。相关来源分别为: