- Cookie 前缀(__Host-、__Secure-)强制浏览器限制,以防止 cookie 投掷或会话固定等攻击。
- 浏览器将 cookie 作为原始字节发送,服务器解析差异可能允许攻击者绕过前缀保护。
- 在 cookie 名称前使用 Unicode 空白字符(例如 U+2000)可以欺骗浏览器将其视为非受限 cookie,而像 Django 这样的服务器则会修剪空白并将其视为带前缀的 cookie。
- Safari 会阻止多字节 Unicode 空白,但允许像 U+0085 或 U+00A0 这样的单字节字符。
- Java 服务器(Tomcat、Jetty)中的旧版 cookie 解析($Version=1)可以将单个 cookie 字符串拆分为多个 cookie,绕过前缀检查,从而从子域注入高权限 cookie。
- 拥有 XSS 的攻击者可以使用 Unicode 技巧注入伪造的 __Host- cookie;当存在多个同名的 cookie 时,许多框架(例如 Django)会取最后一个值,从而启用会话固定或反射型 XSS。
- 根据其文档,Django 认为依赖来自不可信子域的 cookie 的攻击不属于安全漏洞。
- 创建了一个 Burp Suite 自定义操作,以帮助检测后端对 cookie 前缀绕过的漏洞。