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

本文详细分析了Twitter认证系统中的一个关键漏洞,该漏洞源于正则表达式实现错误,允许攻击者通过单个点字符实现账户完全接管,展示了微小编码错误如何导致严重安全后果。

价值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 设计