六周追查!四行代码修复 hyper HTTP 库中隐藏多年的竞态条件漏洞 📅 2026/6/30 4:04:53 【Cloudflare 发现 hyper HTTP 库漏洞】Cloudflare 基于 [_Workers_] 用 Rust 构建的 [_Images_] 服务运行在其边缘网络的每台机器上为处理客户端连接使用了开源 HTTP 库 [_hyper_]。去年引入 Images 绑定2025 年底对该绑定重新架构推出后不久收到报告绑定转换请求偶尔失败仅针对较大图像响应返回 200 状态码且无错误日志图像数据被截断。【hyper 库与 Images 绑定工作机制】开发者在 Cloudflare 开发时可通过绑定构建全栈应用Images 绑定将图像优化与交付解耦允许按任意顺序应用优化参数。图像数据通过管道在服务中流动绑定通过 Workers 运行时管理的套接字连接与 Images 通信hyper 在 Images 服务端管理连接将响应数据写入内部缓冲区后刷新到套接字。【采用本地连接带来问题】Cloudflare 网络传入流量通过 FL 路由最初图像数据从 Workers 运行时经 FL 流向 Images 服务2025 年 12 月Images 团队用新中间件服务取代 FL采用 Unix 套接字绕过 FL 和网络栈开销但推出后几天就收到客户报告。【问题表象200 OK 实则不然】问题迹象来自采用非标准设置的客户两层图像处理中内部处理流程返回截断响应外部处理流程收到 HTTP 200 响应但实际主体只有预期一小部分浏览器收到截断图像会部分渲染或显示损坏图标。【黑暗中调试寻找问题根源】沿着请求路径逐步深入测试构建复现环境证实问题与客户配置无关调查超时问题排除超时导致截断的可能更新 hyper 版本发现漏洞在各版本均出现本地复现发现漏洞只在生产路径出现排除 Workers 运行时问题通过分布式跟踪将问题范围缩小到内部处理流程对中间件服务检测排除中间件问题在 Images 服务内部深入跟踪发现请求处理和图像编码正常。唯一一致信号是漏洞与时间有关。【内核中揭示真相】应用级调试工具无法发现问题使用 strace 记录 Images 服务系统调用。设置跟踪需谨慎扩大筛选范围会使进程变慢漏洞消失强化问题与时间有关的理论。比较成功和失败请求的系统调用输出发现失败请求过早调用 shutdown证实漏洞是间歇性竞态条件新中间件改变读取方速度使缓冲区易填满暴露隐藏缺陷。【深入调度循环找到漏洞所在】hyper 的 HTTP/1 连接生命周期由状态机驱动poll_flush 之前的 let _ 是漏洞所在丢弃 Poll::Pending 信号导致刷新未完成就关闭连接。curl 不会触发漏洞因为其读取速度快缓冲区不会填满。【修复漏洞别忘了刷新】修复方案是检查刷新操作是否完成构建自定义包装器模拟满的套接字缓冲区进行测试。最初在调度循环应用修复方案虽有效但存在问题后在实际调用 shutdown 处应用修复方案使调度循环不变只在关闭前添加刷新操作。部署修复方案后问题消失。【收获与展望】应用级工具对隐藏漏洞有盲点故障信号指向连接层与时间有关的漏洞突破来自内核级工具 strace。将修复方案和测试合并到 hyperium/hyper 中未来版本可用。运行应用补丁的内部分支稳定绑定架构。本月宣布 Images 绑定支持托管图像操作可在文档中了解绑定工作原理。【相关文章】2026 年 6 月 25 日介绍如何为 Cloudflare Workflows 构建 Saga 回滚机制2026 年 6 月 24 日讲述通过面向所有人的 OAuth 解锁 Cloudflare 应用生态系统2026 年 6 月 19 日提及为 AI 代理提供临时 Cloudflare 账户2026 年 6 月 17 日说明将更多代理框架引入 Cloudflare从 Flue 开始。【开始使用】有免费计划、企业版可比较计划、获取推荐、申请演示、联系销售。【资源】包括学习中心、分析师报告、Cloudflare Radar、Cloudflare TV、案例研究、网络研讨会、白皮书、开发者文档、theNet。【解决方案】有连接云、SSE 和 SASE 服务、应用服务、网络服务、开发者服务。【社区】涵盖社区中心、Project Galileo、Athenian Project、Cloudflare for Campaigns、Connect 2024。【支持】包含帮助中心、Cloudflare 状态、合规性、GDPR、信任与安全。【公司信息】有关于 Cloudflare、团队、投资者关系、新闻媒体、招聘、多元化公平与包容、影响/ESG、网络地图、标志与媒体资料包、成为合作伙伴等内容。