<menu id="guoca"></menu>
<nav id="guoca"></nav><xmp id="guoca">
  • <xmp id="guoca">
  • <nav id="guoca"><code id="guoca"></code></nav>
  • <nav id="guoca"><code id="guoca"></code></nav>

    禁用XXE處理漫談

    VSole2023-03-13 10:52:32

    前言

    近期準備面試題時,XXE漏洞防范措施(或者說修復方式)在一些文章中比較簡略,

    故本文根據研究進行總結,作為技術漫談罷了。

    簡述

    XXE漏洞

    XXE(XML外部實體注入),程序解析XML數據時候,同時解析了攻擊者偽造的外部實體。XML用途是為了跨平臺語言傳輸數據。常常用于WEB開發等

    XXE漏洞攻防情況

    通常來說,XML文檔生成時會常用到XXE和內部實體。因此開發團隊根據項目需求去進行防范XXE漏洞。

    然而實際情況是,即使采取了防范措施(錯誤的方法),XXE漏洞仍然可以大行其道。

    有一個案例,某開發團隊針對CVE-2018-20318漏洞進行了及時的修復,依照的是官方的修復方案:

    禁止實體擴展引用,dbFactory.setExpandEntityReferences(false)

    然而后續XXE漏洞仍然可以奏效,有師傅又提交了CVE漏洞。

    最后有師傅總結正確的修復方法,如下

    CVE-2018-20318修復

    禁用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,但禁用外部實體聲明。

    故若想要正常處理其他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處理。

    可以采取禁用文檔類型、禁用外部實體聲明、啟用安全處理、

    禁用實體引用擴展這四種方式去進行防范。

    xml語言xml解析
    本作品采用《CC 協議》,轉載必須注明作者和本文鏈接
    XXE如何理解? 它是可擴展標記語言 ( XML) 用于存儲和傳輸數據。 通常始于異步JavaScript和XML技術(ajax技術):網頁應用能夠快速地將增量更新呈現在用戶界面上,而不需要重載(刷新)整個頁面。 目前JSON的使用比XML更加普遍JSON和XML都被用于在Ajax模型中的XML技術
    Web Service滲透測試總結
    2017 OWASP十大關鍵Web應用安全風險簡析 受越來越短的軟件項目生命周期影響,有些應用面臨損及金融、醫療、零售業和其他行業數字安全的風險。開發人員和經理必須了解這些最常見的風險,才能保護自己的應用。為此,開放網頁應用安全計劃(OWASP)定期發布十大最關鍵Web應用安全風險。 該計劃從專精應用安全的公司企業收集40多份數據,數據涵蓋數百家公司處收集的漏洞信息,涉及10萬個應用和API。 O
    淺析xml之xinclude & xslt
    2022-05-19 08:17:00
    最近依舊在研究xml及其相關安全問題,前一篇文章已經提及了較為大眾且CTF中常見的xml攻擊方式。
    近日,國家信息安全漏洞庫(CNNVD)收到關于微信支付SDK XXE(XML External Entity)漏洞(CNNVD-201807-083)情況的報送。成功利用該漏洞的攻擊者可以遠程讀取服務器文件,獲取商戶服務器上的隱私數據,甚至可以支付任意金額購買商品。
    XML外部實體注入
    2022-07-28 22:32:56
    0x01:簡單了解XMLXML 指可擴展標記語言XML的特點及作用:特點:1. xml與操作系統、編程語言的開發平臺都無關
    但是,在處理外部實體時,可以針對應用程序啟動許多攻擊。這些攻擊包括泄露本地系統文件,這些文件可能包含密碼和私人用戶數據等敏感數據,或利用各種方案的網絡訪問功能來操縱內部應用程序。通過將這些攻擊與其他實現缺陷相結合,這些攻擊的范圍可以擴展到客戶端內存損壞,任意代碼執行,甚至服務中斷,具體取決于這些攻擊的上下文。//這一行是 XML 文檔定義
    --第一行是XML聲明-->. --這是XML處理指令的例子。后的第一個單詞是處理指令名,在本例中是xml-->. --處理指令一定要頂格寫,前面不能有任何空白-->. XML文檔必須有且只有一個根元素。version特性表明這個文檔符合XML 1.0規范。0x02:實體實體叫ENTITY,實體的作用是避免重復輸入。0x03:處理指令PI處理指令用于XML解析器傳遞信息到應用程序。這些文本將被解析器檢查實體以及標記。
    禁用XXE處理漫談
    2023-03-13 10:52:32
    近期準備面試題時,XXE漏洞防范措施(或者說修復方式)在一些文章中比較簡略
    VSole
    網絡安全專家
      亚洲 欧美 自拍 唯美 另类