-
Notifications
You must be signed in to change notification settings - Fork 25.4k
Introduce hardened XML utilities in core #133644
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Introduce hardened XML utilities in core #133644
Conversation
35c987e
to
a040bf2
Compare
javax.xml.parsers.DocumentBuilderFactory#newDefaultNSInstance() | ||
javax.xml.parsers.DocumentBuilderFactory#newNSInstance() | ||
javax.xml.parsers.DocumentBuilderFactory#newNSInstance(java.lang.String, java.lang.ClassLoader) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'm assuming we want to block all of these as well
* Returns a DocumentBuilderFactory pre-configured to be secure | ||
*/ | ||
@SuppressForbidden(reason = "This is the only allowed way to construct a DocumentBuilder") | ||
public static DocumentBuilderFactory getHardenedBuilderFactory() throws ParserConfigurationException { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We need to provide a DocumentBuilder
that doesn't validate schema as some existing usages of this API don't perform schema validation
tfactory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true); | ||
tfactory.setAttribute(XMLConstants.ACCESS_EXTERNAL_DTD, ""); | ||
tfactory.setAttribute(XMLConstants.ACCESS_EXTERNAL_STYLESHEET, ""); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
As I understand, we don't actually need to configure ACCESS_EXTERNAL_DTD
or ACCESS_EXTERNAL_STYLESHEET
when FEATURE_SECURE_PROCESSING
is true; as per JAXP Properties for External Access Restrictions:
Explicitly turning on Feature for Secure Processing (FSP) through the API, for example, factory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true), disables all external connections.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
You are right. This is probably for historical reasons and old JDKs. If no harm, I think we should keep it.
ParserConfigurationException { | ||
var saxParserFactory = SAXParserFactory.newInstance(); | ||
|
||
saxParserFactory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
As I understand, this is the only security feature we actually need to set
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM 👍
Pinging @elastic/es-security (Team:Security) |
Co-authored-by: elasticsearchmachine <[email protected]>
Create/move a set of utility functions that wrap the various java XML classes, providing secure default settings (e.g. prevent XXE), and enforce that these are used.
Provides secured versions of:
I've tested integrating with #130337 in 665ce15 and the tests pass