CVE-2024–45186:FileSender未授权SSTI漏洞暴露MySQL和S3凭证
背景
FileSender是一款专为安全传输大文件设计的开源Web应用程序。该项目的构想源于2007年泛欧研究与教育网络GÉANT的一次特别会议,其主要目标是通过可信中介实现与特定受众无痛分享任意大文件。该开源项目的治理由Commons Conservancy基金会组织。
FileSender主要使用PHP构建,并采用MySQL或PostgreSQL进行数据库管理。多年来,它已发展出多项功能,包括用户认证、文件加密、审计追踪、访客访问和可定制用户界面。
需要重点说明的是,FileSender支持客户端加密。这意味着用户在上传过程中可选择加密传输文件,该过程以数据块形式在浏览器内使用自选密码完成。加密后的数据块上传至FileSender实例,下载方使用密码在本地解密。若实例中的数据遭窃,将受到密码保护。
目前,FileSender被全球教育机构、研究组织和企业广泛使用。我所在的阿姆斯特丹大学医学中心及阿姆斯特丹大学便是其中一员,已使用该平台长达15年。
未授权漏洞利用
FileSender通常由认证用户使用,因此我们试图寻找无需认证即可影响所有在线实例的漏洞。
通过Burp Suite和MITM代理浏览器,我们测试了FileSender的所有功能。最有趣的端点是文件下载功能,因为接收方可以是任意邮箱地址,这意味着存在未授权测试的可能性。
测试中发现,若文件过期(默认7天后删除),系统会返回错误:
|
|
解码后为:
|
|
若将message改为"xxxxx":
|
|
编码后为:
|
|
发现字符串被注入模板并用{}字符包裹,这暗示可能存在服务器端模板注入(SSTI)。
代码分析
下载源代码(提交ID:05b4226ef40392fdd8831b9054c858527c0249d9)后,搜索base64_decode
函数,发现以下关键代码:
|
|
该代码尝试移除{cfg:something}
类字符串,但由于我们的输入不含{}字符,不会被替换。因此,可通过注入cfg:db_username
等配置变量泄露敏感信息。
配置泄露
根据文档,配置变量包括数据库用户名、密码和数据库名称。通过构造异常消息为cfg:db_username
,可未经认证泄露这些配置值。
若数据库配置不当或与phpMyAdmin等工具同主机,访问数据库可能导致所有用户上传文件泄露。
此外,云存储(如S3或Azure)的访问密钥和秘密也通过配置变量设置。通过设置异常为Base64编码的{"message":"cfg:cloud_s3_key","uid":"66633xxxxxxxxxx567e5752","details":null}
,可泄露S凭证。
实际影响
获得S3访问令牌和密钥后,可通过以下命令列出存储桶内容:
|
|
所有文件均被暴露。若用户未设置密码,文件将直接泄露;加密文件则受密码保护。
补丁泄露
2024年8月2日,trufflehog发布研究称可通过暴力破解提交ID查看GitHub隐藏提交。运行以下命令:
|
|
可发现FileSender团队为修复漏洞提交的隐藏补丁,其中甚至描述了漏洞细节:
“Previous error serialization led to user controlled exception data which could be used for template injection allowing for config dumping…”
补丁将异常信息存储在用户会话中,避免用户控制数据。
讨论
此漏洞报告体现了安全设计的重要性。FileSender的客户端加密功能为使用强密码的用户提供了保护,但该功能非强制启用。
此外,这也显示了多方测试基础设施的重要性。不要仅限于渗透测试或审计,应允许众测并安全报告漏洞。
FileSender团队在漏洞报告后出色地通知了所有受影响组织,并透明地披露了问题。
时间线
- 2024年6月7日:发现SSTI漏洞,通知SURF CERT
- 2024年6月10日:与FileSender核心开发者通话解释漏洞
- 2024年6月13日:部署首次热修复
- 2024年7月3日:FileSender将敏感配置变量隔离至新文件
- 2024年8月2日:Trufflehog发布研究成果
- 2024年8月3日:向FileSender团队共享泄露的补丁提交
- 2024年8月8日:FileSender发布新版本与补丁
- 2024年9月10日:FileSender发布CVE-2024–45186博客
- 2024年10月17日:博客发布