File tree Expand file tree Collapse file tree 5 files changed +38
-1
lines changed
library-tests/dataflow/taint-jackson
stubs/jackson-databind-2.10/com/fasterxml/jackson/databind Expand file tree Collapse file tree 5 files changed +38
-1
lines changed Original file line number Diff line number Diff line change @@ -77,6 +77,7 @@ private module Frameworks {
77
77
private import semmle.code.java.frameworks.ApacheHttp
78
78
private import semmle.code.java.frameworks.apache.Lang
79
79
private import semmle.code.java.frameworks.guava.Guava
80
+ private import semmle.code.java.frameworks.jackson.JacksonSerializability
80
81
private import semmle.code.java.security.ResponseSplitting
81
82
private import semmle.code.java.security.XSS
82
83
private import semmle.code.java.security.LdapInjection
Original file line number Diff line number Diff line change @@ -9,6 +9,7 @@ import semmle.code.java.Reflection
9
9
import semmle.code.java.dataflow.DataFlow
10
10
import semmle.code.java.dataflow.DataFlow5
11
11
import semmle.code.java.dataflow.FlowSteps
12
+ private import semmle.code.java.dataflow.ExternalFlow
12
13
13
14
/**
14
15
* A `@com.fasterxml.jackson.annotation.JsonIgnore` annoation.
@@ -275,3 +276,13 @@ class JacksonMixedInCallable extends Callable {
275
276
)
276
277
}
277
278
}
279
+
280
+ private class JacksonModel extends SummaryModelCsv {
281
+ override predicate row ( string row ) {
282
+ row =
283
+ [
284
+ "com.fasterxml.jackson.databind;ObjectMapper;true;valueToTree;;;Argument[0];ReturnValue;taint" ,
285
+ "com.fasterxml.jackson.databind;ObjectMapper;true;convertValue;;;Argument[0];ReturnValue;taint"
286
+ ]
287
+ }
288
+ }
Original file line number Diff line number Diff line change 4
4
import java .io .StringWriter ;
5
5
import java .io .Writer ;
6
6
import java .util .Iterator ;
7
+ import java .util .HashMap ;
8
+ import java .util .Map ;
7
9
8
10
import com .fasterxml .jackson .core .JsonFactory ;
9
11
import com .fasterxml .jackson .core .JsonGenerator ;
12
+ import com .fasterxml .jackson .databind .JsonNode ;
10
13
import com .fasterxml .jackson .databind .ObjectMapper ;
11
14
import com .fasterxml .jackson .databind .ObjectWriter ;
12
15
import com .fasterxml .jackson .databind .ObjectReader ;
@@ -94,4 +97,16 @@ public static void jacksonObjectReaderIterable() throws java.io.IOException {
94
97
sink (p .getName ()); //$hasTaintFlow
95
98
}
96
99
}
100
+
101
+ public static void jacksonTwoStepDeserialization () throws java .io .IOException {
102
+ String s = taint ();
103
+ Map <String , Object > taintedParams = new HashMap <>();
104
+ taintedParams .put ("name" , s );
105
+ ObjectMapper om = new ObjectMapper ();
106
+ JsonNode jn = om .valueToTree (taintedParams );
107
+ sink (jn ); //$hasTaintFlow
108
+ Potato p = om .convertValue (jn , Potato .class );
109
+ sink (p ); //$hasTaintFlow
110
+ sink (p .getName ()); //$hasTaintFlow
111
+ }
97
112
}
Original file line number Diff line number Diff line change 1
1
package com .fasterxml .jackson .databind ;
2
2
3
- public class JsonNode {
3
+ import java .util .*;
4
+
5
+ public abstract class JsonNode implements Iterable <JsonNode > {
4
6
public JsonNode () {
5
7
}
6
8
}
Original file line number Diff line number Diff line change @@ -30,4 +30,12 @@ public String writeValueAsString(Object value) {
30
30
public ObjectReader readerFor (Class <?> type ) {
31
31
return null ;
32
32
}
33
+
34
+ public <T extends JsonNode > T valueToTree (Object fromValue ) throws IllegalArgumentException {
35
+ return null ;
36
+ }
37
+
38
+ public <T > T convertValue (Object fromValue , Class <T > toValueType ) throws IllegalArgumentException {
39
+ return null ;
40
+ }
33
41
}
You can’t perform that action at this time.
0 commit comments