mirror of
https://github.com/github/codeql.git
synced 2025-12-20 18:56:32 +01:00
[Java] Add taint tracking through Jackson deserialization
This commit is contained in:
@@ -50,6 +50,15 @@ library class JacksonWriteValueMethod extends Method, TaintPreservingCallable {
|
||||
}
|
||||
}
|
||||
|
||||
library class JacksonReadValueMethod extends Method, TaintPreservingCallable {
|
||||
JacksonReadValueMethod() {
|
||||
getDeclaringType().hasQualifiedName("com.fasterxml.jackson.databind", "ObjectReader") and
|
||||
hasName("readValue")
|
||||
}
|
||||
|
||||
override predicate returnsTaintFrom(int arg) { arg = 0 }
|
||||
}
|
||||
|
||||
/** A type whose values are explicitly serialized in a call to a Jackson method. */
|
||||
library class ExplicitlyWrittenJacksonSerializableType extends JacksonSerializableType {
|
||||
ExplicitlyWrittenJacksonSerializableType() {
|
||||
@@ -135,6 +144,16 @@ class JacksonDeserializableField extends DeserializableField {
|
||||
}
|
||||
}
|
||||
|
||||
class JacksonDeserializableFieldAccess extends FieldAccess {
|
||||
JacksonDeserializableFieldAccess() { getField() instanceof JacksonDeserializableField }
|
||||
}
|
||||
|
||||
class JacksonDeseializedTaintStep extends AdditionalTaintStep {
|
||||
override predicate step(DataFlow::Node node1, DataFlow::Node node2) {
|
||||
node2.asExpr().(JacksonDeserializableFieldAccess).getQualifier() = node1.asExpr()
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* A call to the `addMixInAnnotations` or `addMixIn` Jackson method.
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user