SWATCH-718: Ensure SnakeYAML does not deserialize arbitrary classes #3859
+56
−0
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Jira issue: SWATCH-718
Description
CVE-2022-1471 describes an issue where versions of SnakeYAML prior to
2.0 would deserialize a YAML document and instantiate a class based on
the document contents. This behavior can lead to issues like
where untrusted code can be loaded over the internet into the
ClassLoader.
This issue is addressed in version 2.0 where SnakeYAML was altered to no
longer allow so-called "global tags" which are the mechanism used for
this arbitrary deserialization. There is also the
SafeConstructor
class which does not do any deserialization beyond primitive Java types
and basic collections.
We, however, need to deserialize to an object of our choice,
SubscriptionRegistry, so this patch explicitly disables global tags
(even though that is the default with SnakeYAML >2.0 anyway) and adds a
test to ensure global tags are disabled.
Testing
Unit test only