【技术分享】错误的会话终止机制导致账户劫持

admin 2023-12-07 17:46:29 AnQuanKeInfo 来源:ZONE.CI 全球网 0 阅读模式

http://p1.qhimg.com/t01d3fbb03038d4c8e1.jpg

翻译:派大星

预估稿费:140RMB(不服你也来投稿啊!)

投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿

错误的会话终止机制

会话终止是安全的会话周期中一个重要的方面。安全的实现session tokens可以有效的减少会话劫持攻击。会话终止作为一些攻击的控制机制,比如XSS(跨站脚本攻击),CSRF(跨站请求伪造)。当一个用户拥有了授权后的session,这些攻击的严重性就会增加。因此,拥有一个不安全的会话终止机制增加了其他攻击技术的攻击面。

我们曾遇到了一个有错误会话终止机制的案例。这个漏洞在一家网络软件公司的web入口被发现。这次攻击的详情,根本原因,逻辑问题和修复建议会在下面详细解释。


漏洞详情和影响

经鉴定,最主要的漏洞就是错误的会话终止机制。应用程序并没有正确的终止用户的session

我们发现该程序至少会保持用户session长达10小时。因此,很多行为甚至在用户注销后都拥有了执行的可能(例如修改账户绑定的手机号)。在用户注销后并没有使user_token失效,

因此它将允许任何人继续发送合法的,被授权的请求。

在这个特殊的应用中,伴随着错误的会话终止机制的还有其他漏洞:

1.没有实现会话超时机制。

2.在URL里将session token作为请求字符串发送。Session token可以从连接头部中的Referer字段得到,也可以从终端浏览器的历史记录中,或者遍历嗅探到的数据包,又或者没有被正确保护的web日志中得到。根据最好的安全实践标准,任何需要被保密的信息都不应该通过URL或者请求字符串发送,因为这样可能被代理捕获或者被浏览器历史所记录。

3.该应用在重置密码的时候并未要求填写当前密码。根据最好的安全实践标准,程序应该在允许关键修改之前验证密码(比如修改密码或者修改邮箱)。

因此,我们发现一个错误会话终止机制可以导致潜在的账户劫持。


通常的重现步骤

一般来说,一个错误的会话终止机制可以被以下步骤所检测出来。

首先,鉴定被用于会话标识的cookie。注销当前账户然后观察应用程序处理会话cookies的方式。

通过浏览器的返回键打开那些只能在被授权后才能访问的页面。

如果显示的是这个页面的缓存,点击刷新更新页面。如果注销功能设置了一个新的会话cookies,用旧的cookies替换它然后刷新页面。

在应用的大多数页面尝试这个测试方法,尤其是那些被认为存在危险的地方。这可以确保会话结束机制在那些包含危险动作的页面正确的实现。

如果会话被正确的终止,当你尝试打开需要授权的界面时你将会看到应用重定向到公共区域或者登陆界面。如果会话未被正确终止,当你请求修改数据时,你将看到那些只应被授权用户所看到的页面,比如简介信息,修改简介和其他隐私的页面。

在我们详细的评估中,我们修改了手机号作为概念验证。这是一个应用程序可能的特殊功能,但是通常来说,根据应用和它的功能,会有不同的行为可以执行。错误的会话终止机制能够导致帐户被完全劫持。


攻击方案

因为token通过URLGET参数传输,即使是使用了SSL协议也不能防止泄露。攻击者可以在浏览器历史纪录或者通过代理工具得到token。如果攻击者得到了任意用户的user_token

他就能够在该用户的帐户上代表该用户发送和执行所有行为。


修补建议

1. user_token的值应该在服务器端被正确的检查和验证。一旦一个用户注销登录,他的user_token就应该被用合适的方法在服务器端立即销毁。

2. 应用程序应该实现一个会话超时机制。例如,根据应用程序的不同决定30分钟或者更久。

3. 会话认证应该通过cookies来实现。任何敏感信息都不应该通过URL传输。

4. 一个高度安全的口令机制应该被实现,而且当用户执行敏感操作时应用程序应该再次验证用户口令。

这个问题的根本原因就是错误的会话终止机制。因为用户没有在关于他们帐户凭证方面做错任何事情。应用的所有者应该对用户对此应用的信任负责。用户信任应用程序,然而应用程序却将他们的数据置于危险之中。因此,一旦用户注销登录立即正确的终止会话是非常重要的事情。

weinxin
版权声明
本站原创文章转载请注明文章出处及链接,谢谢合作!
评论:0   参与:  0