CVE-2026-34831Rack 是 Ruby 模块化 Web 服务器接口。在特定版本前,Rack::Files#fail 方法设置 Content-Length 时错误使用了 String#size 而非 String#bytesize。当响应体含多字节 UTF-8 字符时,声明长度小于实际字节数,导致 HTTP 响应帧错误,可能引发响应去同步。
该漏洞的核心在于 Ruby 中字符串字符数与字节数的混淆。String#size 返回字符数,String#bytesize 返回实际网络传输字节数。对于多字节 UTF-8 字符,两者存在差异。攻击者可请求不存在的路径并注入百分比编码的多字节字符,触发 Rack 返回 404 响应。由于路径被反射到响应体中,且 Content-Length 基于字符数计算(偏小),而实际传输基于字节数,导致 HTTP 响应截断。这会使得后续连接中的数据被错误解析,从而实现 HTTP 请求走私或缓存投毒。