如何防止这种会话固定攻击



我正在努力理解这种会话固定攻击,它在理论上被描述为针对mtgox(一种著名的比特币交易所):

我发现会话固定导致帐户接管。长话短说简而言之,这是一个漏洞:

name='document.cookie="SESSION_ID=SID;域=.mtgox.com;路径=/code"';location='https://payment.mtgox.com/38131846-a564-487c-abfb-6c5be47bce27/e6325160-7d49-4a69-b40f-42bb3d2f7b91?payment[cancel]=取消';

  1. 创建签出按钮https://www.mtgox.com/merchant/checkout并将Cancel URL设置为javascript:eval(name);

  2. 将有效负载放入window.name并重定向到"https://payment.mtgox.com/38131846-a564-487c-abfb-6c5be47bce27/e6325160-7d49-4a69-b40f-42bb3d2f7b91?payment[cancel]=取消"(获取可访问的操作)。MtGox有X-Frame-Options,因此无法在iframe。

  3. 用户应该等待5秒,直到JS中的setTimeout将位置分配给我们的javascript:URL。

  4. 在服务器端获取一些访客SID,并使用此XSS进行修复。它被称为Cookie投掷,我们的Cookie阴影原始SESSION_ID因为首先发送更具体的Path-s
    document.cookie="SESSION_ID=SID;域=.mtgox.com;路径=/code">

  5. 关闭窗口。

  6. 某一天用户登录,他的会话将保持相同的SID。您的服务器脚本应该每5分钟运行一次cron任务,检查SID是否为仍然是"客人"。一旦用户登录,您就可以使用固定SID代表其帐户执行任何操作-"会话骑行"。

我会想,如果mtgox将他们的cookie设置为仅http,那么这会阻止这种情况的发生吗?

答案是什么?

他们应该验证Cancel URL是一个有效的HTTP绝对URL。

即检查它是否以http://https://开始

任何不匹配的内容都应该被拒绝,并向他们发出警报。

这应该会阻止JavaScript代码的输入,因为协议将是http/https,而不是取消链接中的javascript

<a href="http://www.example.com">Cancel</a>

Cancel URL还必须正确地进行HTML编码,以防止href属性值上下文的中断。

我会想,如果mtgox将他们的cookie设置为仅http,那么这会阻止这种情况的发生吗?

设置HttpOnly cookie可以防止cookie被盗,但如果存在XSS漏洞,则意味着可能存在其他漏洞,如您的场景中描述的漏洞。由于cookie是在JavaScript中设置的,这将覆盖HttpOnly标志,因为有更具体的路径。服务器无法在HTTP请求中检查此cookie是否为HttpOnly(或路径),因此此标志不会阻止此攻击的发生。

相关内容

  • 没有找到相关文章

最新更新