CVE-2026-9679CVE-2026-9679是undici HTTP客户端库中cookie解析器存在的一个安全漏洞。该漏洞源于undici的parseSetCookie函数在解析Set-Cookie头时,通过qsUnescape对cookie值进行了百分号解码(percent-decoding),将类似%0D%0A、%00、%3B、%3D等编码序列转换为其对应的字面字节。然而,根据RFC 6265 §5.4规范,cookie值不应进行任何解码处理,浏览器也不会对其进行解码。这一不当的解码行为导致了一个严重的安全问题:当应用程序解析上游服务器返回的Set-Cookie头后,将解析后的cookie值转发到下游响应头中(如代理中间件、SSR框架等场景),攻击者控制的恶意上游服务器可以通过精心构造的cookie值注入任意的Set-Cookie、Location或Cache-Control等响应头。这可能导致会话固定(session fixation)、开放重定向(open redirect)以及缓存投毒(cache poisoning)等多种攻击。该漏洞由PR #3789引入,影响undici 7.0.0及以上版本。CVSS评分为5.9,属于中危级别,攻击向量为网络,无需认证和用户交互,机密性和完整性影响均为高,完整性影响为无。
从技术层面分析,该漏洞的核心问题在于undici的cookie解析器对Set-Cookie头中的值进行了非标准的百分号解码操作。具体而言,parseSetCookie函数内部调用了qsUnescape方法,该方法会将URL编码的字符(如%0D%0A代表CRLF、%00代表NUL、%3B代表分号、%3D代表等号)转换为其原始字节形式。RFC 6265明确规定cookie值不应进行解码处理,浏览器在处理cookie时也不会执行解码操作,因此undici的这一行为违反了规范。攻击利用方式如下:攻击者控制一个恶意上游服务器(或通过中间人攻击),在返回的Set-Cookie头中注入编码后的特殊字符,例如设置Cookie值为evil%0D%0ALocation:%20http://attacker.com。当受害应用程序使用undici的parseSetCookie解析该cookie后,得到的值将包含字面的CRLF字符。如果该应用程序将解析后的cookie值直接转发到下游HTTP响应的Set-Cookie头中,CRLF字符将导致HTTP响应头分割(header injection),从而注入额外的响应头如Location,实现开放重定向攻击。同样,攻击者可以注入Cache-Control头来执行缓存投毒,或注入额外的Set-Cookie头来实施会话固定攻击。该漏洞的触发条件包括:1)应用程序使用undici的cookie解析API(parseSetCookie、parseCookie或getSetCookies);2)应用程序将解析后的cookie值直接转发到响应头中而未进行适当的过滤。