密码更改后会话失效漏洞:我如何通过僵尸会话漏洞获得50美元赏金

作者发现某咖啡连锁网站存在密码更改后会话未正确失效的安全漏洞,即使更改密码后旧会话仍能执行敏感操作。文章详细描述了漏洞复现过程、潜在风险以及修复建议,最终获得50美元漏洞赏金。

密码更改后会话失效漏洞:我如何通过僵尸会话漏洞获得50美元赏金

有趣的是,我们总是告诉用户"注销后所有会话都会结束",但自己却常常做不到这一点。是的,我在一家咖啡连锁店的网站上发现了一个我称之为"会话僵尸"的漏洞,报告后…最终获得了50美元。让我们一起来看看这个过程。

“密码更改后所有会话将失效”——他们是这样说的

场景:我在target.com登录了一个账户。然后我为同一个账户打开了两个浏览器容器——我们称它们为容器A和容器B。在容器A中我更改了密码(预期结果:容器B应该失效,会话结束)。但在容器B中…什么都没发生。我刷新页面——看到了订单、支付方式、地址——全部都能正常使用。我甚至在容器B中更新了支付信息,然后在容器A重新登录后发现这些更新都同步了。这时我皱起了眉头:

如果会话应该已经失效,为什么它还能继续编辑内容?

这突显了一个常见的弱点:密码更改应该意味着"再见,旧会话"。然而,容器B愉快地继续工作,好像什么都没改变。

为什么这很重要

密码重置后的会话持久性不仅仅是一个小麻烦。

如果有人窃取了你的会话cookie(是的,他们可以做到),在你更改密码后,他们不应该仍然拥有完全控制权。

支付方式和地址信息被暴露——这不是低影响的小事,这是账户被接管的风险。

认知失调:用户被告知"如果你怀疑有问题,请更改密码"——但系统并没有强制执行"其他旧会话,请退出"。

这与Bugcrowd的分类一致:密码更改时未能使会话失效被列为P4级别。但如果它直接导致账户被接管…我们可能面对的是P2级别的问题。

总部的回复

当Target的安全团队最终回复时,他们的语气很友好。他们写道:

“…我们相信在https://www.target.com/responsible-disclosure/#session-invalidation 上发布的答案仍然有效。“他们提到了缓存问题:支付方式端点是"第三方缓存的”,所以有一个五分钟的窗口期,过时的会话会持续存在。他们得出结论,这是一个P5严重性问题。

翻译:“是的,你发现了一些问题——但我们认为其影响非常小。”

但问题是:我不仅仅是在僵尸会话中查看数据——我还在修改它。我更改了支付详情、地址、个人数据。我甚至从过时的会话中触发了密码重置。这已经超越了"会话残留"的界限,进入了"会话利用"的领域。

50美元的结果

是的——50美元。因为显然,发现一个可能严重也可能不严重的问题,能以最低的成本获得感谢。公平地说:我很感激Caribou承认了我的提交,提供了奖励,并保持了礼貌的语气。但更大的讨论仍然存在:我们如何定义严重性?公司何时才会将密码更改时的会话失效视为真正的红线?

他们应该修复什么

我建议:

  • 在密码更改时立即使所有活动会话失效
  • 应用每个会话的令牌/撤销列表,使旧会话的cookie直接拒绝访问
  • 确保敏感端点(支付、订单、地址)在会话时间超过X分钟时需要重新认证
  • 实施速率限制、监控和日志记录
  • 避免依赖"第三方缓存窗口"作为安全理由

我的收获

技术上有效的漏洞仍然可能被厂商评为"低严重性”。这没问题——严重性通常是基于上下文的。

不要追求"有史以来最大的漏洞"——要瞄准清晰、可复现、影响用户的问题。

撰写报告时要假设读者是你不太懂技术的表亲。保持人性化的语气,解释影响,并提供证据。

50美元很不错。但真正的胜利是定义系统中更好的行为——并在心理上记录"密码更改后的旧会话=未系安全带"。

欢迎在这里与我联系:https://www.linkedin.com/in/isha-sangpal-133593225/

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计