• 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时候, 没有通过外部实体的加载  ,导致恶意加载文件和代码,造成任意文件攻击

  • 相关阅读:
    面向对象课程第三次博客总结
    面向对象课程多线程总结
    23种设计模式整理
    java中synchronized与lock的理解与应用
    关于MySQL查询优化
    mysql操作规范建议
    Linux中实体链接与符号链接详解
    获取本地ipv4地址方法(go语言)
    分库分表与负载均衡的一致性hash算法
    golang闭包的一个经典例子
  • 原文地址:https://www.cnblogs.com/xiaohuizhenyoucai/p/10754757.html
Copyright © 2020-2023  润新知