Java: Convert Google HTTP client API parseAs sink to CSV format

This commit is contained in:
Tamas Vajk
2021-04-01 09:21:49 +02:00
parent e544faed6d
commit 3e53484bb3
2 changed files with 9 additions and 14 deletions

View File

@@ -76,6 +76,7 @@ private module Frameworks {
private import semmle.code.java.frameworks.ApacheHttp
private import semmle.code.java.frameworks.apache.Lang
private import semmle.code.java.frameworks.guava.Guava
private import semmle.code.java.frameworks.google.GoogleHttpClientApi
private import semmle.code.java.security.ResponseSplitting
private import semmle.code.java.security.XSS
}

View File

@@ -2,14 +2,7 @@ import java
import semmle.code.java.Serializability
import semmle.code.java.dataflow.DataFlow
import semmle.code.java.dataflow.DataFlow5
/** The method `parseAs` in `com.google.api.client.http.HttpResponse`. */
private class ParseAsMethod extends Method {
ParseAsMethod() {
this.getDeclaringType().hasQualifiedName("com.google.api.client.http", "HttpResponse") and
this.hasName("parseAs")
}
}
private import semmle.code.java.dataflow.ExternalFlow
private class TypeLiteralToParseAsFlowConfiguration extends DataFlow5::Configuration {
TypeLiteralToParseAsFlowConfiguration() {
@@ -18,16 +11,17 @@ private class TypeLiteralToParseAsFlowConfiguration extends DataFlow5::Configura
override predicate isSource(DataFlow::Node source) { source.asExpr() instanceof TypeLiteral }
override predicate isSink(DataFlow::Node sink) {
exists(MethodAccess ma |
ma.getAnArgument() = sink.asExpr() and
ma.getMethod() instanceof ParseAsMethod
)
}
override predicate isSink(DataFlow::Node sink) { sinkNode(sink, "google-parse-as") }
TypeLiteral getSourceWithFlowToParseAs() { hasFlow(DataFlow::exprNode(result), _) }
}
private class ParseAsSinkModel extends SinkModelCsv {
override predicate row(string row) {
row = ["com.google.api.client.http;HttpResponse;false;parseAs;;;Argument;google-parse-as"]
}
}
/** A field that is deserialized by `HttpResponse.parseAs`. */
class HttpResponseParseAsDeserializableField extends DeserializableField {
HttpResponseParseAsDeserializableField() {