在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
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】(注意:发帖中不要出现私密参数,如密钥,回调链接等)。 如有疑问也可通过邮箱[email protected]与我们联系,感谢您对微信支付的支持。 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时候, 没有通过外部实体的加载 ,导致恶意加载文件和代码,造成任意文件攻击 |
请发表评论