Typora远程代码执行漏洞CVE-2023-2317

文章讲述了Typora16.7之前的版本中存在DOM-basedXSS漏洞,可通过加载定制Markdown文件执行恶意JS。攻击者可诱导用户打开恶意文件或复制文本,利用`update.html`中的漏洞实现远程恶意代码执行。
摘要由CSDN通过智能技术生成

请添加图片描述

0x00 前言

漏洞详情

版本16.7以前的Typora中的updater/update.html存在基于DOM的XSS,可以通过加载定制的markdown文件实现任意javascript代码执行。在这里插入图片描述

原理分析

漏洞触发点位于Typora的updater.html文件,通过特定协议typora://即可访问,同时该文件可以通过URL进行参数传递。update.html在Windows上的参考路径如下:

file:///C:/Program%20Files/Typora/resources/updater/updater.html
查看update.html源码。在这里插入图片描述HTML文件中的JavaScript代码会从当前URL的查询字符串中通过window.location.search提取名字为"labels"的参数值,解码后用JSON解析。然后使用document.querySelector(“#sum”).innerText来修改id为"sum"的HTML元素内的文字内容,将labels[4]和labels[5]中的特定部分插入其中。

同时使用document.querySelectorAll(“[data-label]”)找到所有"data-label"属性的HTML元素,将它们的属性值作为labels数组的key进行查询,并将查询到的value替换到innerHTML中的对应元素上。
在这里插入图片描述此时我们注意到几个关键点:

labels数组输入可控;

labels数据的数据没有检查和过滤;

labels数组中部分元素会被放到innerHTML的对应元素中去;(见图1)

只有与"data-label"有关的元素会被放到labels数据组,即只有前4个元素可行(见图2)

简言之,如果存在一个满足上述条件的恶意JS代码被包含在labels数组中,我们就可以实现恶意JS的远程执行。现在我们就可以构造payload了。

恶意payload如下:

小tricks:

此处使用reqnode(‘child_process’).exec()创建子进程执行指定命令,其中reqnode是typora自行封装的require函数;

https://github.com/typora/typora-issues/issues/2226

在实战利用中,攻击者可以诱导用户打开恶意markdown文件或者从网站复制恶意文本到typora,通过标签引用update.html,实现远程的恶意JS加载。

漏洞复现

新建一个任意的文本文件,名为poc.txt,输入恶意payload。

![在这里插入图片描述](https://img-blog.csdnimg.cn/5a0b5b83b14d48409507e31ab7d08c03.jpeg) 现在将poc.txt文件重命名为poc.md,并使用typora打开![。](https://img-blog.csdnimg.cn/e6bc390073ee4646a5d8ae3276b23c15.jpeg) 演示版本为:![在这里插入图片描述](https://img-blog.csdnimg.cn/a64dfd5cdc524af7aa540a13b7833123.jpeg)

原文地址: https://www.freebuf.com/vuls/377087.html

请添加图片描述

请添加图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值