技术网站推广范例,建设游戏运营网站开展工作,wordpress前端会员,产品单页营销型网站模板下载0x00 前言
漏洞详情
版本16.7以前的Typora中的updater/update.html存在基于DOM的XSS#xff0c;可以通过加载定制的markdown文件实现任意javascript代码执行。
原理分析
漏洞触发点位于Typora的updater.html文件#xff0c;通过特定协议typora://即可访问#xff0c;同时…
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。  现在将poc.txt文件重命名为poc.md并使用typora打开 演示版本为 原文地址: https://www.freebuf.com/vuls/377087.html