kx00007/CVE-2026-35196
GitHub: kx00007/CVE-2026-35196
该项目披露并演示了 Chamilo LMS 中一个经认证的 OS 命令注入漏洞,攻击者可通过 session 污染实现远程代码执行。
Stars: 0 | Forks: 0
# `CVE-2026-35196` · Chamilo LMS · OS 命令注入 → RCE
     
## 📋 漏洞概述 | 字段 | 详情 | |--------------------|---------------------------------------------------------------| | **产品** | Chamilo LMS | | **受影响版本** | < 2.0 (已在 v1.11.32 上确认) | | **漏洞** | OS 命令注入 | | **CWE** | [CWE-78](https://cwe.mitre.org/data/definitions/78.html) — OS 命令中使用的特殊元素中和不当 | | **CVSSv3.1 评分** | **8.8 (高危)** | | **向量** | `CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H` | | **需要认证** | 是 (任何具有恶意 session 的已认证用户) | | **利用类型** | 已认证远程代码执行 | | **漏洞文件** | `main/inc/ajax/gradebook.ajax.php` | ## 🔍 描述 Chamilo LMS v1.11.32 的 `main/inc/ajax/gradebook.ajax.php` 文件的 `export_all_certificates` 操作中存在一个严重的 **OS 命令注入** 漏洞。 应用程序通过 `api_get_course_id()` 获取课程代码,该函数直接从 `$_SESSION['_cid']` 中读取。这个从 session 获取的值**未经任何过滤便被拼接**到了 `shell_exec()` 调用中 —— 没有 `escapeshellarg()`,没有白名单验证,也没有类型强制转换。 如果攻击者能够操纵或污染其 session 中的 `_cid` 变量(通过 session 污染、IDOR 链式攻击或其他 session 操纵手段),就可以注入任意的 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 &"); ``` 由于应用程序隐式信任 session 变量的内容,并且在将它们发送到系统 shell 之前未能正确转义,因此具有恶意 session 的攻击者可以追加并执行恶意命令。例如,如果 `_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 脚本,接着执行注入的 payload,并忽略剩余原本预期执行的命令字符串。 ## 💣 概念验证 1. **Session 污染:** 攻击者必须首先能够影响 `$_SESSION['_cid']` 变量。这可以通过将该缺陷与 session 污染漏洞相结合,或者通过应用程序中其他位置的不安全参数处理或 IDOR 来操纵课程代码值,从而更新其 session 上下文来实现。 2. **Payload 注入:** 将 `_cid` session 变量设置为:`"; [MALICIOUS_COMMAND]; #"` 3. **执行:** 发送一个 `GET` 请求到:`/main/inc/ajax/gradebook.ajax.php?a=export_all_certificates&cat_id=1`,并携带被污染的 session cookie。 4. **结果:** 服务器盲目地以 Web 应用程序用户(`www-data`)的权限执行注入的命令。 ## 📊 影响分析 | 维度 | 影响 | |--------------------|--------------------------------------------------------------------| | **机密性** | 完全读取权限 — 源代码、配置文件、数据库凭据、`/etc/passwd` | | **完整性** | 任意文件写入、webshell 部署、数据库篡改 | | **可用性** | 服务中断、文件系统破坏、勒索软件部署 | | **范围** | Web 服务器进程(`www-data`);通过凭据暴露存在横向移动的潜在风险 | ## 🛡️ 修复建议 - **应用 `escapeshellarg()`:** 在将所有用户派生的变量(如 `$courseCode`、`$sessionId` 和 `$userList`)传递给 `shell_exec()` 之前,使用 PHP 的 `escapeshellarg()` 将其包裹,以中和任意的 OS 元字符。 - **严格的 Session 验证:** 确保 session 状态中存储的变量(例如 `$_SESSION['_cid']`)经过严格的类型限制和过滤,以便在入口点阻止潜在的“Session 污染”或 IDOR 链式攻击。 - **实施最小权限原则:** 为 Web 服务器服务(`www-data`)配置严格的文件系统写入权限,并限制应用程序对基本 Linux shell 二进制文件的访问,以减轻后渗透阶段的破坏能力。 ## 🧪 环境 | 组件 | 详情 | |---------------|--------------------------| | **OS** | Ubuntu Server (Docker) | | **Web 服务器**| Apache / Nginx | | **PHP** | 7.x / 8.x | | **应用** | Chamilo LMS v1.11.32-v2.0 | | **Shell** | `/bin/sh` → bash | ## 📎 参考资料 - [Chamilo LMS 官方仓库](https://github.com/chamilo/chamilo-lms) - [CWE-78: OS 命令注入](https://cwe.mitre.org/data/definitions/78.html) - [OWASP: 命令注入](https://owasp.org/www-community/attacks/Command_Injection) - [CVE-2026-29041](https://github.com/kx00007/CVE-2026-29041) — 同一研究员发现的先前 Chamilo RCE 漏洞 (CWE-434, CVSS 8.8) ## 👤 研究员 ``` 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) ```
     
## 📋 漏洞概述 | 字段 | 详情 | |--------------------|---------------------------------------------------------------| | **产品** | Chamilo LMS | | **受影响版本** | < 2.0 (已在 v1.11.32 上确认) | | **漏洞** | OS 命令注入 | | **CWE** | [CWE-78](https://cwe.mitre.org/data/definitions/78.html) — OS 命令中使用的特殊元素中和不当 | | **CVSSv3.1 评分** | **8.8 (高危)** | | **向量** | `CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H` | | **需要认证** | 是 (任何具有恶意 session 的已认证用户) | | **利用类型** | 已认证远程代码执行 | | **漏洞文件** | `main/inc/ajax/gradebook.ajax.php` | ## 🔍 描述 Chamilo LMS v1.11.32 的 `main/inc/ajax/gradebook.ajax.php` 文件的 `export_all_certificates` 操作中存在一个严重的 **OS 命令注入** 漏洞。 应用程序通过 `api_get_course_id()` 获取课程代码,该函数直接从 `$_SESSION['_cid']` 中读取。这个从 session 获取的值**未经任何过滤便被拼接**到了 `shell_exec()` 调用中 —— 没有 `escapeshellarg()`,没有白名单验证,也没有类型强制转换。 如果攻击者能够操纵或污染其 session 中的 `_cid` 变量(通过 session 污染、IDOR 链式攻击或其他 session 操纵手段),就可以注入任意的 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 &"); ``` 由于应用程序隐式信任 session 变量的内容,并且在将它们发送到系统 shell 之前未能正确转义,因此具有恶意 session 的攻击者可以追加并执行恶意命令。例如,如果 `_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 脚本,接着执行注入的 payload,并忽略剩余原本预期执行的命令字符串。 ## 💣 概念验证 1. **Session 污染:** 攻击者必须首先能够影响 `$_SESSION['_cid']` 变量。这可以通过将该缺陷与 session 污染漏洞相结合,或者通过应用程序中其他位置的不安全参数处理或 IDOR 来操纵课程代码值,从而更新其 session 上下文来实现。 2. **Payload 注入:** 将 `_cid` session 变量设置为:`"; [MALICIOUS_COMMAND]; #"` 3. **执行:** 发送一个 `GET` 请求到:`/main/inc/ajax/gradebook.ajax.php?a=export_all_certificates&cat_id=1`,并携带被污染的 session cookie。 4. **结果:** 服务器盲目地以 Web 应用程序用户(`www-data`)的权限执行注入的命令。 ## 📊 影响分析 | 维度 | 影响 | |--------------------|--------------------------------------------------------------------| | **机密性** | 完全读取权限 — 源代码、配置文件、数据库凭据、`/etc/passwd` | | **完整性** | 任意文件写入、webshell 部署、数据库篡改 | | **可用性** | 服务中断、文件系统破坏、勒索软件部署 | | **范围** | Web 服务器进程(`www-data`);通过凭据暴露存在横向移动的潜在风险 | ## 🛡️ 修复建议 - **应用 `escapeshellarg()`:** 在将所有用户派生的变量(如 `$courseCode`、`$sessionId` 和 `$userList`)传递给 `shell_exec()` 之前,使用 PHP 的 `escapeshellarg()` 将其包裹,以中和任意的 OS 元字符。 - **严格的 Session 验证:** 确保 session 状态中存储的变量(例如 `$_SESSION['_cid']`)经过严格的类型限制和过滤,以便在入口点阻止潜在的“Session 污染”或 IDOR 链式攻击。 - **实施最小权限原则:** 为 Web 服务器服务(`www-data`)配置严格的文件系统写入权限,并限制应用程序对基本 Linux shell 二进制文件的访问,以减轻后渗透阶段的破坏能力。 ## 🧪 环境 | 组件 | 详情 | |---------------|--------------------------| | **OS** | Ubuntu Server (Docker) | | **Web 服务器**| Apache / Nginx | | **PHP** | 7.x / 8.x | | **应用** | Chamilo LMS v1.11.32-v2.0 | | **Shell** | `/bin/sh` → bash | ## 📎 参考资料 - [Chamilo LMS 官方仓库](https://github.com/chamilo/chamilo-lms) - [CWE-78: OS 命令注入](https://cwe.mitre.org/data/definitions/78.html) - [OWASP: 命令注入](https://owasp.org/www-community/attacks/Command_Injection) - [CVE-2026-29041](https://github.com/kx00007/CVE-2026-29041) — 同一研究员发现的先前 Chamilo RCE 漏洞 (CWE-434, CVSS 8.8) ## 👤 研究员 ``` 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, Cutter, Go语言工具, 命令注入, 编程工具, 请求拦截, 远程代码执行