价值10800美元的拼写错误:一个点如何破坏Twitter身份验证系统

本文详细分析了Twitter Digits SDK中的一个关键正则表达式漏洞,该漏洞由于错误使用search()方法导致点字符成为通配符,使得攻击者能够完全接管用户账户。文章包含具体漏洞代码分析和JavaScript正则表达式工作机制的深入解释。

价值10800美元的拼写错误:一个点如何破坏Twitter的身份验证

在研究Web身份验证漏洞时,我遇到了一个引人入胜的案例研究,展示了微小的实现缺陷如何危及整个身份验证系统。这不是复杂的密码学破解——而是Twitter"使用Digits登录"功能中的一个简单正则表达式错误,导致了完全的账户接管。

漏洞:当一个点变成通配符时

问题出现在Twitter的Digits SDK中,具体是在验证身份验证服务与客户端网站之间的消息来源时。易受攻击的代码如下:

1
2
3
onReceiveMessage: function(t) {
    this.config && -1 !== this.config.get("sdk_host").search(t.origin) && this.resolve(t.data)
}

乍看之下,代码似乎在检查消息来源是否匹配https://www.digits.com。但JavaScript的String.prototype.search()工作方式存在关键缺陷。

细节中的魔鬼

  • search()将其参数转换为正则表达式
  • 在正则表达式中,点号(.)匹配任何单个字符
  • 因此"https://www.digits.com".search("www.d.gits.co")实际上会返回匹配位置…

创建账户以阅读完整故事。作者仅向Medium会员提供此故事。

如果您是Medium的新用户,请创建一个新账户来阅读此故事。

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