Skip to content

Reclassify the JAXP 1.5 accessExternal properties as modifiable - #65

Merged
garydgregory merged 1 commit into
apache:mainfrom
ppkarwasz:docs/modifiable-access-external-properties
Aug 31, 2026
Merged

Reclassify the JAXP 1.5 accessExternal properties as modifiable#65
garydgregory merged 1 commit into
apache:mainfrom
ppkarwasz:docs/modifiable-access-external-properties

Conversation

@ppkarwasz

Copy link
Copy Markdown
Member

The securing is independent of the JAXP 1.5 external-access properties (accessExternalDTD, accessExternalSchema, accessExternalStylesheet): by specification, a resource supplied by a registered resolver bypasses their checks, and the resolver floor covers every external reference. No value a caller sets loosens the securing, and no value is needed to keep it — the known JDK defects that apply the checks even to resolver-supplied documents all fail closed.

This change therefore:

  • moves the three properties from the reserved list to Settings you may modify in the threat model, including their system-property counterparts;
  • adds a Javadoc overview section explaining why the securing builds on resolver floors rather than on these properties (resolver precedence, the XInclude gap they cannot cover, and the fail-closed JDK defects);
  • adds AccessExternalPropertyTest, which loosens each property to all on a secured factory and asserts the external fetch still does not happen, across DOM, SAX, schema compilation and TrAX;
  • extends AttackTestSupport with caller-configured-factory overloads of the existing no-leak assertions, and fixes a few Thesecuring typos in the threat model.

Tests pass across the full surefire implementation matrix; implementations that reject the properties (no knob to loosen) skip via assumptions.

🤖 Generated with Claude Code

https://claude.ai/code/session_014Hm8EbPnSdQeuQfsoFwQt1

The securing is independent of the JAXP 1.5 external-access
properties: a resource supplied by a resolver bypasses their checks,
and the resolver floor covers every external reference, so no value a
caller sets loosens the securing and no value is needed to keep it.

Move the three properties from the reserved list to "Settings you may
modify" in the threat model, add a Javadoc overview section explaining
why the securing does not build on them, and add
AccessExternalPropertyTest guarding that loosening them to "all" on a
secured factory does not reopen an external fetch.

Assisted-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014Hm8EbPnSdQeuQfsoFwQt1
@garydgregory
garydgregory merged commit 52efaa2 into apache:main Aug 31, 2026
17 checks passed
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.

2 participants