Run2 jackson empty key vulnerability
[COLM'26] SkillLearnBench is the first benchmark for evaluating continual learning methods that automatically generate agent skills.
npx -y skills add cxcscmu/SkillLearnBench --skill run2_jackson-empty-key-vulnerabilityAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
What its author says it does
Copied from the file, not written here
Detailed explanation of the Jackson empty key ("") vulnerability and how it bypasses @JacksonInject security.
SKILL.md
1.6 KB, 316 tokens by cl100k_base, as published. Nobody here has run it
Jackson Empty Key ("") Vulnerability
The vulnerability (e.g., CVE-2021-25646 in Apache Druid) occurs when Jackson's @JacksonInject is used to provide sensitive configuration objects, but the deserialization process allows these objects to be overridden by malicious JSON input.
How it works
- Unnamed Injected Parameters: If a constructor parameter is marked with
@JacksonInjectbut lacks a@JsonPropertyname, Jackson may default to matching it against certain JSON keys, including the empty string key"". - Override Behavior: By default, Jackson might allow the JSON input to populate the fields of an injected object if a match is found.
- Security Bypass: In Druid,
JavaScriptConfigis injected to determine if JavaScript is enabled. An attacker can provide"": {"enabled": true}in the JSON, which Jackson uses to override the server-sideJavaScriptConfigobject, thus enabling JavaScript execution for that specific request even if it's globally disabled.
The Fix: useInput = OptBoolean.FALSE
The robust fix is to explicitly tell Jackson NOT to use any JSON input for the injected parameter.
@JsonCreator
public MyObject(
@JsonProperty("someField") String someField,
@JacksonInject(useInput = OptBoolean.FALSE) MyConfig config
)
Setting useInput = OptBoolean.FALSE ensures that the config object is ONLY sourced from the InjectableValues (server configuration) and never from the JSON payload.