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方法
攻击路径:
- 攻击者通过
foo!method方式调用路由 - 最终调用
AttachBL.download(diskFileName, this.fileName, outstream, false) - 未对
fileName参数进行安全处理
关键漏洞代码:
File file = new File(fileName);
instream = new BufferedInputStream(new FileInputStream(file));
利用方式:
- 直接拼接文件名读取任意文件
- 可读取JWT密钥文件构造有效token访问受限API
影响:
- 可读取服务器敏感文件(如配置文件、密钥等)
- 为后续攻击提供基础(如获取JWT密钥)
2.2 任意文件上传漏洞 (CVE-2024-22510)
漏洞位置:BrandingAction#uploadFile方法
攻击路径:
- 攻击者调用
BrandingAction#uploadFile - 上传路径和后缀未受限制
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方法
攻击路径:
- 攻击者先利用文件上传漏洞上传恶意序列化文件
- 调用
/excelFieldMatch.action路由触发反序列化
关键漏洞代码:
FileInputStream fis = new FileInputStream(new File(excelMappingsDirectory, getMappingFileName(entity)));
ObjectInputStream objectInputStream = new ObjectInputStream(fis);
columNameToFieldIDMap = (Map)objectInputStream.readObject();
利用条件:
- 需要先上传恶意序列化文件到
/Allegra/trackdata/excelImport/1/listmapping - 访问路由:
/excelFieldMatch.action?fileName=1.xlsx&entity=list
影响:
- 可导致远程代码执行
- 完全控制服务器
2.4 ZipSlip任意文件写入漏洞 (CVE-2024-22504)
漏洞位置:Import#importFromAllegraFormat方法
攻击路径:
- 攻击者需要先获取有效JWT token(可利用文件读取漏洞获取)
- 制作恶意压缩包上传
- 触发解压操作
关键漏洞代码:
File destFile = new File(unzipTempDirectory, zipEntry.getName());
FileOutputStream fos = new FileOutputStream(destFile);
利用方式:
- 构造包含路径遍历文件名(如
../../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漏洞修复
- 对解压文件名进行规范化处理
- 检查解压路径是否在目标目录内
String canonicalDestPath = destFile.getCanonicalPath();
if (!canonicalDestPath.startsWith(unzipTempDirectory.getCanonicalPath())) {
throw new IOException("Entry is outside of the target dir");
}
4.3 安全配置建议
-
JWT安全:
- 定期轮换JWT密钥
- 将密钥存储在安全位置(如密钥管理系统)
-
文件操作安全:
- 使用
getCanonicalPath()检查路径有效性 - 实现文件操作的白名单机制
- 使用
-
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"
反序列化验证
- 上传恶意序列化文件到
/Allegra/trackdata/excelImport/1/listmapping - 访问:
GET /excelFieldMatch.action?fileName=1.xlsx&entity=list HTTP/1.1
ZipSlip验证
- 创建包含路径遍历条目的ZIP文件
- 使用有效JWT token上传:
POST /rest/v2/items/exchange/import/importFromAllegraFormat HTTP/1.1
Authorization: Bearer <JWT_TOKEN>
...
6. 总结
Allegra项目管理系统的这一系列漏洞展示了现代Web应用中常见的安全问题。这些漏洞单独来看已经十分危险,组合利用更可导致服务器被完全控制。开发人员应特别注意:
- 用户输入验证的重要性
- 文件操作的安全处理
- 反序列化的危险性
- 权限最小化原则
及时应用安全补丁并实施纵深防御策略是保护系统的关键。