CertiK安全团队在Symbol桌面钱包中发现了一个远程执行代码漏洞,并将该漏洞提交到了Symbol漏洞赏金计划。Symbol对CertiK提交的报告非常重视,即刻采取了安全解决措施,并及时更新了代码。目前该问题已在v0.9.11版本中得到修复。
HackerOne报告目前尚未公开,但在征得了Symbol的允许后,本文将公开于此分享此次事件。在此,CertiK对Symbol提供的赏金奖励,以及对公开分享漏洞发现的许可表示感谢。
Symbol wallet是一个基于Electron的桌面应用程序,此次发现的漏洞与Electron配置有关。Electron是不是听起来很耳熟?但它可不是你在物理化学课上学到的那个电子。在展开漏洞分析之前,不妨先来看看本文中的Electron是什么,在安全层面有什么值得注意的事项。
Electron是由GitHub开发和维护的开源软件框架,它允许开发人员使用HTML,CSS和Javascript等网络技术来构建跨平台的桌面应用程序。
Electron通过将Chromium引擎和Node.js组合到一起来实现这一目标。一些知名的Electron应用程序包括Atom编辑器,VisualStudio Code和Slack等。
使用Electron的优点:
Web开发人员可以使用主要的Javascript框架库(包括Angular,React和Vue)构建能在不同操作系统上运行的跨平台桌面应用程序。此过程无需再花费时间学习新的编程语言。
调试基于Electron的应用程序比调试传统的桌面应用程序容易。Chromium中的DevTools扩展允许开发人员使用和Web应用程序相同的方式调试其基于Electron的应用程序。
AI Meta Club推出AI生成图片功能,并将五月底首发治理代币$AMC:据官方Twitter消息,AI Meta Club(AMC)今日推出了Text 2 Image的功能,用户可以在社群通过“draw”命令AI来作画,这是首个达成AI生成图片的Web3-native项目。此外,AI Meta Club还将推出更多AIGC的工具。该项目之前因利用AI学习马斯克前女友Grimes的声音,并在Twitter发布Grimes的说唱而知名。AI Meta Club将于五月底首发治理代币$AMC。[2023/5/16 15:05:57]
Electron的安全性以及Node.js的危险性
基于Electron的应用程序本质上是一个Web应用程序,因此它包含常见的Web漏洞,例如跨站点脚本(XSS)、Sql注入、身份验证和授权漏洞。
Electron提供许多辅助桌面应用程序开发的API,此外,它还可以使用Node.js模块。
Node.js允许基于Electron的应用支持比在Web浏览器中运行的Web应用更多的功能。但是,启用Node.js会带来一定的安全风险。如果攻击者可以找到在应用程序中注入JavaScript,就可以在目标的计算机上执行系统命令。
如果想要检查Electron应用程序是否在启用了Node.js,用户可以在开发控制台中发送模块导入功能“require”。在macOS中,控制台可以通过同时按“option + command + i”打开。
如果Node.js未被启动,控制台将返回错误消息 “require is not defined”:
如果Node.js被启用,控制台将返回"require"的相关信息:
OKX Web3钱包已首发接入Sui主网:据OKX官方消息,OKX Web3钱包已于5月3日17:00(HKT)接入Sui主网,是首个支持Sui主网的多链钱包。用户可前往OKX Web3钱包查看自己在Sui链上资产,支持使用App端进行Sui资产管理和交易,并领取相关活动奖励。此外,OKX Web3钱包将陆续推出Sui质押、DEX支持Sui主币兑换等产品功能,用户可使用OKX Web3钱包一站式体验公链。[2023/5/3 14:40:33]
在开发控制台中发送以下命令,就能在macOS中弹出计算器:
require('child_process').exec('/System/Applications/Calculator.app/Contents/MacOS/Calculator')
为了减轻因为注入JavaScript而引起的远程代码执行的风险,从版本5.0.0开始,Electron默认禁用了程序对Node.js模块的访问。开发人员可以通过在配置文件中将“nodeIntegration”设置为true来启用对Node.js模块的使用,从安全角度来说并不推荐。
值得注意的是在2018年,Electron被发现有一个严重漏洞可被攻击者利用来访问Node.js模块,即使在配置中已经被禁止。参考文献1也对此进行了详细说明,因此在开发时请务必使用最新版本的Electron。
在了解了基于Electron的应用程序相关特征之后,现在可以深入探讨在Symbol桌面钱包中发现的漏洞。
Symbol桌面钱包是开源的,可以在其Github(参考文献2)中找到该应用的源代码。build.js(参考文献3)是其应用程序的Electron构建配置文件。下面这段Build.js中的代码检查程序是否在“darwin”(macOS)上运行。如果不是,app.on将使用“createWindow”函数创建浏览器窗口。
Conflux首款NFT+DEFI游戏ConDragon NFT首发MoonSwap两小时内售罄:12月16日12点,Conflux首款DeFi+NFT+RPG游戏 ConDragon NFT开启盲盒预售活动,NFT售卖首发上架Conflux生态平台MoonSwap,并同步开启质押恐龙NFT进行挖矿。
此次ConDragon首发预售第一期共1857只恐龙NFT。在2小时内完成售罄。并完成462只恐龙NFT质押,其余进入MoonSwap NFT资产交易平台挂单交易。盲盒售卖后50%的金额全部通过合约自动兑换成cMOON注入奖池,总奖池达到46900.48 cMOON。[2020/12/17 15:30:10]
....code...
if (process.platform === 'darwin') {
app.on('ready',createMac)
} else {
app.on('ready',createWindow)
....code...
在“createwindow”函数中,函数内部的“ windowOptions”变量包含浏览器窗口配置选项。注意,红色部分显示的行将“nodeIntegration”变量设置为true,这表示此应用程序启用了Node.js。
...code...
function createWindow(){
const windowOptions = {
MXC抹茶9月29日10:30首发上线SUP ,开放USDT交易:据官方公告,9月29日10:30,MXC抹茶作为官方合作平台,考核区将首发上线SUP(Supertx Token),开放USDT交易。9月29日10:00开启充值,10:30开放提现。
资料显示,SUP是MOV超导的价值捕获Token,是MOV的重要组成部分,SUP 将拥有MOV超导的治理权。SUP是一场有意义的社会实验,它的未来由社区决定,由众多拥有SUP的用户决定。详情请点击原文链接。[2020/9/29]
minWidth: width,
minHeight: height,
width: width,
height: height,
title: app.getName(),
titleBarStyle: 'hiddenInset',
webPreferences: {
nodeIntegration: true,
},
火币将首发上线 PHA (Phala),并开启PHA“新币挖矿”:据官方消息,火币全球站将于9月11日20时 (GMT+8)首发上线波卡生态项目PHA (Phala)并开放币币交易。火币将在开放PHA交易同时开启“锁仓HT参与新币挖矿”二期活动,活动将提供500万枚PHA 代币用于奖励参与新币挖矿活动的锁仓用户。
本期“新币挖矿”总锁仓上限为400万HT,用户最低仅需锁仓 100HT即可参与新币挖矿活动。据悉,火币“新币挖矿”一期活动上线50.4秒即被抢完,共有2437人锁仓800万HT参与,首日年化奖励率约为280%。
Phala旨在成为Web3.0隐私保护基础设施,基于Substrate开发并通过TEE区块链架构实现机密智能合约,可以为波卡生态提供隐私计算服务。[2020/9/9]
resizable: true,
}
....code...
mainWindow= newBrowserWindow(windowOptions)
}
根据build.js配置文件,可以了解到如果此应用在Windows操作系统上运行,Node.js将被启用。为了利用启用的Node.js,攻击者需要在应用程序中注入任意的JavaScript。攻击者一般可以通过利用XSS(跨站点脚本)漏洞或者在当前Electron窗口中加载任何包含攻击者注入的JavaScript的网站来实现攻击。
Symbol桌面钱包(v9.7版)提供了浏览“新闻”的功能,只要用户点击新闻中的链接,应用程序便会从钱包窗口加载外部网站(图中展示的是Github)。
那么漏洞又是如何被利用的呢?
为了演示该漏洞利用的流程,技术人员在个人网站上托管了以下代码段。在Github上可以很容易的放置指向其网站的URL。当“nodeIntegration”设置为true并启用Node.js,在“child_process”模块的帮助下可以将任意的JavaScript执行升级为远程代码执行。
用户访问包含payload的页面,并点击页面里的“Close”按钮后,用户的计算机上将弹出计算器。在目标系统中弹出计算器是证明成功利用代码执行漏洞的一种方法。
Proof-of-Concept(视频位于页首):
<!DOCTYPEhtml>
<h1>click me</h1>
<button type="button" onClick="rce_calc()">Submit</button>
<script>
functionrce_calc(){
const{ exec } = require('child_process');
exec('calc');
}
</script>
Symbol在修复中将“nodeIntegration”设置为false,禁止了JavaScript对Node.js模块的访问。此更改已经反映在了他们当前的build.js(参考文献4)文件中。他们还更新了“新闻”功能,停止了将远程网站加载到Electron窗口中的行为。
做为安全研究员,当在一个程序中发现漏洞,我们总会尝试去探索此类漏洞是否在别的应用中存在。通过互联网搜索,CertiK安全团队发现了另一个基于Electron的加密货币钱包: MyCrypto。在测试时,技术人员发现MyCrypto将“nodeintegration”设置为true,并启用了Node.js。虽然没有找到攻击此配置的办法。但是我们不应该给攻击者将“self-xss”转化为命令代码执行的机会。
CertiK旨在为加密社区的安全做出贡献,并帮助企业保护用户资产。技术人员在对方的Github 仓库中提交了Issue。
MyCrypto十分重视,并回复该漏洞将在下一版本中修复。
Electron本身是非常优秀的软件框架,但开发人员要注意不要因为配置错误而使程序暴露在危险之中。在产品中使用新技术时要小心,要保持谨慎并了解潜在的安全风险。这里CertiK安全团队总结了几个要点来提高基于Electron的应用程序的安全性:
在生产版本中移除对development console的访问。
除非应用程序绝对必要,否则将“nodeintegration”设置为false。
使用“event.preventDefault()来禁止应用程序加载外部网页。
使用React,Vue或Angular(2+)等前端框架开发应用程序,以减少应用程序包含XSS(跨站点脚本)漏洞的机会。
持续使用最新版本的Electron框架,并保持更新。
开发Electron应用程序时,请务必阅读参考官方安全指南(参考文献7)。其中包含了可以提高Electron的应用的安全性的建议。
无论是由内部安全团队还是第三方公司执行安全审计和渗透测试,对于确保系统的安全性都是至关重要的。专业的安全人员会试图从“恶意黑客”的角度来破坏系统,帮助在真正的黑客利用漏洞之前识别和补救漏洞。
对于专业安全服务提供商而言,要提高安全测试水平的唯一途径就是不断学习。CertiK的安全工程师自始至终都在通过广泛涉猎不同目标来提高自身的渗透测试技能,从而为客户提供最佳的渗透测试服务。
参考文献:
https://www.trustwave.com/en-us/resources/blogs/spiderlabs-blog/cve-2018-1000136-electron-nodeintegration-bypass/
https://github.com/nemfoundation/symbol-desktop-wallet
https://github.com/nemfoundation/symbol-desktop-wallet/blob/14ddfd44fe9a54b54f8261dfaa68b2f88be211ce/public/build.js
https://github.com/nemfoundation/symbol-desktop-wallet/blob/master/public/build.js#L237
https://github.com/terra-project/station-electron/blob/5a919b87323c9d1d9c76f7c4a7deff5d731d235e/public/electron.js
https://www.electronjs.org/docs/tutorial/security#5-do-not-disable-websecurity
https://www.electronjs.org/docs/tutorial/securit
了解更多
General Information: info@certik.org
Audit & Partnerships: bd@certik.org
Website: certik.org
Twitter: @certik.org
Telegram: t.me/certik.org
Medium:medium.com/certik
币乎:bihu.com/people/1093109
中国(云南)自由贸易试验区红河片区(以下简称红河片区)挂牌成立以来,立足“沿边”、“跨境”特点,围绕147项试点任务,以敢为人先的胆识和魄力,敏锐把握重大机遇,大胆闯、大胆试、自主改,持续释放发展新动能.
1900/1/1 0:00:00从6月15日Compound推出其治理代币COMP的流动性挖矿以来,不到一个月,流动性挖矿成为加密圈最热话题,且越来越多的项目正在推出各自的流动性挖矿,那么,什么是DeFi的流动性挖矿?蓝狐笔记下面进行简单阐述,本文适合新手阅读.
1900/1/1 0:00:00文章系金色财经专栏作者币圈北冥供稿,发表言论仅代表其个人观点,仅供学习交流!金色盘面不会主动提供任何交易指导,亦不会收取任何费用指导交易,请读者仔细甄别,谨防上当.
1900/1/1 0:00:00Filecoin的未来,是一个通过存储服务建立的全球网络。正值测试网测试时期,官方公布的挖矿大矿工的要求需要至少5PB.
1900/1/1 0:00:00山寨币近来开始全线大幅上涨。最近几周,一些小市值的加密货币涨幅百分比甚至达到了三位数。与此同时,一些大市值的加密货币也出现了上涨,如 VeChain(VET)、Stellar(XLM)、Cardano(ADA)和 Chainlink(.
1900/1/1 0:00:00一、市场解读 Defi热有目共睹,大会小会,大号小号,都在谈论Defi,毕竟将金融巨头的功能通过协议的方式搬到链上,这里面就有数不尽的故事可以讲。当然资本市场最不缺的就是故事,歌里唱的好,别人的故事,随便听一听,自己作决定.
1900/1/1 0:00:00