Hello,

 

We recently did some testing to verify the proper way of disabling
external entity resolution, as a security recommendation.

 

Through some unit testing, we came up with a couple findings which I
wanted to verify were intended functionality:

 

*             Not validating XML did not stop XXE attacks in the JAXP
and StAX implementation; It expanded external entities.

*             .setExpandEntityReferences(false) also did not stop XXE
attacks in the JAXP implementation;  It also expanded external entity
references.

 

Should this be the case, or should those settings disable the
resolution? I've included some more details of our test results below.

We're willing to contribute the test cases if that's at all useful.

 

Thanks,

Dan

 

Tested Xerces 2.10.0 and 1.4.4

 

DocumentBuilderFactory (JAXP)

Implementation

Stop XXE?

.setValidating(false);

Xerces 1 or Xerces 2

NO

.setExpandEntityReferences(false)

Xerces 1 or Xerces 2

NO

.setFeature("http://apache.org/xml/features/disallow-doctype-decl",true)
;

Xerces 2 Only

YES!

Both
.setFeature("http://xml.org/sax/features/external-general-entities";,
false); and
.setFeature("http://xml.org/sax/features/external-parameter-entities";,
false);

Xerces 1 and Xerces 2

YES!

 

SAXParserFactory (JAXP)

Implementation

Stop XXE?

.setValidating(false);

Xerces 1 or Xerces 2

NO

.setFeature("http://apache.org/xml/features/disallow-doctype-decl",true)
;

Xerces 2 Only

YES!

Both
.setFeature("http://xml.org/sax/features/external-general-entities";,
false); and
.setFeature("http://xml.org/sax/features/external-parameter-entities";,
false);

Xerces 1 and Xerces 2

YES!

 

XMLInputFactory (StAX)

Implementation (Did not test on Xerces 1)

Stop XXE?

.setProperty("javax.xml.stream.isValidating", false);

Xerces 2

NO

.setProperty("javax.xml.stream.isSupportingExternalEntities", false);

Xerces 2

YES!

 

 

Reply via email to