CVE-2024-40544 /getHtml 接口导致SSRF 漏洞详细分析
字数 1192 2025-08-29 08:30:36
CVE-2024-40544 /getHtml接口SSRF漏洞分析与利用指南
漏洞概述
CVE-2024-40544是一个存在于PublicCMS系统中的服务器端请求伪造(SSRF)漏洞,位于/getHtml接口。该漏洞允许经过部分认证的攻击者通过精心构造的请求,使服务器向内部网络发起任意HTTP请求,可能导致内部服务探测、数据泄露等安全问题。
环境搭建
- 下载并部署PublicCMS系统
- 配置数据库连接信息
- 启动系统服务
- 访问后台管理界面
漏洞复现步骤
1. 获取appToken
要利用此漏洞,首先需要获取有效的appToken:
- 访问系统后台
- 找到"授权应用"功能模块
- 获取应用的
appKey和appSecret - 使用以下API获取appToken:
POST /api/appToken { "appKey": "your_app_key", "appSecret": "your_app_secret" } - 响应中会返回
appToken和有效时间
2. 利用SSRF漏洞
获取appToken后,可以调用存在漏洞的/getHtml接口:
POST /api/getHtml
{
"appToken": "your_app_token",
"url": "http://internal-service/path"
}
探测端口示例:
- 访问未开放端口(如8888)会返回
null - 访问开放端口会返回页面内容
漏洞分析
漏洞位置
漏洞位于GetHtmlMethod类中,该接口会对外部传入的URL参数发起HTTP请求。
关键代码流程
-
路由处理:
- 请求被路由到
GetHtmlMethod类 - 需要提供有效的
appToken
- 请求被路由到
-
认证流程:
- 代码路径:
com/publiccms/views/directive/api/AppTokenDirective.java - 使用
appKey和appSecret生成appToken - 生成的token会被保存并返回给用户
- 代码路径:
-
请求处理:
- 首先检查token的合法性
- 验证token是否具有对应API的访问权限
- 解析参数并调用对应的API方法
- 最终对用户提供的URL发起HTTP请求,导致SSRF漏洞
漏洞利用限制
- 需要获取有效的
appKey和appSecret来生成appToken - 生成的
appToken有有效期限制 - 需要token具有调用
/getHtml接口的权限
防御建议
-
对
/getHtml接口的URL参数进行严格过滤:- 禁止访问内网IP段
- 限制协议类型(如只允许HTTPS)
- 使用白名单机制限制可访问的域名
-
加强
appToken的权限控制:- 细粒度控制每个token可访问的API
- 记录token的使用日志
-
升级到已修复此漏洞的PublicCMS版本
调试方法
- 在
GetHtmlMethod类中设置断点 - 跟踪token验证流程
- 观察URL请求发起过程
- 监控网络请求以确认SSRF确实发生
总结
CVE-2024-40544是一个典型的认证后SSRF漏洞,虽然需要一定的前置条件才能利用,但一旦成功利用可能对系统安全造成严重影响。开发人员应重视所有会发起外部请求的接口,实施严格的输入验证和访问控制。