XML 外部實體的示例

現在您對 XXE 注入有了基本的了解,讓我們來看一個例子。這是一個包含用戶名 XML 元素的示例 XML 文檔: 

<?xml version="1.0" encoding="ISO-8859-1"?>
<username>John</username>
</xml>

非常無害且簡單,對吧?外部實體在哪里? 

首先,可以使用 DOCTYPE 標頭內的系統(tǒng)標識符添加外部 XML 實體。此標頭基本上為 XML 文件結構添加了幾個屬性。  

例如,下面的代碼包含一個外部 XML 實體,它將獲取 /etc/passwrd 的內容并將其顯示給按用戶名呈現的用戶: 

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE foo [
<!ENTITY xxe SYSTEM "file:///etc/passwrd" >]>
<username>&xxe;</username>
</xml>

哎呀! 

這些實體可以訪問您服務器中的本地或遠程內容,如果您在服務器上保存敏感文件,這將非常糟糕,因為它們可能會為攻擊者提供控制您網站的途徑。 

類似地,其他 XML 外部實體攻擊可以訪問本地資源,并且可能不會止步于返回數據。因此,這也是影響應用程序可用性并導致拒絕服務的途徑。 

緩解 XML 外部實體漏洞

幸運的是,緩解 XML 外部實體漏洞相對簡單。只要您不是故意嘗試打開漏洞窗口,并且認為您需要用戶提供的 XML 文件的功能,您就不必太擔心。 

如前所述,如果應用程序具有解析 XML 文件的端點,攻擊者可以向服務器發(fā)送特制的有效負載并獲取敏感文件。攻擊者可以訪問的文件在很大程度上取決于您如何設置系統(tǒng)以及如何實現用戶權限。因此,為了防止這種情況,首先,不要使用支持實體替換的庫,如 LibXML。 

遺憾的是,NodeJS 沒有內置 XML 解析引擎。您可能已經在項目中使用此庫。但不要擔心 – 默認情況下禁用實體替換。盡管如此,我們建議您明確禁用此功能。您可以通過簡單地更改庫的所有初始化來做到這一點,如下所示:

const lib = libxmljs.parseXml(xml, {noent: true});

還需要牢記的是,如果您決定采用這種方式,您仍然可能容易受到 DDoS 攻擊。 

現在,假設您的應用程序實際上利用外部實體來實現某些關鍵功能。在這種情況下,您可以采取一種方法來最大限度地降低漏洞利用的可能性,那就是將已知的外部實體列入安全列表。您只需在使用庫解析 XML 文件文檔之前檢查其中是否有包含不在列表中的任何實體的字符串即可。

app.post('/load_xml', upload.single('xml'), async function (req, res) {
if (!req.file) {
res.sendStatus(500);
return;
}

try {
const xml = req.file.buffer;
const doc = libxmljs.parseXml(xml, {noent: true});

if (doc.text().includes("<!ENTITY")) {
throw new Error("INVALID XML FILE");
}

res.send(doc.text());
} catch (err) {
res.send(err.toString());
res.sendStatus(500);
}
});

最后

最后——我想強調這一點——如果應用程序不需要解析 XML,請不要解析。我知道解析 XML 可能會很方便,并允許平臺為用戶提供便捷的功能。即便如此,仍有許多方法可以在不使用這些庫的情況下提供類似的功能。 

最后,最好的緩解策略是絕不要對漏洞敞開大門。務必記住,為用戶提供強大而安全的平臺正變得越來越復雜。這樣的工作需要投入大量的時間和專業(yè)知識,而您的組織可能無法承擔。  

結論

保護您的平臺免受網絡上最復雜的攻擊需要對技術有廣泛的了解,并牢牢掌握平臺的基礎架構。值得慶幸的是,用于構建基礎架構的大多數工具和庫都非常強大和安全。無論如何,工程師無意中引入漏洞并危及團隊工作的可能性始終存在。 

文章來源:NodeJS XML External Entities Guide: Examples and Prevention

上一篇:

Lua命令注入:示例與預防

下一篇:

Lua XSS:示例及預防
#你可能也喜歡這些API文章!

我們有何不同?

API服務商零注冊

多API并行試用

數據驅動選型,提升決策效率

查看全部API→
??

熱門場景實測,選對API

#AI文本生成大模型API

對比大模型API的內容創(chuàng)意新穎性、情感共鳴力、商業(yè)轉化潛力

25個渠道
一鍵對比試用API 限時免費

#AI深度推理大模型API

對比大模型API的邏輯推理準確性、分析深度、可視化建議合理性

10個渠道
一鍵對比試用API 限時免費