听老外讲解如何将XSS转化为RCE

简介: 本文讲的是听老外讲解如何将XSS转化为RCE,Black Hat 2017可谓成果丰硕,除了各种安全工具和理论出现之外,也出现了许多新的安全研究方向,比如Doyensec的联合创始人Luca Carettoni就介绍了关于Electron安全方面的新思路 https://twitter.com/lucacarettoni 。
本文讲的是 听老外讲解如何将XSS转化为RCE

听老外讲解如何将XSS转化为RCE

前言

Black Hat 2017可谓成果丰硕,除了各种安全工具和理论出现之外,也出现了许多新的安全研究方向,比如Doyensec的联合创始人Luca Carettoni就介绍了关于Electron安全方面的新思路 https://twitter.com/lucacarettoni 。为了对他的这个思路有更深入的了解,我在会后和他讨论了可能基于Electron应用程序的设计漏洞和运行漏洞,特别是在安全防护框架到位的情况下,黑客如何绕过这些漏洞,比如,也可以通过跨站脚本来呈现不可信内容来实现可靠的远程执行代码(RCE)。

了解nodeIntegration标志

其实对信息安全方面有所了解的开发人员都知道,在整合了Node.js的应用中直接呈现不受信任的远程或本地内容是非常危险的。正是出于这一方面的考虑,Electron框架提供了两种不同的机制来帮助应用程序在“沙盒环境”中呈现不受信任的资源:

BrowserWindow机制

听老外讲解如何将XSS转化为RCE

WebView机制

听老外讲解如何将XSS转化为RCE

在上面的例子中,将nodeIntegration标志设置为false。即使在渲染器进程中运行了Node.js引擎,页面中运行的JavaScript将无法访问全局引用。

寻找绕过nodeIntegration的方法

现在应该明白为什么nodeIntegration是框架的关键安全相关设置,这种机制中的漏洞可能会导致完全的主机攻击,简单地渲染不受信任的网页。作为一个网络极客,我使用这种漏洞将传统的XSS变成了RCE。由于所有Electron应用程序都与框架代码捆绑在一起,因此在整个生态系统中解决这些漏洞也是复杂的。

在我的研究中,我已经广泛分析了所有的项目代码变化,以发现先前发现的实际绕过案例,目的是研究Electron的设计漏洞。只有掌握了这些知识,才能找到绕过漏洞的办法。

通过研究官方文档,我很快就发现了Electron的“glorified”JavaScript API引起的与标准浏览器的显着偏差。当创建一个新窗口时,Electron返回一个BrowserWindowProxy的实例。该类可用于操纵子浏览器窗口,从而颠覆同源策略(SOP)。

绕过SOP的第一种办法:

听老外讲解如何将XSS转化为RCE

绕过SOP的第二种办法:

听老外讲解如何将XSS转化为RCE

绕过SOP的第二种办法使用的评估机制可以用下图解释:

听老外讲解如何将XSS转化为RCE

另外的源代码审查揭示了存在特权的URL(类似于浏览器的特权区域)。通过设计将SOP-bypass与在 lib/renderer/init.js中定义的特定特权URL相结合,我意识到我可以覆盖nodeIntegration设置。

听老外讲解如何将XSS转化为RCE

包括影响1.6.7版本之前的所有Electron发布的nodeIntegration绕过的简单但可靠的Poc:

听老外讲解如何将XSS转化为RCE

2017年5月10日,我通过Electron邮件向维护者报告了此问题。在几个小时之内,我收到了一个答复,他们已经在修复了,因为特权的chrome-devtools://在我报告的前几天已经被发现。

缓解措施

1.升级到最新的Electron版本,因为Electron使用Chromium和Node.js,影响这些组件的漏洞可能会影响应用程序的安全性。通过将Electron更新到最新版本,你可以确保关键漏洞(例如nodeIntegration绕过)已经被修补,并且不能被利用来滥用你的应用程序。

2.采用安全编码的方式,你的应用程序的第一道防线是你自己的代码。通常的网络漏洞(如XSS)对Electron的安全性影响较大,因此强烈建议采用安全软件进行应用搭建并执行定期的安全测试。

3.了解所使用的的框架,目前流行的浏览器所采用的特定规则以及安全机制并不能适用于Electron(例如同源策略),应采取深度防范机制来缓解这些漏洞。详细信息,请参Electron木安全演示和Electron安全清单的白皮书

4.使用最新的“沙箱”实验功能,即使nodeIntegration被禁用,Electron的当前实现也不能完全缓解加载不可信资源引入的所有风险。因此,建议使用利用Chromium的沙箱功能。沙箱渲染器没有运行Node.js环境(除了预加载脚本之外),渲染器只能通过IPC将任务委派给主进程来对系统进行更改。请注意,目前<webview>标签等还不支持沙箱检测。




原文发布时间为:2017年8月17日
本文作者:xiaohui 
本文来自云栖社区合作伙伴嘶吼,了解相关信息可以关注嘶吼网站。
目录
相关文章
|
3月前
|
安全 JavaScript 前端开发
Python 的安全性和测试:解释什么是 XSS 和 CSRF 攻击?在 Python 中如何防范这些攻击?
Python 的安全性和测试:解释什么是 XSS 和 CSRF 攻击?在 Python 中如何防范这些攻击?
|
10月前
|
存储 JavaScript 安全
代码审计——XSS详解
代码审计——XSS详解
218 0
|
11月前
|
存储 数据库
力大砖飞-存储型Xss Fuzz手法
力大砖飞-存储型Xss Fuzz手法
100 0
|
11月前
|
移动开发 安全 JavaScript
XSS绕过安全狗方法【持续更新】
XSS绕过安全狗方法【持续更新】
324 0
|
11月前
|
安全 PHP
pikachu靶场通过秘籍之PHP反序列化漏洞攻击
pikachu靶场通过秘籍之PHP反序列化漏洞攻击
127 0
|
存储 JavaScript 安全
pikachu 靶场之XSS(跨站脚本) -下篇
pikachu 靶场之XSS(跨站脚本) -下篇
115 0
|
SQL 存储 安全
【牛刀小试】——浅析SQL注入
【牛刀小试】——浅析SQL注入
84 0
【牛刀小试】——浅析SQL注入
|
Web App开发 安全 搜索推荐
怎样利用XSS漏洞在其它网站注入链接?
怎样利用XSS漏洞在其它网站注入链接?
468 0
怎样利用XSS漏洞在其它网站注入链接?
|
安全 PHP .NET
通过代码审计找出网站中的XSS漏洞实战(三)
一、背景 笔者此前录制了一套XSS的视频教程,在漏洞案例一节中讲解手工挖掘、工具挖掘、代码审计三部分内容,准备将内容用文章的形式再次写一此,前两篇已经写完,内容有一些关联性,其中手工XSS挖掘篇地址为快速找出网站中可能存在的XSS漏洞实践(一)https://segmentfault.com/a/1190000016095198 本文主要记录通过代码审计的方式进行XSS漏洞挖掘,分为了找出关键位置,正向审计,反向审计三个部分,审计的系统为permeate渗透测试系统,测试系统的搭建可以参考笔者的第一篇文章。
1659 0
|
安全 PHP 数据库