禁用XXE处理漫谈
前言
近期准备面试题时,XXE漏洞防范措施(或者说修复方式)在一些文章中比较简略,故本文根据研究进行总结,作为技术漫谈罢了。 简述XXE漏洞
XXE(XML外部实体注入),程序解析XML数据时候,同时解析了攻击者伪造的外部实体。XML用途是为了跨平台语言传输数据,常常用于WEB开发等。 XXE漏洞攻防情况
通常来说,XML文档生成时会常用到XXE和内部实体。因此开发团队根据项目需求去进行防范XXE漏洞。
然而实际情况是,即使采取了防范措施(错误的方法),XXE漏洞仍然可以大行其道。
有一个案例,某开发团队针对CVE-2018-20318漏洞进行了及时的修复,依照的是官方的修复方案:
禁止实体扩展引用,dbFactory.setExpandEntityReferences(false)
然而后续XXE漏洞仍然可以奏效,有师傅又提交了CVE漏洞。
最后有师傅总结正确的修复方法,如下:
禁用XXE处理分析
根据上述所说,XXE漏洞的正确处理是尤为重要的。我们这里以Java为例,并且应用偏向于JAXP API进行分析如何禁用XXE处理。 禁用文档类型
首先可以禁用文档类型。实体通过XML 文档的 DOCTYPE 进行声明。
我们在进行安全开发规划时,如确定不需要 DOCTYPE 声明时,可以完全禁用禁用文档类型。
factory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
当我们设置为true时,disallow-doctype-decl 使XML处理器发现DOCTYPE 声明时抛出异常。 禁用外部实体声明
其次是可以允许声明DOCTYPE,但禁用外部实体声明。
【----帮助网安学习,需要网安学习资料关注我,私信回复"资料"免费获取----】
① 网安学习成长路径思维导图
② 60+网安经典常用工具包
③ 100+SRC漏洞分析报告
④ 150+网安攻防实战技术电子书
⑤ 最权威CISSP 认证考试指南+题库
⑥ 超1800页CTF实战技巧手册
⑦ 最新网安大厂面试题合集(含答案)
⑧ APP客户端安全检测指南(安卓+IOS)
故若想要正常处理其他DTD声明,只针对外部实体进行抛出异常。可以用下面两种方法设置为flase来处理:
factory.setFeature("http://xml.org/sax/features/external-general-entities", false);factory.setFeature("http://xml.org/sax/features/external-parameter-entities", false);
补充说明:在PHP中,libxml库默认下是安全的,总是禁用外部实体。除非通过设置LIBXML_NOENT参数进行允许。如下:
$doc = simplexml_load_string($xml, "SimpleXMLElement", LIBXML_NOENT); // !XXE enabled!$doc = simplexml_load_string($xml, "SimpleXMLElement"); // XXE disabled 启用安全处理
在Java中可以使用Feature for Secure Processing (FSP)进行安全处理。如下:
factory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);
FSP属于一种核心Java机制,用于以应用限制去配置XML处理器,从而可以防范XML拒绝服务攻击和XXE漏洞。
默认设置下,FSP处于部分启用的状态,XML拒绝服务攻击可以防范。而XXE漏洞我们需要通过调用setFeature方法,将FSP由部分启用转为完全启用。
不过也有特例,例如Apache Xerces中FSP不限制外部连接,无法防范XXE漏洞。
总之,开发人员应当测试涉及XXE漏洞的FSP配置,并结合其他方式来禁用或者限制XXE。 禁用实体引用扩展
XML文档中寻找实体引用主要有两种方式:
(1)DOM XML解析器作值替换引用
(2)DOM树创建空实体进行引用
将实体作值替换的机制在解析恶意XML文件时,可能会泄露敏感信息。
在Java中,对象DocumentBuilder中的etExpandEntityReferences方法用于配置实体引用:
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();factory.setExpandEntityReferences(false);
当配置为false时,不会进行实体引用。因而可以防范XXE漏洞。
扩展外部实体引用是发生在已提取外部内容之后。
因此禁用后且攻击者无法造成泄露敏感数据,仍然执行请求外部资源。
不过经过禁用实体引用扩展,攻击者仅能进行blind SSRF攻击,难以实际造成威胁。
所以禁用实体引用扩展也是我们防范XXE漏洞的可选方案。 结束语
本文为XXE漏洞相关的防范措施漫谈,主要针对禁用XXE处理。
可以采取禁用文档类型、禁用外部实体声明、启用安全处理、禁用实体引用扩展这四种方式去进行防范。
红米K40s和红米Note11TPro该如何选?对比一下区别就懂了红米K40s和红米Note11TPro该如何选?我们来看看两者的一些区别。首先肯定要看处理器了,红米Note11TPro采用的是天玑8100处理器,这颗处理器表现不错,属于一代神u
新品红蜂打响新年第一炮并购小蚁声学打造小蚁耳机hello兄弟们好,我是耳机玩家!老朋友都知道了,我们的红蜂恒玄三代跟四代由于各种问题导致无限期断货,我们没有坐以待毙,而是加大投入引入红蜂新团队小蚁声学(活跃于音界的朋友可能会认
小米平板6曝光,搭载骁龙8和144Hz高刷屏2月1日消息,随着农历新年过去,各大厂商2023年新品也逐渐提上日程。去年小米平板5系列发布以来,颇受消费者喜爱,也让更多网友开始期待小米平板6的到来。今日,数码博主数码闲聊站透露
英伟达Ada架构的TITAN显卡信息流出,拥有48GB的GDDR6显存传目前英伟达正在向世界各地的开发中心运送PG137工程板,现在貌似一家监控处理印度货运清单的公司发现其中的显卡工程版信息,信息显示某家显卡制造商在向当地的开发中心运送了至少两块显卡
(多图)日俄战争一场打在中国土地上的战争及其惨痛教训头条创作挑战赛日俄战争其实既不是在俄罗斯也不是在日本打的,而是在中国打的。20世纪初,随着中华衰弱,列强之间的利益冲突愈演愈烈,其中以日本和俄罗斯的较量最大。日本赢得甲午战争(18
林徽因婚后也有烦恼,和大姑姐多次争吵,曾羡慕嫁给独生子的女人在众人看来,林徽因嫁给梁思成,可谓是珠联璧合,令人艳羡,但是都说家家有本难念的经,女神林徽因也不例外,在婆家,林徽因的经也不是好念的。梁家兄弟姐妹众多,梁思成还有四个兄弟和四个姐姐
细说赵构选择太子的不寻常思路太子在古代来说就意味着是下一任的储君,皇位的第一顺位接班人,因此在封建王朝,太子的选择是一个非常慎重的问题,而且围绕太子位置选择的各种制度规矩更是古代帝王研究的核心问题,当然最为著
清代海阳县有个于山社,于山指的是现在的南榆山本文的话题与胶东历史区划有关,这次要介绍的区划是清代海阳县的于山社。当时,海阳县实行乡社制度,县下设乡,乡下有社,以社辖村。于山社具体属于行村乡管辖。就历史渊源而言,于山社在莱阳和
朱元璋假扮乞丐在路边要饭!回朝后直接怒斩5位一品大臣元朝末年,国家动荡无比,各级官员贪污腐败现象极为严重,受到官员的压迫,朱元璋自幼便过着十分艰苦的生活。基于这一原因,起义成功建立大明王朝后,朱元璋自然对朝中对贪腐之人予以严苛打击。
浙南的解放为配合解放大军挺进浙南,1949年3月9日至4月13日,中共浙南地委在瑞安县桂峰乡坳后村召开第十次扩大会议。会议总结了过去一年的工作,制定了先解放温州后解放浙南全境的计划。4月中旬
陈启智同志逝世陈启智同志遗像新华社发新华社长沙2月1日电正兵团职退休干部原国防科学技术大学校长陈启智同志,因病医治无效,于1月15日在长沙逝世,享年98岁。陈启智是四川成都人,1950年参军入伍