Skip to content

Runtime hardening: input-handling defense in depth - #551

Open
ludoch wants to merge 1 commit into
mainfrom
runtime-input-hardening
Open

ludoch wants to merge 1 commit into
mainfrom
runtime-input-hardening

Conversation

@ludoch

@ludoch ludoch commented Oct 24, 2026 •

Copy link
Copy Markdown
Collaborator

What

Defense-in-depth hardening of input handling in the runtime:

  1. Deferred-task servlet (DeferredTaskServlet, both javax and jakarta
    variants): apply an ObjectInputFilter when reading the task payload, with a
    default blocklist overridable via the appengine.deferredtask.serialFilter
    system property and merged with any JVM-wide jdk.serialFilter. Legitimate
    DeferredTask payloads are unaffected.

  2. XML config parsing (XmlUtils and AppEngineWebXmlInitialParse): disable
    DTDs / external entities / external DTD and schema access when parsing
    appengine-web.xml, queue.xml, cron.xml, dos.xml, etc.

Testing

New unit tests for both changes; existing DeferredTaskServletTest (11) and
AppEngineWebXmlInitialParseTest (37) pass. Verified end-to-end on App Engine
that deferred tasks and push task-queue delivery continue to work with the
change in place.

Rationale and detailed verification shared separately.

Apply an ObjectInputFilter when the deferred-task servlet reads its payload
(a default blocklist, overridable via the appengine.deferredtask.serialFilter
system property and merged with any JVM-wide jdk.serialFilter); legitimate
DeferredTask payloads are unaffected. Also disable DTDs and external entities in
the XML config parsers (XmlUtils and AppEngineWebXmlInitialParse), which read
appengine-web.xml, queue.xml, cron.xml, dos.xml, etc.

Adds unit tests for both changes; existing DeferredTaskServletTest (11) and
AppEngineWebXmlInitialParseTest (37) pass, and deferred tasks and push task-queue
delivery were verified working end to end.
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