Java: add Gson support to unsafe-deserialization query#6463
Java: add Gson support to unsafe-deserialization query#6463aschackmull merged 12 commits intogithub:mainfrom
Conversation
javaGenerated file changes for java
- Android,``android.*``,18,34,70,,,3,67,,,
+ Android,``android.*``,18,135,70,,,3,67,,,
- Others,"``com.esotericsoftware.kryo.io``, ``com.esotericsoftware.kryo5.io``, ``com.fasterxml.jackson.core``, ``com.fasterxml.jackson.databind``, ``com.opensymphony.xwork2.ognl``, ``com.unboundid.ldap.sdk``, ``groovy.lang``, ``groovy.util``, ``ognl``, ``org.apache.commons.codec``, ``org.apache.commons.jexl2``, ``org.apache.commons.jexl3``, ``org.apache.commons.ognl``, ``org.apache.directory.ldap.client.api``, ``org.apache.ibatis.jdbc``, ``org.apache.shiro.jndi``, ``org.codehaus.groovy.control``, ``org.dom4j``, ``org.hibernate``, ``org.jooq``, ``org.json``, ``org.mvel2``, ``org.xml.sax``, ``org.xmlpull.v1``, ``play.mvc``",7,251,146,,,,14,18,,
+ Others,"``com.esotericsoftware.kryo.io``, ``com.esotericsoftware.kryo5.io``, ``com.fasterxml.jackson.core``, ``com.fasterxml.jackson.databind``, ``com.opensymphony.xwork2.ognl``, ``com.unboundid.ldap.sdk``, ``flexjson``, ``groovy.lang``, ``groovy.util``, ``jodd.json``, ``ognl``, ``org.apache.commons.codec``, ``org.apache.commons.jexl2``, ``org.apache.commons.jexl3``, ``org.apache.commons.ognl``, ``org.apache.directory.ldap.client.api``, ``org.apache.ibatis.jdbc``, ``org.apache.shiro.jndi``, ``org.codehaus.groovy.control``, ``org.dom4j``, ``org.hibernate``, ``org.jooq``, ``org.json``, ``org.mvel2``, ``org.xml.sax``, ``org.xmlpull.v1``, ``play.mvc``",7,262,146,,,,14,18,,
- Totals,,84,2711,398,13,6,6,107,33,1,66
+ Totals,,84,2823,398,13,6,6,107,33,1,66
- android.content,8,,4,,,,,,,,,,,,,8,,,,,,4,
+ android.content,8,,33,,,,,,,,,,,,,8,,,,,,33,
+ android.os,,,72,,,,,,,,,,,,,,,,,,,71,1
+ flexjson,,,1,,,,,,,,,,,,,,,,,,,,1
+ jodd.json,,,10,,,,,,,,,,,,,,,,,,,,10 |
javaGenerated file changes for java
- Android,``android.*``,18,34,70,,,3,67,,,
+ Android,``android.*``,18,145,70,,,3,67,,,
- Others,"``com.esotericsoftware.kryo.io``, ``com.esotericsoftware.kryo5.io``, ``com.fasterxml.jackson.core``, ``com.fasterxml.jackson.databind``, ``com.opensymphony.xwork2.ognl``, ``com.unboundid.ldap.sdk``, ``groovy.lang``, ``groovy.util``, ``ognl``, ``org.apache.commons.codec``, ``org.apache.commons.jexl2``, ``org.apache.commons.jexl3``, ``org.apache.commons.ognl``, ``org.apache.directory.ldap.client.api``, ``org.apache.ibatis.jdbc``, ``org.apache.shiro.jndi``, ``org.codehaus.groovy.control``, ``org.dom4j``, ``org.hibernate``, ``org.jooq``, ``org.json``, ``org.mvel2``, ``org.xml.sax``, ``org.xmlpull.v1``, ``play.mvc``",7,251,146,,,,14,18,,
+ Others,"``com.esotericsoftware.kryo.io``, ``com.esotericsoftware.kryo5.io``, ``com.fasterxml.jackson.core``, ``com.fasterxml.jackson.databind``, ``com.opensymphony.xwork2.ognl``, ``com.unboundid.ldap.sdk``, ``flexjson``, ``groovy.lang``, ``groovy.util``, ``jodd.json``, ``ognl``, ``org.apache.commons.codec``, ``org.apache.commons.jexl2``, ``org.apache.commons.jexl3``, ``org.apache.commons.ognl``, ``org.apache.directory.ldap.client.api``, ``org.apache.ibatis.jdbc``, ``org.apache.shiro.jndi``, ``org.codehaus.groovy.control``, ``org.dom4j``, ``org.hibernate``, ``org.jooq``, ``org.json``, ``org.mvel2``, ``org.xml.sax``, ``org.xmlpull.v1``, ``play.mvc``",7,262,146,,,,14,18,,
- Totals,,84,2711,398,13,6,6,107,33,1,66
+ Totals,,84,2833,398,13,6,6,107,33,1,66
- android.content,8,,4,,,,,,,,,,,,,8,,,,,,4,
+ android.content,8,,33,,,,,,,,,,,,,8,,,,,,33,
+ android.os,,,82,,,,,,,,,,,,,,,,,,,81,1
+ flexjson,,,1,,,,,,,,,,,,,,,,,,,,1
+ jodd.json,,,10,,,,,,,,,,,,,,,,,,,,10 |
|
On all the extra modelling: I've just ported the existing models here, please feel free to follow up with further modelling |
atorralba
left a comment
There was a problem hiding this comment.
The Gson part LGTM after resolving the comments above.
5dc0ca5 to
48c497e
Compare
| import semmle.code.java.dataflow.DataFlow | ||
| import semmle.code.java.dataflow.ExternalFlow | ||
| import semmle.code.java.dataflow.TaintTracking | ||
| import TestUtilities.InlineExpectationsTest |
There was a problem hiding this comment.
The boilerplate here has been abstracted into java/ql/test/TestUtilities/InlineFlowTest.qll so just import that.
|
Suggest #6599 goes before this PR, because it includes detailed |
48c497e to
57771e1
Compare
javaGenerated file changes for java
- Android,``android.*``,45,233,70,,,3,67,,,
+ Android,``android.*``,45,344,70,,,3,67,,,
- Totals,,143,5125,408,13,6,10,107,33,1,66
+ Totals,,143,5236,408,13,6,10,107,33,1,66
- android.content,8,27,61,,,,,,,,,,,,,8,,,,,,27,,4,57
+ android.content,8,27,90,,,,,,,,,,,,,8,,,,,,27,,33,57
- android.os,,,82,,,,,,,,,,,,,,,,,,,,,2,80
+ android.os,,,164,,,,,,,,,,,,,,,,,,,,,83,81 |
|
Great. We are going to finalize this PR as well:-) |
javaGenerated file changes for java
- Android,``android.*``,45,233,70,,,3,67,,,
+ Android,``android.*``,45,273,70,,,3,67,,,
- Totals,,143,5125,408,13,6,10,107,33,1,66
+ Totals,,143,5165,408,13,6,10,107,33,1,66
- android.os,,,82,,,,,,,,,,,,,,,,,,,,,2,80
+ android.os,,,122,,,,,,,,,,,,,,,,,,,,,41,81 |
* Account for changed dataflow graph shape using external flow * Account for BaseBundle only existing as of Android 5 * Properly implement Parcelable, which we previously got away with due to a partial stub * Restore an Android 11 function that had been added to the Android 9 Context class (I won't get into enforcing the difference in this PR)
Note these still aren't entirely mechanically generated stubs matching the real Android 9.
216dc0f to
3c96e62
Compare
|
@aschackmull this is now updated and mergeable AFAIK |
javaGenerated file changes for java
- Android,``android.*``,45,245,70,,,3,67,,,
+ Android,``android.*``,45,285,70,,,3,67,,,
- Totals,,143,5217,408,13,6,10,107,33,1,66
+ Totals,,143,5257,408,13,6,10,107,33,1,66
- android.os,,,82,,,,,,,,,,,,,,,,,,,,,2,80
+ android.os,,,122,,,,,,,,,,,,,,,,,,,,,41,81 |
|
|
||
| /** | ||
| * Holds if `intentNode` is an `Intent` used in the context `(T)intentNode.getParcelableExtra(...)` and | ||
| * `parcelNode` is the corresponding parameter of `Parcelable.Creator<T> { public T createFromParcel(Parcel parcelNode) { }`. |
There was a problem hiding this comment.
The qldoc should likely be extended with a tidbit like "and T is a concrete type that ..., which explains the role of T` and in particular highlights that it isn't a type variable (which one might otherwise easily assume).
Based on #6456 -- please only review the top two commits here.Since the original by @luchua-bc added models of some Android functions I've ported the existing Android models to CSV and generated tests for them here.