微信支付被爆0元漏洞,如何修复

  1. 新闻资讯
  2. 技术百科
公司新闻 案例分享 技术百科 行业动态

微信支付被爆0元漏洞,如何修复

来源:奇站网络 浏览量:2433 发布日期:

7月3日,微信支付爆出存在严重安全漏洞,可能导致商户服务器被入侵。

问题重现

  1. public static void test() {
  2. String xmlStr = "<?xml version=\"1.0\" encoding=\"utf-8\"?><!DOCTYPE xdsec[<!ELEMENT methodname ANY><!ENTITY xxe SYSTEM \"file:///c:/windows/win.ini\">]><methodcall><methodname>&xxe;</methodname></methodcall>";
  3. try {
  4. System.out.println(xmlStr);
  5. System.out.println("+++++++++++++++++");
  6. Map<String, String> hm = WxPayTool.xmlToMap(xmlStr);
  7. System.out.println("+++++++++++++++++");
  8. System.out.println(hm);
  9. } catch (Exception e) {
  10. e.printStackTrace();
  11. }
  12. }

xmlToMap方法对应sdk中xmlToMap方法。
运行测试代码,可以发现本地文件被输出。

上面只是问题的简单定位,虽然攻击者不太可能知道微信通知的url,而且实际项目中一般不会将内容直接输出,但是攻击者仍然可以执行其他命名或者通过其他方式获取到服务器上文件或目录,因此应当尽快修复该问题。

修复方案

  1. DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
  2. documentBuilderFactory.setFeature("http://apache.org/xml/features/disallow-doctype-decl",true); //防止可能的SSRF
  3. documentBuilderFactory.setXIncludeAware(false);
  4. documentBuilderFactory.setExpandEntityReferences(false);
  5. documentBuilderFactory.setFeature("http://xml.org/sax/features/external-parameter-entities", false);
  6. documentBuilderFactory.setFeature("http://xml.org/sax/features/external-general-entities", false);
  7. DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
  8. InputStream stream = new ByteArrayInputStream(xmlString.getBytes("UTF-8"));
标签:

厦门奇站网络科技有限公司

电话:13313868605

QQ:3413772931

地址:厦门集美区软件园三期

网站地图


                    扫一扫加我咨询