禁用libpsl时curl存在公共后缀Cookie注入漏洞

本文详细披露了curl库在禁用libpsl(公共后缀列表)支持时存在的一个安全漏洞。攻击者可利用此漏洞向公共后缀域(如.co.uk)注入Cookie,导致该Cookie被发送至其他不相关的同级域名,从而可能引发会话固定或请求中毒攻击。

摘要:

当libcurl在编译时禁用libpsl(公共后缀列表)支持后,其对Cookie的Domain属性验证存在缺陷。该缺陷允许恶意服务器为公共后缀(如.co.uk)设置Cookie,并使其能够被共享同一Cookie Jar的其他无关同级域名发送,从而构成安全风险。

复现步骤:

  1. 构建无libpsl支持的curl:例如使用命令 ./configure --disable-shared --without-libpsl && make -j,并确认 curl --version 输出中未列出PSL功能。
  2. 运行恶意HTTP服务器:该服务器在请求的Host头以attacker.co.uk开头时,会设置Cookie:Set-Cookie: sess=attack; Domain=.co.uk; Path=/
  3. 存储Cookie:执行命令 /tmp/curl/src/curl -v --resolve attacker.co.uk:8000:127.0.0.1 http://attacker.co.uk:8000/ -c /tmp/cjar2
  4. 在其他主机上重用Cookie Jar:执行命令 /tmp/curl/src/curl -v --resolve victim.co.uk:8000:127.0.0.1 http://victim.co.uk:8000/ -b /tmp/cjar2
  5. 观察结果:可以看到Cookie sess=attack 被发送到了 victim.co.uk,且 .co.uk 被存储在了Cookie Jar中。

影响:

恶意服务器可以向公共后缀域注入Cookie,并使其被发送到其他无关的域名。这对于在多个域名间共享同一个Cookie Jar的应用程序而言,可能导致会话固定请求中毒攻击。

开发者评论与状态:

  • jimfuller2024 (curl staff):确认收到报告并开始调查。
  • bagder (curl staff)
    • 指出如果curl在编译时禁用PSL支持,则其无法阻止此类“超级Cookie”。curl的-b选项文档已明确说明了此行为。
    • 将报告状态改为 Not Applicable(不适用),认为这不属于安全问题。
    • 随后根据项目的透明度政策,请求并公开披露了此报告。

报告元数据:

  • 报告ID:#3475472
  • 报告者:pwnie
  • 报告时间:2025年12月22日 UTC 16:34
  • 披露时间:2025年12月25日 UTC 16:54
  • 严重性:无评级(—)
  • CVE ID:无
  • 赏金:隐藏
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计