Skip to content

docs: document the supported-runtime floor (OpenJDK 8+, Android 33+) - #38

Open
ppkarwasz wants to merge 1 commit into
apache:mainfrom
ppkarwasz:docs/supported-runtime-floor
Open

docs: document the supported-runtime floor (OpenJDK 8+, Android 33+)#38
ppkarwasz wants to merge 1 commit into
apache:mainfrom
ppkarwasz:docs/supported-runtime-floor

Conversation

@ppkarwasz

Copy link
Copy Markdown
Member

Summary

Documents the supported-runtime floor so the hardening guarantees match what the platform can actually enforce, addressing the Android-below-33 gap where the bounded entity-expansion (Billion Laughs) guarantee does not hold.

The guarantee relies on the platform's secure-processing limit. On Android that limit is libexpat's built-in billion-laughs check, which first ships in API level 33 (AOSP libexpat >= 2.4). On Android below 33 there is no such check, so the previously unconditional bounded-expansion guarantee cannot hold. A JDK older than 8 needs no such caveat: the classes are compiled for Java 8 and cannot be loaded on an earlier one.

Changes

  • XmlFactories class Javadoc: the bounded-expansion guarantee is now "bounded by the platform's secure-processing limit", with a note that the guarantees are defined on OpenJDK 8+ / Android API 33+ and do not hold on Android below 33.
  • threat_model.md: new Supported runtimes paragraph under Assumptions about the environment; the existing Billion Laughs claim is scoped to the supported runtimes; new What is out of scope and Known non-findings bullets for an unsupported Android release; Conditions that would change this model now lists a change to the supported runtimes.
  • index.md: new Supported runtimes subsection under Usage.

Notes

  • Documentation only. No behavior change; android-tests minSdk stays 19 (the library still runs below 33, it is just not security-supported there).
  • Prose under src/site/markdown uses semantic line breaks per project convention.

🤖 Generated with Claude Code

State that the hardening guarantees are defined on OpenJDK 8 or later, or
Android API level 33 or later. The bounded entity-expansion guarantee
(Billion Laughs) relies on the platform's secure-processing limit, which on
Android is libexpat's built-in check; that check first ships in API 33, so on
Android below 33 the guarantee does not hold. Reports demonstrated only on an
unsupported Android release are out of scope.

Qualifies the previously unconditional guarantee in the XmlFactories class
Javadoc, the threat model (Assumptions about the environment, What is out of
scope, Known non-findings, Conditions that would change this model), and the
index page. No behavior change.

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.

@ppkarwasz
I don't think we should guarantee anything on Android. We can document the behavior, but certainly not guarantee it. I see Android as "nice to have" only.

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