漏洞总结:[Security] Denial of Service via Blocking Event Loop in Model Workers 漏洞概述 漏洞名称:模型工作器中阻塞事件循环导致的拒绝服务(Incomplete Fix for ff66426) 漏洞编号:#3833 严重程度:High (CVSS: 3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H) 根本原因:在 和 中,部分同步阻塞函数(如 GPU 推理调用)未使用 包装,导致 FastAPI 的异步事件循环被完全冻结。 背景:虽然之前的提交 修复了 中的阻塞问题,但遗漏了其他三个位置的相同模式。 影响范围 受影响产品:lm-sys/FastChat 受影响版本:<= 0.2.36 影响后果: 1. 拒绝服务 (DoS):单个未认证的 HTTP 请求即可冻结整个模型工作器,导致所有其他请求(包括心跳、健康检查)无法处理。 2. 服务下线:控制器因收不到心跳而注销工作器,导致所有模型不可用。 3. 级联故障:在 中,一个工作器的故障会影响所有模型。 4. 无认证要求:攻击者无需 API Key 即可利用。 修复方案 核心修复:将所有同步阻塞调用(如 和 )包裹在 中,将其卸载到线程池执行,避免阻塞事件循环。 具体代码修改: 修复前 (Vulnerable): 修复后 (Fixed): POC 代码与利用示例 1. 漏洞利用代码 (Exploit POC) 以下代码展示了如何构造请求以触发阻塞: 结果:健康检查被延迟约 9 秒(取决于推理时间),证明事件循环被冻结。 2. 修复验证代码 (Verification) 以下代码展示了修复后(使用 )的行为: 结果:健康检查立即响应,证明事件循环未被阻塞。 3. 关键代码片段对比 (Source Code Snippets) 漏洞位置 1: (Line 112) 漏洞位置 2: (Line 218) 漏洞位置 3: (Line 236) 修复参考 (已修复的 在 Line 209)