I understand the main exploit here involves parsing untrusted XML files. The recommendation seems to be to disable DDL. The specific example I am following is:
The following example calls parse on a DocumentBuilder that is not safely configured on untrusted data, and is therefore inherently unsafe.
public void parse(Socket sock) throws Exception {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
builder.parse(sock.getInputStream()); //unsafe
}
In this example, the DocumentBuilder is created with DTD disabled, securing it against XXE attack.
public void disableDTDParse(Socket sock) throws Exception {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
DocumentBuilder builder = factory.newDocumentBuilder();
builder.parse(sock.getInputStream()); //safe
}
In my case, the code was slightly different as I am using an event driven parser:
XMLInputFactory factory = XMLInputFactory.newInstance();
XMLStreamReader reader = factory.createXMLStreamReader( fis );
So my fix was as follows:
XMLInputFactory factory = XMLInputFactory.newInstance();
factory.setProperty(XMLInputFactory.SUPPORT_DTD, Boolean.FALSE);
factory.setProperty(XMLConstants.ACCESS_EXTERNAL_DTD, "");
XMLStreamReader reader = factory.createXMLStreamReader( fis );
However CodeQL still complains, so I'm wondering if my remediation is wrong or CodeQL is falsely claiming this is still an issue.
Any help would be appreciated, thanks!