Allegra 一系列CVE漏洞分析
字数 2287 2025-08-23 18:31:24

Allegra项目管理系统漏洞分析与防护指南

1. 漏洞概述

Allegra(TrackPlus)项目管理系统在2024年2月被披露存在一系列安全漏洞,包括:

  • CVE-2024-22507:任意文件读取漏洞
  • CVE-2024-22510:任意文件上传漏洞
  • CVE-2024-22505:反序列化漏洞
  • CVE-2024-22504:ZipSlip任意文件写入漏洞

这些漏洞影响Allegra 7.5.1之前的版本,可导致服务器被完全控制。

2. 漏洞详细分析

2.1 任意文件读取漏洞 (CVE-2024-22507)

漏洞位置AttachmentGlobalAction#download方法

攻击路径

  1. 攻击者通过foo!method方式调用路由
  2. 最终调用AttachBL.download(diskFileName, this.fileName, outstream, false)
  3. 未对fileName参数进行安全处理

关键漏洞代码

File file = new File(fileName);
instream = new BufferedInputStream(new FileInputStream(file));

利用方式

  • 直接拼接文件名读取任意文件
  • 可读取JWT密钥文件构造有效token访问受限API

影响

  • 可读取服务器敏感文件(如配置文件、密钥等)
  • 为后续攻击提供基础(如获取JWT密钥)

2.2 任意文件上传漏洞 (CVE-2024-22510)

漏洞位置BrandingAction#uploadFile方法

攻击路径

  1. 攻击者调用BrandingAction#uploadFile
  2. 上传路径和后缀未受限制
  3. fileNameToReplace参数可控

关键漏洞代码

String uploadedFileNewPath = logosDirAbsPath + File.separator + 
    FilenameUtils.removeExtension(fileNameToReplace) + uploadedFileExt;
Files.move(Paths.get(uploadedFile.getAbsolutePath()), 
    Paths.get(uploadedFileNewPath), StandardCopyOption.REPLACE_EXISTING);

利用方式

  • 通过控制fileNameToReplace参数实现任意文件上传
  • 可上传恶意文件到任意可写目录

影响

  • 可上传WebShell获取服务器控制权
  • 为反序列化漏洞利用提供条件

2.3 反序列化漏洞 (CVE-2024-22505)

漏洞位置ExcelFieldMatchBL#renderFieldMatch方法

攻击路径

  1. 攻击者先利用文件上传漏洞上传恶意序列化文件
  2. 调用/excelFieldMatch.action路由触发反序列化

关键漏洞代码

FileInputStream fis = new FileInputStream(new File(excelMappingsDirectory, getMappingFileName(entity)));
ObjectInputStream objectInputStream = new ObjectInputStream(fis);
columNameToFieldIDMap = (Map)objectInputStream.readObject();

利用条件

  1. 需要先上传恶意序列化文件到/Allegra/trackdata/excelImport/1/listmapping
  2. 访问路由:/excelFieldMatch.action?fileName=1.xlsx&entity=list

影响

  • 可导致远程代码执行
  • 完全控制服务器

2.4 ZipSlip任意文件写入漏洞 (CVE-2024-22504)

漏洞位置Import#importFromAllegraFormat方法

攻击路径

  1. 攻击者需要先获取有效JWT token(可利用文件读取漏洞获取)
  2. 制作恶意压缩包上传
  3. 触发解压操作

关键漏洞代码

File destFile = new File(unzipTempDirectory, zipEntry.getName());
FileOutputStream fos = new FileOutputStream(destFile);

利用方式

  • 构造包含路径遍历文件名(如../../malicious.jsp)的ZIP条目
  • 上传后解压到Web目录或其他敏感位置

影响

  • 可覆盖系统关键文件
  • 可写入WebShell获取服务器控制权

3. 漏洞利用链分析

这些漏洞可形成完整的攻击链:

  1. 利用任意文件读取漏洞(CVE-2024-22507)获取JWT密钥
  2. 构造有效token访问受限API
  3. 利用任意文件上传漏洞(CVE-2024-22510)上传恶意序列化文件
  4. 触发反序列化漏洞(CVE-2024-22505)执行任意代码
  5. 或利用ZipSlip漏洞(CVE-2024-22504)写入WebShell

4. 防护措施

4.1 通用防护建议

  1. 立即升级:升级到Allegra 7.5.1或更高版本
  2. 输入验证:对所有用户输入进行严格验证和过滤
  3. 最小权限:应用程序运行使用最小必要权限
  4. 日志监控:加强日志记录和监控,特别是文件操作

4.2 针对各漏洞的具体修复

任意文件读取漏洞修复

  • fileName参数进行规范化处理
  • 限制文件访问范围,使用白名单机制
  • 添加路径遍历检查

任意文件上传漏洞修复

  • 限制上传文件类型(白名单)
  • 对上传文件名进行严格过滤
  • 使用随机生成的文件名存储上传文件
  • 限制上传目录不可执行

反序列化漏洞修复

  • 避免直接反序列化用户可控数据
  • 使用安全的反序列化方法(如JSON)
  • 实现ObjectInputFilter限制反序列化类

ZipSlip漏洞修复

  • 对解压文件名进行规范化处理
  • 检查解压路径是否在目标目录内
String canonicalDestPath = destFile.getCanonicalPath();
if (!canonicalDestPath.startsWith(unzipTempDirectory.getCanonicalPath())) {
    throw new IOException("Entry is outside of the target dir");
}

4.3 安全配置建议

  1. JWT安全

    • 定期轮换JWT密钥
    • 将密钥存储在安全位置(如密钥管理系统)
  2. 文件操作安全

    • 使用getCanonicalPath()检查路径有效性
    • 实现文件操作的白名单机制
  3. API安全

    • 对敏感API实施更严格的访问控制
    • 增加请求频率限制

5. 漏洞验证方法

任意文件读取验证

GET /attachmentGlobal!download.action?fileName=/etc/passwd HTTP/1.1

文件上传验证

POST /branding!uploadFile.action HTTP/1.1
...
Content-Disposition: form-data; name="fileNameToReplace"; filename="../../malicious.jsp"

反序列化验证

  1. 上传恶意序列化文件到/Allegra/trackdata/excelImport/1/listmapping
  2. 访问:
GET /excelFieldMatch.action?fileName=1.xlsx&entity=list HTTP/1.1

ZipSlip验证

  1. 创建包含路径遍历条目的ZIP文件
  2. 使用有效JWT token上传:
POST /rest/v2/items/exchange/import/importFromAllegraFormat HTTP/1.1
Authorization: Bearer <JWT_TOKEN>
...

6. 总结

Allegra项目管理系统的这一系列漏洞展示了现代Web应用中常见的安全问题。这些漏洞单独来看已经十分危险,组合利用更可导致服务器被完全控制。开发人员应特别注意:

  1. 用户输入验证的重要性
  2. 文件操作的安全处理
  3. 反序列化的危险性
  4. 权限最小化原则

及时应用安全补丁并实施纵深防御策略是保护系统的关键。

Allegra项目管理系统漏洞分析与防护指南 1. 漏洞概述 Allegra(TrackPlus)项目管理系统在2024年2月被披露存在一系列安全漏洞,包括: CVE-2024-22507:任意文件读取漏洞 CVE-2024-22510:任意文件上传漏洞 CVE-2024-22505:反序列化漏洞 CVE-2024-22504:ZipSlip任意文件写入漏洞 这些漏洞影响Allegra 7.5.1之前的版本,可导致服务器被完全控制。 2. 漏洞详细分析 2.1 任意文件读取漏洞 (CVE-2024-22507) 漏洞位置 : AttachmentGlobalAction#download 方法 攻击路径 : 攻击者通过 foo!method 方式调用路由 最终调用 AttachBL.download(diskFileName, this.fileName, outstream, false) 未对 fileName 参数进行安全处理 关键漏洞代码 : 利用方式 : 直接拼接文件名读取任意文件 可读取JWT密钥文件构造有效token访问受限API 影响 : 可读取服务器敏感文件(如配置文件、密钥等) 为后续攻击提供基础(如获取JWT密钥) 2.2 任意文件上传漏洞 (CVE-2024-22510) 漏洞位置 : BrandingAction#uploadFile 方法 攻击路径 : 攻击者调用 BrandingAction#uploadFile 上传路径和后缀未受限制 fileNameToReplace 参数可控 关键漏洞代码 : 利用方式 : 通过控制 fileNameToReplace 参数实现任意文件上传 可上传恶意文件到任意可写目录 影响 : 可上传WebShell获取服务器控制权 为反序列化漏洞利用提供条件 2.3 反序列化漏洞 (CVE-2024-22505) 漏洞位置 : ExcelFieldMatchBL#renderFieldMatch 方法 攻击路径 : 攻击者先利用文件上传漏洞上传恶意序列化文件 调用 /excelFieldMatch.action 路由触发反序列化 关键漏洞代码 : 利用条件 : 需要先上传恶意序列化文件到 /Allegra/trackdata/excelImport/1/listmapping 访问路由: /excelFieldMatch.action?fileName=1.xlsx&entity=list 影响 : 可导致远程代码执行 完全控制服务器 2.4 ZipSlip任意文件写入漏洞 (CVE-2024-22504) 漏洞位置 : Import#importFromAllegraFormat 方法 攻击路径 : 攻击者需要先获取有效JWT token(可利用文件读取漏洞获取) 制作恶意压缩包上传 触发解压操作 关键漏洞代码 : 利用方式 : 构造包含路径遍历文件名(如 ../../malicious.jsp )的ZIP条目 上传后解压到Web目录或其他敏感位置 影响 : 可覆盖系统关键文件 可写入WebShell获取服务器控制权 3. 漏洞利用链分析 这些漏洞可形成完整的攻击链: 利用任意文件读取漏洞(CVE-2024-22507)获取JWT密钥 构造有效token访问受限API 利用任意文件上传漏洞(CVE-2024-22510)上传恶意序列化文件 触发反序列化漏洞(CVE-2024-22505)执行任意代码 或利用ZipSlip漏洞(CVE-2024-22504)写入WebShell 4. 防护措施 4.1 通用防护建议 立即升级 :升级到Allegra 7.5.1或更高版本 输入验证 :对所有用户输入进行严格验证和过滤 最小权限 :应用程序运行使用最小必要权限 日志监控 :加强日志记录和监控,特别是文件操作 4.2 针对各漏洞的具体修复 任意文件读取漏洞修复 对 fileName 参数进行规范化处理 限制文件访问范围,使用白名单机制 添加路径遍历检查 任意文件上传漏洞修复 限制上传文件类型(白名单) 对上传文件名进行严格过滤 使用随机生成的文件名存储上传文件 限制上传目录不可执行 反序列化漏洞修复 避免直接反序列化用户可控数据 使用安全的反序列化方法(如JSON) 实现 ObjectInputFilter 限制反序列化类 ZipSlip漏洞修复 对解压文件名进行规范化处理 检查解压路径是否在目标目录内 4.3 安全配置建议 JWT安全 : 定期轮换JWT密钥 将密钥存储在安全位置(如密钥管理系统) 文件操作安全 : 使用 getCanonicalPath() 检查路径有效性 实现文件操作的白名单机制 API安全 : 对敏感API实施更严格的访问控制 增加请求频率限制 5. 漏洞验证方法 任意文件读取验证 文件上传验证 反序列化验证 上传恶意序列化文件到 /Allegra/trackdata/excelImport/1/listmapping 访问: ZipSlip验证 创建包含路径遍历条目的ZIP文件 使用有效JWT token上传: 6. 总结 Allegra项目管理系统的这一系列漏洞展示了现代Web应用中常见的安全问题。这些漏洞单独来看已经十分危险,组合利用更可导致服务器被完全控制。开发人员应特别注意: 用户输入验证的重要性 文件操作的安全处理 反序列化的危险性 权限最小化原则 及时应用安全补丁并实施纵深防御策略是保护系统的关键。