Ghost 博客系统后台代码执行漏洞分析

漏洞简述

Ghost 是以Node.js语言开发的一款开源博客程序,在Github上其star为超过4万。

  • 6月15日,Ghost官方修复了一个RCE漏洞。由于Ghost调用的moment.js库,存在已知漏洞(CVE-2022-24785)导致攻击者可以通过帖子编辑器中的文件上传功能上传文件,进而执行任意代码。
  • 漏洞等级中危,利用需要攻击者获得博客后台账户权限,利用成本:
  • 影响版本:[*, 4.48.2),[5.0.0, 5.2.3) ,官方已在5.2.3、4.48.2版本中修复了此问题:https://github.com/TryGhost/Ghost/releases/tag/v5.2.3

漏洞分析

漏洞因为需要后台权限,有一定利用条件,有趣的点在于Ghost的RCE漏洞是由于moment.js下的路径遍历和文件包含漏洞,再加上Ghost中的文件上传和指定locale功能。moment.js中的文件包含漏洞,在一般情况下可能影响较小,但结合某些功能设计或其他漏洞使得参数和内容可控,造成了RCE的产生。

Moment CVE-2022-24785

Moment.js 是一个用于解析、校验、操作、显示日期和时间的JavaScript 工具库,在Github上具有4万+的star。在4.4日,公开了一个moment.js的路径遍历漏洞和潜在的文件包含漏洞。漏洞触发点在lib/locale/locales.js文件的loadLocale方法中

aliasedRequire = require;
aliasedRequire('./locale/' + name);

Ghost路径穿越

在Ghost中造成执行命令的漏洞缺陷点是core/frontend/helpers/date.js的locale参数,漏洞触发点位于登录后台配置中的可自定义参数locale。

在后台(settings>General>Publication Language)可以看到默认为en。功能上对应的是为了支持多语言环境,预置了相应的语言配置文件,进行动态加载。

Ghost 博客系统后台代码执行漏洞分析

对应core/frontend/services/theme-engine/i18n/i18n.js中locale参数。

constructor(options = {}) {
this._basePath = options.basePath || __dirname;
this._locale = options.locale || this.defaultLocale();
this._stringMode = options.stringMode || 'dot';

this._strings = null;
}
......
defaultLocale() {
return 'en';
}

在date.js中会接收前端发送的locale参数,通过moment中的方法进行解析。

Ghost 博客系统后台代码执行漏洞分析

可以发现locale参数没有经过过滤直接拼接,因此如果能够指向一个攻击者可控的地址,则可以执行任意js代码。

Ghost文件上传

文章编辑器默认支持文件上传,并会按照原文件名上传到特定的本地目录,因此攻击者可以上传恶意的js(如evil.js),而后在locale参数填写控制加载对应路径。

Ghost 博客系统后台代码执行漏洞分析

漏洞验证

前提:经过Ghost身份验证的用户

  1. docker启动Ghost
  2. 访问页面 http://localhost:3001/ghost,进行管理员配置
Ghost 博客系统后台代码执行漏洞分析
  1. 上传恶意js文件,并记录文件路径
Ghost 博客系统后台代码执行漏洞分析
  1. 在settings>General>Publication Language处输入刚刚获得的路径,如../../../content/files/2022/06/abc
Ghost 博客系统后台代码执行漏洞分析
  1. 刷新前端页面,可以发现恶意js文件被执行

参考链接

https://github.com/TryGhost/Ghost/security/advisories/GHSA-7v28-g2pq-ggg8

https://github.com/TryGhost/Ghost/commit/b82dc7ae7c61269352d86041f3ea3c42e389037a

https://github.com/TryGhost/Ghost

发布者:墨菲安全,转发请注明出处:https://www.murphysec.com/blog/vulnerability-analysis/4283.html

(0)
上一篇 2023年1月4日 18:38
下一篇 2023年1月4日 18:41

相关推荐

  • Apache Kafka Connect 模块JNDI注入(CVE-2023-25194)

    漏洞概述 Apache Kafka Connect服务在2.3.0 至 3.3.2 版本中,由于连接时支持使用基于JNDI认证的SASL JAAS配置,导致配置在被攻击者可控的情况下,可能通过JNDI注入执行任意代码。此漏洞不影响 Kafka server(broker),Kafka Connect服务通常用于在云平台中提供Kafka数据迁移、数据同步的管道…

    2023年2月13日
  • CVE-2023-23752 Joomla未授权访问漏洞分析

    Joomla 在海外使用较多,是一套使用 PHP 和 MySQL 开发的开源、跨平台的内容管理系统(CMS)。Joomla 4.0.0 至 4.2.7 版本中的 ApiRouter.php#parseApiRoute 在处理用户的 Get 请求时为对请求参数有效过滤,导致攻击者可向 Joomla 服务端点发送包含 public=true 参数的请求

    2023年2月23日
  • Spark 存在 shell 命令注入(CNVD-C-2022-163612

    漏洞简述 3月24日,墨菲安全实验室情报预警监控发现 spark 提交修复 shell 命令注入的代码,当上传文件名可以被攻击者控制时,就可以构造恶意文件名造成远程任意命令执行。 Spark 是用于大规模数据处理的统一分析引擎。 用户上传文件后,tar 文件会被 hadoop 的 tar 命令解压,如果文件名被用户恶意构造后,就会导致 shell 命令注入。…

    2023年1月4日
  • CVE-2022-22947 SpringCloud GateWay SPEL RCE 漏洞分析

    漏洞概要 Spring Cloud Gateway 是Spring Cloud 生态中的API网关,包含限流、过滤等API治理功能。 Spring官方在2022年3月1日发布新版本修复了Spring Cloud Gateway中的一处代码注入漏洞。当actuator端点开启或暴露时,可以通过http请求修改路由,路由中包含的恶意filter参数会经过SPEL…

    2023年2月23日
  • Apache ShardingSphere-Proxy <5.3.0 身份认证绕过(CVE-2022-45347)

    漏洞简介 2022年12月22日,Apache 官方公告发布 ShardingSphere-Proxy 5.3.0 之前版本存在身份绕过漏洞(CVE-2022-45347)。当 ShardingSphere-Proxy 使用 MySQL 作为后端数据库时,由于 ShardingSphere-Proxy 在客户端认证失败后没有完全清理数据库会话信息,攻击者可利…

    2023年1月9日

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-180-9568

邮件:hi@murphysec.com

工作时间:周一至周五,10:00-19:00,节假日休息

关注公众号

20230105-100741