zoukankan      html  css  js  c++  java
  • ASP.NET微信支付XXE漏洞修复

    1. XXE场景

    关于XML解析存在的安全问题指引
    微信支付商户,最近暴露的XML外部实体注入漏洞(XML External Entity Injection,简称 XXE),该安全问题是由XML组件默认没有禁用外部实体引用导致,非微信支付系统存在漏洞。
    如果你在使用支付业务回调通知中,存在以下场景有使用XML解析的情况,请务必检查是否对进行了防范。
    
    场景1:支付成功通知:notify_url参数值对应的URL;
    场景2:退款成功通知:notify_url参数值对应的URL;
    场景3:委托代扣签约、解约、扣款通知;
    场景4:车主解约通知;
    场景5:扫码支付模式一回调:在商户平台(pay.weixin.qq.com)-->产品中心-->开发配置-->支付配置-->扫码支付-->支付回调链接;
    注:APP支付的用户端SDK不受影响,但APP支付成功回调通知里面要检查。
    
    举例:需检查统一下单中传的notify_url参数值对应的URL,是否具有XXE漏洞
    <xml>
       <appid> </appid>
       <attach>支付测试</attach>
       <body> </body>
       <mch_id></mch_id>
       <nonce_str> </nonce_str>
       <notify_url>http://wxpay.wxutil.com/pub_v2/pay/notify.v2.php</notify_url>
       <openid>oUpF8uMuAJO_M2pxb1Q9zNjWeS6o</openid>
       <out_trade_no></out_trade_no>
       <spbill_create_ip></spbill_create_ip>
       <total_fee>1</total_fee>
       <trade_type>JSAPI</trade_type>
       <sign> </sign>
    </xml>
    检查方法
    如果漏洞被外界攻击,可能出现资金损失,所以请贵司重视,必须修复漏洞。
    检测XXE漏洞方法:
    使用贵司商户号登录商户平台(pay.weixin.qq.com),进入【产品中心】-->【安全医生】,开通后即可进行安全检测。
    
    微信支付社区: https://developers.weixin.qq.com/community/pay
    修复建议
    1.如果您的后台系统使用了官方SDK,请更新SDK到最新版本 SDK的链接:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=11_1
    2.如果您是有系统提供商,请联系提供商进行核查和升级修复;
    3.如果您是自研系统,请联系技术部门按以下指引核查和修复;
    4.如果您的收款系统已不再使用,请将回调URL的服务删除;
    5.采用主动查单,不再使用回调。
    因XXE属于高危漏洞,如不贵司一直未修复,将被停部分功能权限或停交易权限
    
    温馨提醒:
    如果贵司(或贵司的技术服务商)无法修复漏洞,可以换无漏洞的支付系统(比如使用微信买单收款或其他服务商收款系统)
    请填写问卷告诉我们贵司的情况:填写问卷,提供技术负责人,我们将主动协助贵司修复。
    如果以下方法不能解决您的问题,您可以在【微信开放社区】发帖,发帖标题请带上【XXE】(注意:发帖中不要出现私密参数,如密钥,回调链接等)。
    如有疑问也可通过邮箱WePayTS@tencent.com与我们联系,感谢您对微信支付的支持。
    
    Q&A
    请见:XXE修复相关的Q&A
    
    修复方法
    XXE漏洞需要你在代码中进行相应的设置,不同语言设置的内容不同,下面提供了几种主流开发语言的设置指引:
    【PHP】libxml_disable_entity_loader(true);【JAVA】
    import javax.xml.parsers.DocumentBuilderFactory;
    import javax.xml.parsers.ParserConfigurationException; // catching unsupported features
    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    String FEATURE = null;
    try {
        // This is the PRIMARY defense. If DTDs (doctypes) are disallowed, almost all XML entity attacks are prevented
        // Xerces 2 only - http://xerces.apache.or

    2.原因:

       主要是在xml转map的时候处理不得当造成的,所以接下来的修复工作主要在xml解析类中下功夫

    3. NET解决方案

    由于我们用的是.net的开发环境。所以在原有解析xml的代码上添加一句就可以

    XmlDocument xmlDoc = new XmlDocument();
    
    xmlDoc.LoadXml(xml);
    XmlNode xmlNode = xmlDoc.FirstChild;//获取到根节点<xml>
    XmlNodeList nodes = xmlNode.ChildNodes;

    在空格处添加

    XmlDocument xmlDoc = new XmlDocument();
    xmlDoc.XmlResolver = null;
    xmlDoc.LoadXml(xml);
    XmlNode xmlNode = xmlDoc.FirstChild;//获取到根节点<xml>
    XmlNodeList nodes = xmlNode.ChildNodes; 

     总结: 解析xml时候, 没有通过外部实体的加载  ,导致恶意加载文件和代码,造成任意文件攻击

  • 相关阅读:
    LeetCode OJ String to Integer (atoi) 字符串转数字
    HDU 1005 Number Sequence(AC代码)
    HDU 1004 Let the Balloon Rise(AC代码)
    HDU 1003 Max Sum(AC代码)
    012 Integer to Roman 整数转换成罗马数字
    011 Container With Most Water 盛最多水的容器
    010 Regular Expression Matching 正则表达式匹配
    007 Reverse Integer 旋转整数
    006 ZigZag Conversion
    005 Longest Palindromic Substring 最长回文子串
  • 原文地址:https://www.cnblogs.com/xiaohuizhenyoucai/p/10754757.html
Copyright © 2011-2022 走看看