Hi Paul,

Thank you for replying so quick to my email.

I want to point out that I agree 100% with you on everything you said about the 
tool, it is not a critical aspect and as you describe it, is is not part of a 
remotely accessible service that could be misused.

However, my guess is that it could be used in a social engineering attack. For 
example ask someone to perform that operation and send the output to the 
requester (without looking at the output, highly unlikely but still possible). 
This could trick people that would not expect this to lead to file exfiltration 
and hence the risk.

Regardless, I am happy to see you consider patching it.

Thank you again and wish you all the best.

Alexandru

On Wednesday, August 28, 2019, 10:04:28 AM GMT+1, Paul King 
<pa...@asert.com.au> wrote:


Hi Alexandru,

[And other developers -- please check my logic and assumptions]

While Groovy is widely used, I suspect the DomToGroovy tool is not frequently 
used. It's typically not used in the context of running arbitrary scripts.
It is typically used by a developer to manually generate some builder-like 
Groovy code which they then edit by hand to correctly generate XML
similar to the original XML file. The tool will typically be executed with the 
permissions of that developer and if they already have access to /etc/passwd 
then I don't find it unexpected for the content to appear.

Now the real question is whether it can be subverted. If someone had access to 
the file system and could write an input file and read an output file and could 
run an arbitrary script where they could invoke the DomToGroovy tool, then it 
would be possible to exploit the current behavior. But if they can run an 
arbitrary script, they could just read the contents of the /etc/passwd file in 
this example. I am not sure I see too much of an issue here but perhaps someone 
else will chime in if I am missing something obvious.

I have a vague recollection when we fixed up other tools, we didn't see this 
one as being of the same nature as other cases.
But having said that, I don't see any use case where reading external entities 
is going to be beneficial for this tool and we could do a similar thing as we 
do for other tools, e.g.:

https://github.com/apache/groovy/blob/master/subprojects/groovy-xml/src/main/java/groovy/xml/DOMBuilder.java#L115-L116

I would see this as not being critical but could easily be added for an 
upcoming release.

Let me know if this sounds reasonable or if you see any flaws in my 
understanding.

Cheers, Paul.


[https://ipmcdn.avast.com/images/icons/icon-envelope-tick-round-orange-animated-no-repeat-v1.gif]<https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail>
  Virus-free. 
www.avast.com<https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail>

On Wed, Aug 28, 2019 at 7:30 AM Alexandru Gabriel Blanaru 
<a.g....@outlook.com<mailto:a.g....@outlook.com>> wrote:
Hello,

I hope you are well.

My name is Alexandru and I am currently doing an independent security research 
as part of a University project.

I came across a tool from the Groovy library called DomToGroovy which appears 
to have an XXE vulnerability. According to the documentation, it is supposed to 
be turning XML content into Groovy scripts but I am not sure whether it is a 
feature or an actual vulnerability. The bug is present in the most recent 
version of the library according to my findings.

As proof of concept, a simple payload which makes use of external entities in 
order to load and show the contents of "/etc/passwd" was saved in "xxe.xml" and 
loaded into the program:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE foo [
<!ENTITY file SYSTEM "file:///etc/passwd" >
]>
<foo>
&file;
</foo>

I am attaching a screenshot with the output of running DomToGroovy with the 
"xxe.xml" file as input.

The following article does provide information on how to mitigate the problem. 
As far as I understand the issue is in one of the overloaded "parse" functions 
and the fix should consist of adding some configuration attributes to the 
DocumentBuilderFactory instances.
XML External Entity Prevention · OWASP Cheat Sheet 
Series<https://cheatsheetseries.owasp.org/cheatsheets/XML_External_Entity_Prevention_Cheat_Sheet.html>

<https://cheatsheetseries.owasp.org/cheatsheets/XML_External_Entity_Prevention_Cheat_Sheet.html>
XML External Entity Prevention · OWASP Cheat Sheet Series

The vulnerable code:

public static Document parse(final Reader input) throws Exception {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(true);
DocumentBuilder builder = factory.newDocumentBuilder();
return builder.parse(new InputSource(input));
}


Given the fact that this library is widely used I decided to contact you and 
not disclose the vulnerability directly (or raise a public ticket on the Jira 
Bug tracker). I am willing to provide 3 to 6 months time before full 
disclosure, so enough in order to fix, apply patches and inform the user base 
to update to the latest version.

Let me know what you think about this and if you believe the time period 
provided is not reasonable.

Kind regards,
Alexandru

[https://ipmcdn.avast.com/images/icons/icon-envelope-tick-round-orange-animated-no-repeat-v1.gif]<https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail>
  Virus-free. 
www.avast.com<https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail>

Reply via email to