L’XPath injection è un attacco informatico in grado di violare siti ed applicazioni web che utilizzano i file XML.
In questo modo, è possibile eludere i sistemi di autenticazione basati sulle credenziali di accesso e accedere così alle informazioni presenti all’interno del sito.
In questo articolo vogliamo illustrarvi come funziona l’XPath injection, e cosa bisogna fare per ridurre il rischio di subire questo tipo di attacco.

Il linguaggio XML e i file XML
L’ XML (Extensible Markup Language) è un linguaggio di markup sviluppato nel 1998 dal World Wide Web Consortium come alternativa al già esistente HTML. L’XML è in grado di archiviare dati in maniera condivisibile e supporta lo scambio di informazioni tra diversi sistemi informatici, come:
- Siti web;
- Database;
- Software e applicazioni di terze parti.
Nei file XML, i dati salvati sono contrassegnati da tag che ne specificano il tipo. Generalmente, questi tag sono visibili soltanto ai software e non agli utenti.
Le istanze dei tag XML vengono definite come elementi e sono disposti in una struttura gerarchica: ciò significa che un elemento ne può contenere altri. In questo caso, l’elemento in cima viene chiamato “radice” e tutti gli altri elementi contenuti al suo interno vengono chiamati “figli”.
Il linguaggio XPath
L’XPath, o XML Path Language, è un linguaggio di interrogazione realizzato appositamente per navigare attraverso gli elementi e gli attributi presenti all’interno di un documento XML. Le espressioni XPath consentono di effettuare una precisa selezione dei dati da qualsiasi parte del documento, partendo da un elemento o da un suo attributo (detto anche nodo).
Ad esempio, un’espressione XPath può essere utilizzata per selezionare uno o più elementi con uno specifico attributo di valore, oppure per trovare dei dati che si trovano all’interno di elementi annidati.
L’attacco XPath injection
Come è stato già detto in precedenza, l’XPath injection è in grado di compromettere siti ed applicazioni web che utilizzano i file XLM.
In particolare, viene sfruttato il modo in cui vengono gestiti gli input inseriti da un utente per le interrogazioni XPath, che vengono manipolate attraverso l’iniezione di codice malevolo. In questo modo, i cybercriminali possono provocare danni significativi, più nello specifico:
- Data breach. Un XPath injection eseguito con successo permette di ottenere le informazioni sensibili salvate all’interno dei file XML, tra cui le credenziali di accesso degli utenti.
- Violazione dell’integrità dei dati. In questo caso, l’XPath Injection viene utilizzato per modificare le informazioni contenute nei file XML. Questo tipo di manipolazione permette di alterare gli output del sistema, corrompere i dati o cambiare il funzionamento di siti e applicazioni web.
- Attacchi Denial of Service (DoS). È anche possibile realizzare un’interrogazione XPath per rallentare un web server, provocando un attacco DoS. Di conseguenza, il sito web attaccato va in crash e non è più in grado di rispondere alle azioni degli utenti.
Come l’XPath injection è in grado di bypassare i sistemi di autenticazione
In uno scenario in cui i file XML vengono utilizzati da un sito per il login di un utente, la verifica delle sue credenziali utilizza una query XPath come questa:
- “//User[UserName/text()= ‘ ” + Request(“Username”) + “ ‘ And Password/text()= ‘” + Request(“Password”) + “ ‘]”
Normalmente, la query funziona senza problemi; tuttavia, esistono combinazioni di username e password in grado di bypassare i controlli di autenticazione, come ad esempio:
- Username: blah’ or 1=1 or ‘a’=’a
- Password: blah
La query XPath, quindi, diventa:
- //User[UserName/text()=’blah’ or 1=1 or ‘a’=’a’ And Password/text()=’blah’]
In questo modo, il controllo delle credenziali viene aggirato. La porzione che include “1=1”, infatti, è sempre vera, il che rende l’intera query valida per qualsiasi utente presente nel documento XML. Pertanto, è possibile accedere ad un sito web senza che le credenziali siano effettivamente verificate.
Come proteggersi dall’XPath injection
Abbiamo dunque visto cos’è l’XPath injection e i diversi modi in cui può essere utilizzato. Vediamo ora quali sono le best practice per prevenire il rischio di attacchi XPath injection:
- Utilizzare le whitelist
Attraverso le whitelist è possibile stabilire a priori gli input validi per le interrogazioni XPath, escludendo così quelli dannosi che si possono utilizzare per l’XPath injection. Le whitelist, quindi, fanno in modo che solo le stringhe approvate vengano elaborate, riducendo significativamente il rischio di attacco.
- Evitare di collegare direttamente gli input degli utenti alle interrogazioni XPath
Infatti, gli attaccanti possono sfruttare input malevoli per manipolare i risultati delle interrogazioni XPath, oppure ottenere un accesso non autorizzato a dati sensibili.
Per mitigare questo problema, è necessario separare gli input degli utenti dal processo di esecuzione delle interrogazioni.
Ciò implica eseguire una sanificazione e validazione degli input prima che vengano elaborati dalle espressioni XPath. Così, si impedisce ad eventuali dati malevoli di compromettere la logica delle interrogazioni.
- Utilizzare interrogazioni XPath parametrizzate
Si tratta di implementare modelli predefiniti con placeholder per gli input degli utenti, piuttosto che concatenare le stringhe per eseguire le interrogazioni. Utilizzare modelli predefiniti rende difficile iniettare input malevoli, dato che vengono trattati come dati e non come codice da eseguire.
Per utilizzare le query parametrizzate è necessario individuare il punto in cui dove gli input degli utenti si intersecano con le interrogazioni e riposizionare l’inserimento diretto con i placeholder. Questo rende anche il mantenimento del codice più facile grazie ad una gestione centralizzata degli input.
- Implementare una corretta gestione degli errori
Una gestione non adeguata degli errori può rivelare informazioni sulla struttura back-end o sullo schema del database utilizzato, entrambe informazioni inestimabili per i cybercriminali. Utilizzare generici messaggi di errore che non rilevano informazioni sensibili aiuta a mitigare il rischio di attacchi XPath Injection.
Oltre ad oscurare potenziali punti di accesso per gli attaccanti, una gestione corretta degli errori aiuta anche ad individuare tentativi di attacco o vulnerabilità presenti in siti o applicazioni web.



