Skip to content

State the threat-model scope by property contract and exclude transform outputs - #43

Merged
garydgregory merged 6 commits into
apache:mainfrom
ppkarwasz:docs/contract-scope-and-transform-output
Aug 25, 2026
Merged

State the threat-model scope by property contract and exclude transform outputs#43
garydgregory merged 6 commits into
apache:mainfrom
ppkarwasz:docs/contract-scope-and-transform-output

Conversation

@ppkarwasz

Copy link
Copy Markdown
Member

Two threat-model clarifications; documentation only, no code change.

Scope stated by property contract (f009)

What is in scope no longer enumerates "JAXP implementations it recognizes". XmlFactories recognizes properties, not implementations: every JAXP implementation is in scope as long as it respects the contract of the features, attributes, and properties the hardening recipes use, and an implementation that cannot accept a required setting makes the factory method throw instead of returning an unhardened factory.

The out-of-scope bullet, the known-non-findings bullet, and the OUT-OF-SCOPE: foreign implementation triage row are reworded to the same criterion. This also settles the remark about the StAX path: the StAX floor is installed through the standard javax.xml.stream.resolver hook, which the StAX specification requires every implementation to support, so it falls under the same contract with no per-API exception.

Transform output destinations are out of scope (f010)

New out-of-scope bullet plus a matching known-non-findings bullet: the hardening governs what a parse or transform reads, not where a transform writes. A stylesheet's output-producing instructions (xsl:result-document in particular) write wherever the stylesheet directs, within the runtime's permissions; running a stylesheet grants its author that capability, so restricting destinations when the stylesheet is untrusted is the operator's responsibility (an output resolver of the implementation, filesystem permissions, or process sandboxing). Path-traversal or file-write reports through stylesheet output instructions now have an explicit disposition.

Note

The in-scope bullet is also touched by #38 (Android best-effort wording) and the out-of-scope area by #41 (SAXTransformerFactory surface); whichever lands later reconciles small conflicts, keeping the contract framing together with those changes.

🤖 Generated with Claude Code

Two threat-model clarifications from triaging the 2026-08-15 scan findings:

- What is in scope no longer enumerates recognized JAXP implementations:
  every implementation is in scope as long as it respects the contract of the
  features, attributes, and properties the hardening recipes use, and one that
  cannot accept a required setting makes the factory method throw instead of
  returning an unhardened factory. The out-of-scope bullet, the known
  non-findings bullet, and the foreign-implementation triage row are reworded
  to the same criterion; the previous implementation list survives as the set
  the recipes are exercised against.
- A new out-of-scope bullet covers transform output destinations: the
  hardening governs what a parse or transform reads, not where a transform
  writes, so restricting the destinations of a stylesheet's output-producing
  instructions (xsl:result-document in particular) is the operator's
  responsibility when the stylesheet is untrusted. A matching known
  non-findings bullet gives such reports a landing place.

Assisted-By: Claude Fable 5 <noreply@anthropic.com>
…ullet

The property-contract criterion stands on its own; the surefire matrix
already documents which implementations the recipes are exercised against.

Assisted-By: Claude Fable 5 <noreply@anthropic.com>

@garydgregory garydgregory left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hi @ppkarwasz
I added 2 comments.
Thank you!

Comment thread src/site/markdown/threat_model.md Outdated
Comment thread src/site/markdown/threat_model.md
The newest platform API the recipes require is StAX, which entered
JAXP at 1.4; the JAXP 1.5 ACCESS_EXTERNAL_* properties are
deliberately unused, replaced by the resolver floors, so 1.5 is not
the entry bar. The following sentence keeps conformance scoped to
the specific settings each recipe uses.

Assisted-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Gm5jgtPUhD5YmvCDQaouh8
One sentence each in the threat model's scope section, the site index
page, and the newTransformerFactory Javadoc, pointing at the Transform
output destinations bullet for the full statement.

Assisted-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Gm5jgtPUhD5YmvCDQaouh8
@ppkarwasz
ppkarwasz requested a review from garydgregory August 25, 2026 20:36
@garydgregory
garydgregory merged commit 41ba016 into apache:main Aug 25, 2026
18 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