CVE-2026-35196 · Chamilo LMS · 操作系统命令注入 → RCE
研究人员: K
披露类型: 负责任披露
状态: 已修复 受影响产品: Chamilo LMS< 2.0(已在v1.11.32上确认)
Chamilo LMS v1.11.32 的 main/inc/ajax/gradebook.ajax.php 中的 export_all_certificates 操作存在一个严重的操作系统命令注入漏洞。
应用程序通过 api_get_course_id() 获取课程代码,该函数直接读取 $_SESSION['_cid']。这个来自会话的值被未经净化地拼接到 shell_exec() 调用中——没有使用 escapeshellarg(),没有白名单验证,也没有类型强制。
能够操纵或污染其会话 _cid 变量的攻击者(通过会话污染、IDOR 链或其他会话操纵原语)可以注入任意 shell 元字符,并以 Web 服务器用户(www-data)身份实现完全远程代码执行。
漏洞文件: main/inc/ajax/gradebook.ajax.php
漏洞函数: export_all_certificates
当用户触发 export_all_certificates 操作时,脚本会尝试运行一个后台进程来处理证书:
$courseCode = api_get_course_id(); // Retrieves the value from $_SESSION['_cid']
$sessionId = api_get_session_id();
// ...
$commandScript = api_get_path(SYS_CODE_PATH).'gradebook/cli/export_all_certificates.php';
$userList = implode(',', $userList);
// Flaw: Variables like $courseCode are passed directly to the shell without escapeshellarg()
shell_exec("php $commandScript $courseCode $sessionId $categoryId $userList > /dev/null &");
由于应用程序隐式信任会话变量的内容,并且未能在将其发送到系统 shell 之前进行适当转义,因此拥有被操纵会话的攻击者可以附加并执行恶意命令。例如,如果 _cid 包含 "; touch /tmp/remote_code_by_k; #",则 bash/sh shell 解释的命令变为:
php /var/www/chamilo/main/gradebook/cli/export_all_certificates.php ; touch /tmp/remote_code_by_k; # ... > /dev/null &
shell 会执行 CLI 脚本,然后执行被注入的载荷,并忽略原命令字符串的其余部分。
$_SESSION['_cid'] 变量。这可以通过将该缺陷与会话污染漏洞链式利用,或通过应用程序其他位置的 IDOR 或不安全的参数处理来操纵课程代码值以更新其会话上下文来实现。_cid 设置为:"; [MALICIOUS_COMMAND]; #"/main/inc/ajax/gradebook.ajax.php?a=export_all_certificates&cat_id=1 发送 GET 请求。www-data)的权限盲目执行被注入的命令。| 维度 |
|---|
escapeshellarg(): 在将 $courseCode、$sessionId 和 $userList 等所有用户派生变量传递给 shell_exec() 之前,使用 PHP 的 escapeshellarg() 包裹它们,以中和任意的操作系统元字符。$_SESSION['_cid'])具有严格的类型并经过净化,以便在入口点阻止潜在的“会话污染”或 IDOR 链式攻击。www-data)配置严格的文件系统写入权限,并限制应用程序对必要的 Linux shell 二进制文件的访问,以降低漏洞利用后的能力。Handle : K
GitHub : https://github.com/kx00007
Focus : Server-Side Vulnerability RCE, CVE Hunting, Vulnerability Research, Exploit Development
Prior : CVE-2026-29041 (Chamilo LMS — Authenticated RCE via File Upload)
⚡Try Harder.
| 字段 | 详情 |
|---|
| 产品 | Chamilo LMS |
| 受影响版本 | < 2.0(已在 v1.11.32 上确认) |
| 漏洞类型 | 操作系统命令注入 |
| CWE | CWE-78 — 对操作系统命令中特殊元素的中和不当 |
| CVSSv3.1 评分 | 8.8(高危) |
| 向量 | CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H |
| 需要认证 | 是(任意拥有被污染会话的已认证用户) |
| 利用类型 | 已认证远程代码执行 |
| 漏洞文件 | main/inc/ajax/gradebook.ajax.php |
| 影响 |
|---|
| 机密性 | 完全读取权限 — 源代码、配置、数据库凭据、/etc/passwd |
| 完整性 | 任意文件写入、Webshell 部署、数据库篡改 |
| 可用性 | 服务中断、文件系统破坏、勒索软件部署 |
| 范围 | Web 服务器进程(www-data);通过凭据泄露存在横向移动的可能性 |
| 组件 | 详情 |
|---|
| 操作系统 | Ubuntu Server (Docker) |
| Web 服务器 | Apache / Nginx |
| PHP | 7.x / 8.x |
| 应用程序 | Chamilo LMS v1.11.32-v2.0 |
| Shell | /bin/sh → bash |