[
https://issues.apache.org/jira/browse/KAFKA-20822?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18101098#comment-18101098
]
Yunseop Eom commented on KAFKA-20822:
-------------------------------------
Follow-up on PR #22936: https://github.com/apache/kafka/pull/22936
The PR hardens Trogdor TaskSpec deserialization with a
BasicPolymorphicTypeValidator allowlist for the built-in task, fault, and
workload packages while preserving the existing JSON shape. Regression coverage
rejects unsupported subtypes and accepts built-in types.
The TDD regression, full trogdor tests, static checks, and git diff --check
pass locally. The PR is open and awaiting review.
> Trogdor uses insecure Jackson Polymorphic Id.CLASS setting
> ----------------------------------------------------------
>
> Key: KAFKA-20822
> URL: https://issues.apache.org/jira/browse/KAFKA-20822
> Project: Kafka
> Issue Type: Task
> Reporter: PJ Fanning
> Priority: Major
>
> Kafka team have previously rejected security reports about this with the
> reasoning that Trogdor is a testing feature and that you do not recommend to
> users to use it in production environments.
> It would still be useful for security hardening to update the Jackson related
> code in Trogdor to add a PolymorphicTypeValidator that polices that you only
> databind to known classes when deserializing. A couple of lines of code maybe
> 1 or 2 tests on top.
> *
> [https://github.com/FasterXML/jackson-databind/blob/9b2adbf5db974947220b8c208735f51b9fdec831/src/main/java/tools/jackson/databind/jsontype/BasicPolymorphicTypeValidator.java#L36]
> * You can create an ObjectMapper with a PolymorphicTypeValidator ptv with
> `JsonMapper.builder.polymorphicTypeValidator(ptv).build()`
> *
> [https://github.com/apache/kafka/blob/ebac341b28d4224c296ada31eb45122176e8b27b/trogdor/src/main/java/org/apache/kafka/trogdor/common/JsonUtil.java#L24]
> *
> [https://github.com/apache/kafka/blob/ebac341b28d4224c296ada31eb45122176e8b27b/trogdor/src/main/java/org/apache/kafka/trogdor/task/TaskSpec.java#L32]
> * Without registering a polymorphicTypeValidator, Jackson 2.x will load any
> class that the JSON names and try to create instances of it (when the
> dangerous `@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, property = "class")` is
> used)
> * It may be feasible to switch to the safer `use = JsonTypeInfo.Id.NAME` and
> add JsonSubType info to the annotation listing the valid subtypes. This would
> be instead of adding a polymorphicTypeValidator. This would only work if the
> code that serializes and deserializes the data is in synch. The JSON will be
> different from the existing `use = JsonTypeInfo.Id.CLASS` result.
> * There are a few other ways to approach this too and I can enumerate them
> if the already listed (and easier) solutions are not acceptable.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)