FasterXML / jackson-annotations

Core annotations (annotations that only depend on jackson-core) for Jackson data processor
https://github.com/FasterXML/jackson
Apache License 2.0
1.03k stars 330 forks source link

Consider making `@JacksonInject` `useInput=false` the default #186

Open Marcono1234 opened 3 years ago

Marcono1234 commented 3 years ago

For the recently found vulnerability CVE-2021-25646 in Apache Druid a flaw with @JacksonInject was abused, that is by default it uses (and overwrites injected data with) deserialized data. For Apache Druid the injected data was suposed to contain a security configuration, but due to using the deserialized data, the user could easily disable the security configuration. This has been mentioned in GitHub's "LiveQL Episode 2 - The Rhino in the room.".

Part of the problem is also that the current Jackson documentation is incorrect, or incomplete:

Maybe it would be best to change the default for useInput to be false for the next major release, possibly with the exception that if the field, method or parameter is also annotated with an annotation explicitly demanding deserialization (e.g. @JsonProperty), then the default should be true. Even though making software backward compatible is important, it might be more important to make it secure. What do you think? (There might also be better solutions, to be honest I am not verify familiar with Jackson.)

Merely changing the default logic to prefer injected over deserialized data might not be enough, e.g. consider a case where a security check applies strict security if the data is absent.