|
Subject: Re: [xsl] Saxon vulnerability From: "Roger L Costello costello@xxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> Date: Sat, 8 Mar 2025 12:55:28 -0000 |
Hi Folks,
Below is my writeup of the vulnerability. Please let me know of any
inaccuracies. /Roger
Below is an XSLT program that reads the Windows/win.ini file. A bad actor
could use the program to read and display the contents of any file on your
machine. This is a vulnerability. The SAXON team is working to fix this
vulnerability.
Explanation of how the vulnerability works
Sometimes you write an XSLT program that dynamically builds XML. The
XML--which is a string--may then be dynamically processed using the XPath
parse-xml(string) function. Let's dig into dynamically generated XML that can
read arbitrary files on your machine.
Recall that XML has five built-in entities: lt for the < symbol, gt for the >
symbol, amp for the ampersand symbol, quote for the " symbol, and apos for the
' symbol. You can create your own user-defined entities using <!ENTITY args>,
where args is the name of the new entity--e.g., xxe (not a very readable
entity name, that's okay)--followed by the value for the entity. The value may
be given in-line as a string, or a file may be referenced to provide the
value. Let's assign xxe the value of the Windows/win.ini file. Follow xxe with
the keyword SYSTEM and then the location to the file. Here's how to create a
user-defined xxe entity whose value is the content of the Windows/win.ini
file:
<!ENTITY xxe SYSTEM "file:///Windows/win.ini">
Place that entity declaration inside a DOCTYPE declaration:
<!DOCTYPE root [
<!ENTITY xxe SYSTEM "file:///Windows/win.ini">
]>
The DOCTYPE comes before the XML document's root element. Here is XML which
uses--displays--the value of the xxe entity:
<root>&xxe;</root>
With that technical background, the following XSLT program should be
understandable.
----------------------------------------------------------------------
XSLT program that could be exploited
to read--and output--any file on
your machine.
----------------------------------------------------------------------
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="#all"
version="3.0">
<xsl:template match="/">
<Results>
<xsl:sequence select="
parse-xml(
'
<!DOCTYPE root [
<!ENTITY xxe SYSTEM
"file:///Windows/win.ini">
]>
<root>&xxe;</root>
'
)
"/>
</Results>
</xsl:template>
</xsl:stylesheet>
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| Re: [xsl] Saxon vulnerability, Michael Kay michaelk | Thread | Re: [xsl] Saxon vulnerability, Martin Honnen martin |
| Re: [xsl] Saxon vulnerability, Michael Kay michaelk | Date | Re: [xsl] Saxon vulnerability, Martin Honnen martin |
| Month |