如何防止此会话固定攻击?

时间:2014-01-16 23:43:38

标签: session session-fixation

我正在尝试理解理论上针对mtgox(众所周知的比特币交易所)描述的会话固定攻击:

  

我发现导致帐户接管的会话固定。很长的故事   简而言之,这是利用:

     

name ='document.cookie =“SESSION_ID = SID; Domain = .mtgox.com;   路径= /代码“';   位置= '?HTTPS://payment.mtgox.com/38131846-a564-487c-abfb-6c5be47bce27/e6325160-7d49-4a69-b40f-42bb3d2f7b91付款[取消] =取消';

     
      
  1. 创建结帐按钮https://www.mtgox.com/merchant/checkout并将取消网址设置为javascript:eval(name);

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

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

  6.   
  7. 使用服务器端获取一些guest虚拟机SID并使用此XSS进行修复。它被称为Cookie折腾,我们的cookie会影响原始的SESSION_ID   因为首先发送更具体的Path-s   document.cookie =“SESSION_ID = SID; Domain = .mtgox.com; Path = / code”

  8.   
  9. 关闭窗口。

  10.   
  11. 有一天用户登录,他的会话将保持相同的SID。您的服务器脚本应该每5分钟运行一次cron任务,检查SID是否正常   还是“客人”。一旦用户登录,您就可以使用固定的SID   代表他的帐户执行任何操作 - “会话骑行”。

  12.   

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

答案是什么?

1 个答案:

答案 0 :(得分:0)

他们应该验证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(或路径),因此该标志不会阻止此攻击发生。