將未經驗證的數據寫入 XML 文檔使攻擊者可趁機更改 XML 的結構和內容。
XML injection 會在以下情況中出現:
1. 數據從一個不可信賴的數據源進入程序。
2. 數據寫入到 XML 文檔中。
應用程序通常使用 XML 來存儲數據或發送消息。當 XML 用于存儲數據時,XML 文檔通常會像數據庫一樣進行處理,而且可能會包含敏感信息。XML 消息通常在 web 服務中使用,也可能用于發送敏感信息。XML 消息甚至還可用于發送 authentication 憑證。
如果攻擊者能夠寫入原始 XML,則可以更改 XML 文檔和消息的語義。危害最輕的情況下,攻擊者可能會插入無關的標簽,導致 XML 解析器拋出異常。XML injection 更為嚴重的情況下,攻擊者可以添加 XML 元素,更改 authentication 憑證或修改 XML 電子商務數據庫中的價格。還有些情況,XML injection 甚至可以導致 Cross-Site Scripting 或 Dynamic Code Evaluation。
例 1:
假設攻擊者能夠控制下列 XML 中的 shoes。
<order>
<price>100.00</price>
<item>shoes</item>
</order>
shoes 替換成 shoes</item><price>1.00</price><item>shoes。新的 XML 如下所示:
<order>
<price>100.00</price>
<item>shoes</item><price>1.00</price><item>shoes</item>
</order>
<price> 標簽中的值將會覆蓋第一個 <price> 標簽中的值。這樣,攻擊者就可以只花 1 美元購買一雙價值 100 美元的鞋。
[1] Standards Mapping - OWASP Top 10 2010 - (OWASP 2010) A1 Injection
[2] Standards Mapping - OWASP Top 10 2007 - (OWASP 2007) A2 Injection Flaws
[3] Standards Mapping - OWASP Top 10 2004 - (OWASP 2004) A6 Injection Flaws
[4] Standards Mapping - Security Technical Implementation Guide Version 3 - (STIG 3) APP3810 CAT I
[5] Standards Mapping - Security Technical Implementation Guide Version 3.4 - (STIG 3.4) APP3810 CAT I
[6] Standards Mapping - Common Weakness Enumeration - (CWE) CWE ID 91
[7] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 - (PCI 1.2) Requirement 6.3.1.1, Requirement 6.5.2
[8] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 - (PCI 2.0) Requirement 6.5.1
[9] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 - (PCI 1.1) Requirement 6.5.6
[10] Standards Mapping - FIPS200 - (FISMA) SI