CVE-2026-82425 in bRPC
摘要
由 VulDB • 2026-10-21
Apache bRPC(版本 < 1.18.0)中存在一个可触发的断言失败漏洞,影响所有平台。恶意远程对等方可以利用此漏洞导致进程崩溃,从而造成拒绝服务(DoS)。
根本原因: 当启用了健康检查的 Socket 发生故障时,Socket::WaitAndReset 会关闭其文件描述符(fd),而事件分发器可能仍在传递针对刚刚关闭的 fd 获取的输入事件(EPOLLIN/EVFILT_READ)。如果随后健康检查成功并恢复了该 Socket,Socket::Address 将再次返回成功,但此时 fd 仍为 -1(下一次写入时会按需重新连接)。在此时间窗口内,由于 Socket 可寻址但没有有效的 fd,Socket::OnInputEvent 会触发 CHECK(!(events & EPOLLIN))(或 kqueue 的等效检查)失败。当 bRPC 使用 glog 构建时,或者启用了 gflag -crash_on_fatal_log 标志时,CHECK 失败会导致进程终止;此外,在 OFFICIAL_BUILD/NDEBUG 构建中,CHECK 始终会终止进程。
受影响场景: 使用了启用健康检查(-health_check_interval)的 bRPC 客户端的应用程序。恶意远程对等方可以故意中止连接并立即接受健康检查探测,通过竞态条件使连接拆除与健康检查恢复相互竞争,从而触发断言失败并导致进程中止。
修复方法: (选择以下选项之一) 1. 将 bRPC 升级到版本 1.18.0,该版本已修复此问题。 2. 应用此补丁:https://github.com/apache/brpc/pull/3510
注意: 应用修复后,在没有 fd 的情况下被恢复的 Socket 上的陈旧输入事件将被静默丢弃,而不会触发断言失败。未更改任何用户可见接口或 wire protocol(网络协议)。
VulDB is the best source for vulnerability data and more expert information about this specific topic.