Skip to content

Issue #8163 : Harden XmlInputStream StAX factory against XXE - #8164

Draft
mattcasters wants to merge 1 commit into
apache:mainfrom
mattcasters:issue-8163
Draft

Issue #8163 : Harden XmlInputStream StAX factory against XXE#8164
mattcasters wants to merge 1 commit into
apache:mainfrom
mattcasters:issue-8163

Conversation

@mattcasters

Copy link
Copy Markdown
Contributor

fixes #8163

XmlInputStream created a raw StAX XMLInputFactory and never disabled DTD processing or external entity resolution. Other Hop XML parsers already go through XmlParserFactoryProducer (DOM/SAX/Schema) or set the two StAX flags locally.

This adds XmlParserFactoryProducer.createSecureXmlInputFactory() (SUPPORT_DTD=false, IS_SUPPORTING_EXTERNAL_ENTITIES=false, best-effort ACCESS_EXTERNAL_DTD/SCHEMA) and uses it from:

  • XmlInputStream (the reported sink)
  • WebService (SOAP/HTTP responses)
  • XmlFormatter
  • AdvancedXmlOutput and Excel StaxUtil (already local flags; they now share the helper)

Behavior change: XML documents that contain a DOCTYPE will fail to parse. That is the intended trade-off.

Tests

  • Factory property assertions and a canary-file external-entity test in XmlUtilsTest
  • XmlInputStreamTest regression that the canary is not emitted as row data

Targeted unit tests: ./mvnw -pl core,plugins/transforms/xml,plugins/transforms/excel,plugins/transforms/webservices -am test -Pskip-uitest


Thank you for your contribution! Follow this checklist to help us incorporate your contribution quickly and easily:

  • Run mvn clean install apache-rat:check to make sure basic checks pass. A more thorough check will be performed on your pull request automatically.
  • If you have a group of commits related to the same change, please squash your commits into one and force push your branch using git rebase -i.
  • Mention the appropriate issue in your description (for example: addresses #123), if applicable.

To make clear that you license your contribution under the Apache License Version 2.0, January 2004
you have to acknowledge this by using the following check-box.

Disable DTD processing and external entity resolution on StAX
XMLInputFactory via XmlParserFactoryProducer, and use that factory
from XmlInputStream and the remaining raw/partial StAX call sites.
@hansva
hansva marked this pull request as draft August 29, 2026 09:52
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Task]: Harden XmlInputStream StAX factory against XXE

1 participant