The XML Path Language (XPath) is an interpreted language used to navigate around XML documents and to retrieve data from within them. In most cases, an XPath expression represents a sequence of steps that is required to navigate from one node of a document to another.
Where web applications store data within XML documents, they may use XPath to access the data in response to user-supplied input. If this input is inserted into the XPath query without any filtering or sanitization, an attacker may be able to manipulate the query to interfere with the application's logic or retrieve data for which she is not authorized.
XML documents generally are not a preferred vehicle for storing enterprise data. However, they are frequently used to store application configuration data that may be retrieved on the basis of user input. They may also be used by smaller applications to persist simple information such as user credentials, roles, and privileges.
Consider the following XML data store:
<addressBook> <address> <firstName>William</firstName> <surname>Gates</surname> <password>MSRocks!</password> <email>email@example.com</email> <ccard>5130 8190 3282 3515</ccard> </address> <address> <firstName>Chris</firstName> <surname>Dawes</surname> <password>secret</password> <email>firstname.lastname@example.org</email> <ccard>3981 2491 3242 3121</ccard> </address> <address> <firstName>James</firstName> <surname>Hunter</surname> <password>letmein</password> <email>email@example.com ...