文件发送平台FileSender曝未授权SSTI漏洞,可泄露MySQL与S3密钥

本文详细分析CVE-2024-45186漏洞,FileSender存在服务器端模板注入漏洞,无需认证即可泄露数据库凭证和云存储密钥,导致用户文件泄露,影响荷兰多所大学,涵盖漏洞发现过程、利用方法和修复方案。

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天后删除),系统会返回错误:

1
eyJtZXNzYWdlIjoidHJhbnNmZXJfcHJlc3VtZWRfZXhwaXJlZCIsInVpZCI6IjY3MGE4N2M0YmQ0ODAiLCJkZXRhaWxzIjpudWxsfQ==

解码后为:

1
{"message":"transfer_presumed_expired","uid":"670a87c4bd480","details":null}

若将message改为"xxxxx":

1
{"message":"xxxxx","uid":"66633xxxxxxxxxx567e5752","details":null}

编码后为:

1
eyJtZXNzYWdlIjoieHh4eHgiLCJ1aWQiOiI2NjYzM3h4eHh4eHh4eHg1NjdlNTc1MiIsImRldGFpbHMiOm51bGx9

发现字符串被注入模板并用{}字符包裹,这暗示可能存在服务器端模板注入(SSTI)。

代码分析

下载源代码(提交ID:05b4226ef40392fdd8831b9054c858527c0249d9)后,搜索base64_decode函数,发现以下关键代码:

1
2
3
4
5
6
7
public static function unserialize($serialized) {
    $exception = (array)json_decode(base64_decode($serialized));
    array_walk_recursive($exception, function(&$value) {
        $value = preg_replace('`\{(tr:)*(cfg|conf|config):([^}]+)\}`', '', $value);
    });
    // ...
}

该代码尝试移除{cfg:something}类字符串,但由于我们的输入不含{}字符,不会被替换。因此,可通过注入cfg:db_username等配置变量泄露敏感信息。

配置泄露

根据文档,配置变量包括数据库用户名、密码和数据库名称。通过构造异常消息为cfg:db_username,可未经认证泄露这些配置值。

若数据库配置不当或与phpMyAdmin等工具同主机,访问数据库可能导致所有用户上传文件泄露。

此外,云存储(如S3或Azure)的访问密钥和秘密也通过配置变量设置。通过设置异常为Base64编码的{"message":"cfg:cloud_s3_key","uid":"66633xxxxxxxxxx567e5752","details":null},可泄露S凭证。

实际影响

获得S3访问令牌和密钥后,可通过以下命令列出存储桶内容:

1
AWS_ACCESS_KEY_ID=thekeyvalue AWS_SECRET_ACCESS_KEY=thesecretvalue aws ls s3://thebucketnamevalue --endpoint-url=https://theendpointusedtoproxytos3

所有文件均被暴露。若用户未设置密码,文件将直接泄露;加密文件则受密码保护。

补丁泄露

2024年8月2日,trufflehog发布研究称可通过暴力破解提交ID查看GitHub隐藏提交。运行以下命令:

1
trufflehog github-experimental —repo https://github.com/filesender/filesender.git —object-discovery

可发现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日:博客发布
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计