CVE-2021-32682 elFinder RCE 简单分析
字数 1488 2025-08-29 08:30:36

elFinder RCE漏洞分析(CVE-2021-32682)教学文档

1. 漏洞概述

1.1 基本信息

  • 漏洞编号: CVE-2021-32682
  • 影响组件: elFinder (开源Web文件管理器)
  • 漏洞类型: 远程命令执行(RCE)
  • 影响版本: elFinder <= 2.1.58
  • 漏洞原因: 创建ZIP存档时对name参数过滤不严导致命令注入

1.2 组件介绍

elFinder是一个使用jQuery UI和JavaScript编写的开源Web文件管理器,设计灵感来源于Mac OS X的Finder程序,提供简单便捷的文件管理功能。

2. 漏洞原理分析

2.1 漏洞触发点

漏洞存在于创建新ZIP存档功能中,攻击者可以控制name参数,该参数最终被传递到prox_open中执行,导致命令注入。

2.2 漏洞利用条件

  • 需要有创建ZIP存档的权限
  • 能够控制ZIP存档的文件名参数

2.3 技术细节

  1. 用户提供的name参数通过archive函数处理
  2. 经过正则转换和字符串替换后传入uniqueName函数
  3. 最终传递到remoteArchive函数
  4. 虽然使用了escapeshellarg()进行转义,但攻击者可以利用ZIP命令的-TT选项注入命令

3. 漏洞复现

3.1 环境搭建

  1. 下载受影响版本(<=2.1.58):
    https://github.com/Studio-42/elFinder
    
  2. 重命名配置文件:
    mv /php/connector.minimal.php-dist /php/connector.minimal.php
    
  3. 通过浏览器访问:
    /elfinder.src.html
    

3.2 漏洞验证

构造恶意请求,利用ZIP命令的-TT选项执行任意命令:

POST请求示例:
name=-TmTT="$(id>out.txt)foooo"

3.3 攻击原理

  1. 正常命令构造:
    zip -r9 -q 'a1.zip' './a.zip'
    
  2. 恶意构造后:
    zip -r9 -q '-TmTT="$(id>out.txt)foooo".zip' './a.txt'
    
  3. 利用-TT选项指定测试命令,执行id并将结果输出到out.txt

4. 代码分析

4.1 关键函数调用链

  1. connector.minimal.php → 包含autoload.php
  2. elFinderVolumeLocalFileSystem.class.php中的archive函数
  3. elFinder.class.php中的处理流程:
    • 检查name参数是否存在
    • 进行正则转换和字符串替换
    • 调用uniqueName函数处理
    • 传递到remoteArchive函数
    • 最终在makeArchive中构造命令

4.2 关键代码片段

// elFinder.class.php中对name参数的处理
if (isset($_POST['name'])) {
    $name = $_POST['name'];
    // 正则转换和字符串替换
    // ...
    $name = $this->uniqueName($dstDir, $name, '-');
    $this->remoteArchive($args, $name);
}

// makeArchive函数中的命令构造
$cmd = 'zip -r9 -q '.escapeshellarg($name).' '.escapeshellarg($dir);
$this->procExec($cmd);

5. 修复方案

5.1 官方修复

官方在后续版本中修复了此漏洞,主要措施包括:

  1. name参数进行更严格的过滤
  2. 限制特殊字符的使用

5.2 临时缓解措施

  1. 升级到最新版本
  2. 禁用ZIP存档功能
  3. 实施严格的输入验证

6. 参考链接

  1. 官方修复提交: https://github.com/Studio-42/elFinder/commit/a106c350b7dfe666a81d6b576816db9fe0899b17
  2. SonarSource分析: https://blog.sonarsource.com/elfinder-case-study-of-web-file-manager-vulnerabilities
  3. Exploit代码: https://packetstormsecurity.com/files/164173/elfinder_archive_cmd_injection.rb.txt

7. 总结

该漏洞展示了Web文件管理器中常见的命令注入风险,特别是在调用系统命令处理用户可控参数时。开发人员应当:

  1. 对所有用户输入进行严格验证
  2. 避免直接将用户输入拼接到系统命令中
  3. 使用安全的API替代系统命令调用
  4. 实施最小权限原则,限制Web应用的系统权限
elFinder RCE漏洞分析(CVE-2021-32682)教学文档 1. 漏洞概述 1.1 基本信息 漏洞编号 : CVE-2021-32682 影响组件 : elFinder (开源Web文件管理器) 漏洞类型 : 远程命令执行(RCE) 影响版本 : elFinder <= 2.1.58 漏洞原因 : 创建ZIP存档时对 name 参数过滤不严导致命令注入 1.2 组件介绍 elFinder是一个使用jQuery UI和JavaScript编写的开源Web文件管理器,设计灵感来源于Mac OS X的Finder程序,提供简单便捷的文件管理功能。 2. 漏洞原理分析 2.1 漏洞触发点 漏洞存在于创建新ZIP存档功能中,攻击者可以控制 name 参数,该参数最终被传递到 prox_open 中执行,导致命令注入。 2.2 漏洞利用条件 需要有创建ZIP存档的权限 能够控制ZIP存档的文件名参数 2.3 技术细节 用户提供的 name 参数通过 archive 函数处理 经过正则转换和字符串替换后传入 uniqueName 函数 最终传递到 remoteArchive 函数 虽然使用了 escapeshellarg() 进行转义,但攻击者可以利用ZIP命令的 -TT 选项注入命令 3. 漏洞复现 3.1 环境搭建 下载受影响版本( <=2.1.58): 重命名配置文件: 通过浏览器访问: 3.2 漏洞验证 构造恶意请求,利用ZIP命令的 -TT 选项执行任意命令: 3.3 攻击原理 正常命令构造: 恶意构造后: 利用 -TT 选项指定测试命令,执行 id 并将结果输出到 out.txt 4. 代码分析 4.1 关键函数调用链 connector.minimal.php → 包含 autoload.php elFinderVolumeLocalFileSystem.class.php 中的 archive 函数 elFinder.class.php 中的处理流程: 检查 name 参数是否存在 进行正则转换和字符串替换 调用 uniqueName 函数处理 传递到 remoteArchive 函数 最终在 makeArchive 中构造命令 4.2 关键代码片段 5. 修复方案 5.1 官方修复 官方在后续版本中修复了此漏洞,主要措施包括: 对 name 参数进行更严格的过滤 限制特殊字符的使用 5.2 临时缓解措施 升级到最新版本 禁用ZIP存档功能 实施严格的输入验证 6. 参考链接 官方修复提交: https://github.com/Studio-42/elFinder/commit/a106c350b7dfe666a81d6b576816db9fe0899b17 SonarSource分析: https://blog.sonarsource.com/elfinder-case-study-of-web-file-manager-vulnerabilities Exploit代码: https://packetstormsecurity.com/files/164173/elfinder_ archive_ cmd_ injection.rb.txt 7. 总结 该漏洞展示了Web文件管理器中常见的命令注入风险,特别是在调用系统命令处理用户可控参数时。开发人员应当: 对所有用户输入进行严格验证 避免直接将用户输入拼接到系统命令中 使用安全的API替代系统命令调用 实施最小权限原则,限制Web应用的系统权限