密码更改后会话失效漏洞:我如何通过僵尸会话漏洞获得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/