From 65bc62c10a87009a67b629ccb2ceaaa27fdc693d Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Wed, 28 Feb 2024 15:01:47 +0000 Subject: [PATCH 1/3] Add summary model for Map$Entry#copyOf --- java/ql/lib/ext/java.util.model.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/java/ql/lib/ext/java.util.model.yml b/java/ql/lib/ext/java.util.model.yml index 07eae7c95b45..9e4cca35e9d3 100644 --- a/java/ql/lib/ext/java.util.model.yml +++ b/java/ql/lib/ext/java.util.model.yml @@ -227,6 +227,8 @@ extensions: - ["java.util", "Map", True, "replace", "(Object,Object,Object)", "", "Argument[0]", "Argument[this].MapKey", "value", "manual"] - ["java.util", "Map", True, "replace", "(Object,Object,Object)", "", "Argument[2]", "Argument[this].MapValue", "value", "manual"] - ["java.util", "Map", True, "values", "()", "", "Argument[this].MapValue", "ReturnValue.Element", "value", "manual"] + - ["java.util", "Map$Entry", True, "copyOf", "(Map$Entry)", "", "Argument[0].MapKey", "ReturnValue.MapKey", "value", "df-generated"] + - ["java.util", "Map$Entry", True, "copyOf", "(Map$Entry)", "", "Argument[0].MapValue", "ReturnValue.MapValue", "value", "df-generated"] - ["java.util", "Map$Entry", True, "getKey", "", "", "Argument[this].MapKey", "ReturnValue", "value", "manual"] - ["java.util", "Map$Entry", True, "getValue", "", "", "Argument[this].MapValue", "ReturnValue", "value", "manual"] - ["java.util", "Map$Entry", True, "setValue", "", "", "Argument[this].MapValue", "ReturnValue", "value", "manual"] From 939d6f973f39e534c540943ba2f4dd0d1cdc8afa Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Thu, 29 Feb 2024 11:42:12 +0000 Subject: [PATCH 2/3] Add summary models for javax.crypto.Cipher --- java/ql/lib/ext/javax.crypto.model.yml | 46 ++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/java/ql/lib/ext/javax.crypto.model.yml b/java/ql/lib/ext/javax.crypto.model.yml index b001017b256a..3e98757f104c 100644 --- a/java/ql/lib/ext/javax.crypto.model.yml +++ b/java/ql/lib/ext/javax.crypto.model.yml @@ -7,3 +7,49 @@ extensions: - ["javax.crypto", "Cipher", True, "init", "(int,Key,AlgorithmParameterSpec,SecureRandom)", "", "Argument[2]", "encryption-iv", "manual"] - ["javax.crypto", "Cipher", False, "unwrap", "(byte[],String,int)", "", "Argument[0]", "credentials-key", "hq-generated"] - ["javax.crypto", "CipherSpi", True, "engineUnwrap", "(byte[],String,int)", "", "Argument[0]", "credentials-key", "hq-generated"] + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.crypto", "Cipher", True, "doFinal", "()", "", "Argument[this].SyntheticField[cipher.Encrypted]", "ReturnValue", "taint", "manual"] + - ["javax.crypto", "Cipher", True, "doFinal", "(ByteBuffer,ByteBuffer)", "", "Argument[0]", "Argument[1]", "taint", "manual"] + - ["javax.crypto", "Cipher", True, "doFinal", "(ByteBuffer,ByteBuffer)", "", "Argument[this].SyntheticField[cipher.Encrypted]", "Argument[1]", "taint", "manual"] + - ["javax.crypto", "Cipher", True, "doFinal", "(byte[])", "", "Argument[0]", "ReturnValue", "taint", "manual"] + - ["javax.crypto", "Cipher", True, "doFinal", "(byte[])", "", "Argument[this].SyntheticField[cipher.Encrypted]", "ReturnValue", "taint", "manual"] + - ["javax.crypto", "Cipher", True, "doFinal", "(byte[],int)", "", "Argument[this].SyntheticField[cipher.Encrypted]", "Argument[0]", "taint", "manual"] + - ["javax.crypto", "Cipher", True, "doFinal", "(byte[],int,int)", "", "Argument[0]", "ReturnValue", "taint", "manual"] + - ["javax.crypto", "Cipher", True, "doFinal", "(byte[],int,int)", "", "Argument[this].SyntheticField[cipher.Encrypted]", "ReturnValue", "taint", "manual"] + - ["javax.crypto", "Cipher", True, "doFinal", "(byte[],int,int,byte[])", "", "Argument[0]", "Argument[3]", "taint", "manual"] + - ["javax.crypto", "Cipher", True, "doFinal", "(byte[],int,int,byte[])", "", "Argument[this].SyntheticField[cipher.Encrypted]", "Argument[3]", "taint", "manual"] + - ["javax.crypto", "Cipher", True, "doFinal", "(byte[],int,int,byte[],int)", "", "Argument[0]", "Argument[3]", "taint", "manual"] + - ["javax.crypto", "Cipher", True, "doFinal", "(byte[],int,int,byte[],int)", "", "Argument[this].SyntheticField[cipher.Encrypted]", "Argument[3]", "taint", "manual"] + - ["javax.crypto", "Cipher", True, "unwrap", "(byte[],String,int)", "", "Argument[0]", "ReturnValue", "taint", "manual"] + - ["javax.crypto", "Cipher", True, "update", "(ByteBuffer,ByteBuffer)", "", "Argument[0]", "Argument[1]", "taint", "manual"] + - ["javax.crypto", "Cipher", True, "update", "(ByteBuffer,ByteBuffer)", "", "Argument[0]", "Argument[this].SyntheticField[cipher.Encrypted]", "taint", "manual"] + - ["javax.crypto", "Cipher", True, "update", "(ByteBuffer,ByteBuffer)", "", "Argument[this].SyntheticField[cipher.Encrypted]", "Argument[1]", "taint", "manual"] + - ["javax.crypto", "Cipher", True, "update", "(byte[])", "", "Argument[0]", "Argument[this].SyntheticField[cipher.Encrypted]", "taint", "manual"] + - ["javax.crypto", "Cipher", True, "update", "(byte[])", "", "Argument[0]", "ReturnValue", "taint", "manual"] + - ["javax.crypto", "Cipher", True, "update", "(byte[])", "", "Argument[this].SyntheticField[cipher.Encrypted]", "ReturnValue", "taint", "manual"] + - ["javax.crypto", "Cipher", True, "update", "(byte[],int,int)", "", "Argument[0]", "Argument[this].SyntheticField[cipher.Encrypted]", "taint", "manual"] + - ["javax.crypto", "Cipher", True, "update", "(byte[],int,int)", "", "Argument[0]", "ReturnValue", "taint", "manual"] + - ["javax.crypto", "Cipher", True, "update", "(byte[],int,int)", "", "Argument[this].SyntheticField[cipher.Encrypted]", "ReturnValue", "taint", "manual"] + - ["javax.crypto", "Cipher", True, "update", "(byte[],int,int,byte[])", "", "Argument[0]", "Argument[this].SyntheticField[cipher.Encrypted]", "taint", "manual"] + - ["javax.crypto", "Cipher", True, "update", "(byte[],int,int,byte[])", "", "Argument[0]", "Argument[3]", "taint", "manual"] + - ["javax.crypto", "Cipher", True, "update", "(byte[],int,int,byte[])", "", "Argument[this].SyntheticField[cipher.Encrypted]", "Argument[3]", "taint", "manual"] + - ["javax.crypto", "Cipher", True, "update", "(byte[],int,int,byte[],int)", "", "Argument[0]", "Argument[this].SyntheticField[cipher.Encrypted]", "taint", "manual"] + - ["javax.crypto", "Cipher", True, "update", "(byte[],int,int,byte[],int)", "", "Argument[0]", "Argument[3]", "taint", "manual"] + - ["javax.crypto", "Cipher", True, "update", "(byte[],int,int,byte[],int)", "", "Argument[this].SyntheticField[cipher.Encrypted]", "Argument[3]", "taint", "manual"] + - ["javax.crypto", "Cipher", True, "wrap", "(Key)", "", "Argument[0]", "ReturnValue", "taint", "manual"] + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["javax.crypto", "Cipher", "getAlgorithm", "", "summary", "manual"] + - ["javax.crypto", "Cipher", "getExemptionMechanism", "", "summary", "manual"] + - ["javax.crypto", "Cipher", "getInstance", "", "summary", "manual"] + - ["javax.crypto", "Cipher", "getIV", "", "summary", "manual"] + - ["javax.crypto", "Cipher", "getParameters", "", "summary", "manual"] + - ["javax.crypto", "Cipher", "getProvider", "", "summary", "manual"] + - ["javax.crypto", "Cipher", "init", "", "summary", "manual"] + - ["javax.crypto", "Cipher", "toString", "", "summary", "manual"] + - ["javax.crypto", "Cipher", "updateAAD", "", "summary", "manual"] From 7b5f51b1e27cb93be5ad8f83ab67c1b2393cb343 Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Thu, 29 Feb 2024 16:22:27 +0000 Subject: [PATCH 3/3] Change summary models to neutral models for javax.crypto.Cipher --- java/ql/lib/ext/javax.crypto.model.yml | 37 +++----------------------- 1 file changed, 4 insertions(+), 33 deletions(-) diff --git a/java/ql/lib/ext/javax.crypto.model.yml b/java/ql/lib/ext/javax.crypto.model.yml index 3e98757f104c..9c909320344c 100644 --- a/java/ql/lib/ext/javax.crypto.model.yml +++ b/java/ql/lib/ext/javax.crypto.model.yml @@ -7,43 +7,11 @@ extensions: - ["javax.crypto", "Cipher", True, "init", "(int,Key,AlgorithmParameterSpec,SecureRandom)", "", "Argument[2]", "encryption-iv", "manual"] - ["javax.crypto", "Cipher", False, "unwrap", "(byte[],String,int)", "", "Argument[0]", "credentials-key", "hq-generated"] - ["javax.crypto", "CipherSpi", True, "engineUnwrap", "(byte[],String,int)", "", "Argument[0]", "credentials-key", "hq-generated"] - - addsTo: - pack: codeql/java-all - extensible: summaryModel - data: - - ["javax.crypto", "Cipher", True, "doFinal", "()", "", "Argument[this].SyntheticField[cipher.Encrypted]", "ReturnValue", "taint", "manual"] - - ["javax.crypto", "Cipher", True, "doFinal", "(ByteBuffer,ByteBuffer)", "", "Argument[0]", "Argument[1]", "taint", "manual"] - - ["javax.crypto", "Cipher", True, "doFinal", "(ByteBuffer,ByteBuffer)", "", "Argument[this].SyntheticField[cipher.Encrypted]", "Argument[1]", "taint", "manual"] - - ["javax.crypto", "Cipher", True, "doFinal", "(byte[])", "", "Argument[0]", "ReturnValue", "taint", "manual"] - - ["javax.crypto", "Cipher", True, "doFinal", "(byte[])", "", "Argument[this].SyntheticField[cipher.Encrypted]", "ReturnValue", "taint", "manual"] - - ["javax.crypto", "Cipher", True, "doFinal", "(byte[],int)", "", "Argument[this].SyntheticField[cipher.Encrypted]", "Argument[0]", "taint", "manual"] - - ["javax.crypto", "Cipher", True, "doFinal", "(byte[],int,int)", "", "Argument[0]", "ReturnValue", "taint", "manual"] - - ["javax.crypto", "Cipher", True, "doFinal", "(byte[],int,int)", "", "Argument[this].SyntheticField[cipher.Encrypted]", "ReturnValue", "taint", "manual"] - - ["javax.crypto", "Cipher", True, "doFinal", "(byte[],int,int,byte[])", "", "Argument[0]", "Argument[3]", "taint", "manual"] - - ["javax.crypto", "Cipher", True, "doFinal", "(byte[],int,int,byte[])", "", "Argument[this].SyntheticField[cipher.Encrypted]", "Argument[3]", "taint", "manual"] - - ["javax.crypto", "Cipher", True, "doFinal", "(byte[],int,int,byte[],int)", "", "Argument[0]", "Argument[3]", "taint", "manual"] - - ["javax.crypto", "Cipher", True, "doFinal", "(byte[],int,int,byte[],int)", "", "Argument[this].SyntheticField[cipher.Encrypted]", "Argument[3]", "taint", "manual"] - - ["javax.crypto", "Cipher", True, "unwrap", "(byte[],String,int)", "", "Argument[0]", "ReturnValue", "taint", "manual"] - - ["javax.crypto", "Cipher", True, "update", "(ByteBuffer,ByteBuffer)", "", "Argument[0]", "Argument[1]", "taint", "manual"] - - ["javax.crypto", "Cipher", True, "update", "(ByteBuffer,ByteBuffer)", "", "Argument[0]", "Argument[this].SyntheticField[cipher.Encrypted]", "taint", "manual"] - - ["javax.crypto", "Cipher", True, "update", "(ByteBuffer,ByteBuffer)", "", "Argument[this].SyntheticField[cipher.Encrypted]", "Argument[1]", "taint", "manual"] - - ["javax.crypto", "Cipher", True, "update", "(byte[])", "", "Argument[0]", "Argument[this].SyntheticField[cipher.Encrypted]", "taint", "manual"] - - ["javax.crypto", "Cipher", True, "update", "(byte[])", "", "Argument[0]", "ReturnValue", "taint", "manual"] - - ["javax.crypto", "Cipher", True, "update", "(byte[])", "", "Argument[this].SyntheticField[cipher.Encrypted]", "ReturnValue", "taint", "manual"] - - ["javax.crypto", "Cipher", True, "update", "(byte[],int,int)", "", "Argument[0]", "Argument[this].SyntheticField[cipher.Encrypted]", "taint", "manual"] - - ["javax.crypto", "Cipher", True, "update", "(byte[],int,int)", "", "Argument[0]", "ReturnValue", "taint", "manual"] - - ["javax.crypto", "Cipher", True, "update", "(byte[],int,int)", "", "Argument[this].SyntheticField[cipher.Encrypted]", "ReturnValue", "taint", "manual"] - - ["javax.crypto", "Cipher", True, "update", "(byte[],int,int,byte[])", "", "Argument[0]", "Argument[this].SyntheticField[cipher.Encrypted]", "taint", "manual"] - - ["javax.crypto", "Cipher", True, "update", "(byte[],int,int,byte[])", "", "Argument[0]", "Argument[3]", "taint", "manual"] - - ["javax.crypto", "Cipher", True, "update", "(byte[],int,int,byte[])", "", "Argument[this].SyntheticField[cipher.Encrypted]", "Argument[3]", "taint", "manual"] - - ["javax.crypto", "Cipher", True, "update", "(byte[],int,int,byte[],int)", "", "Argument[0]", "Argument[this].SyntheticField[cipher.Encrypted]", "taint", "manual"] - - ["javax.crypto", "Cipher", True, "update", "(byte[],int,int,byte[],int)", "", "Argument[0]", "Argument[3]", "taint", "manual"] - - ["javax.crypto", "Cipher", True, "update", "(byte[],int,int,byte[],int)", "", "Argument[this].SyntheticField[cipher.Encrypted]", "Argument[3]", "taint", "manual"] - - ["javax.crypto", "Cipher", True, "wrap", "(Key)", "", "Argument[0]", "ReturnValue", "taint", "manual"] - addsTo: pack: codeql/java-all extensible: neutralModel data: + - ["javax.crypto", "Cipher", "doFinal", "", "summary", "manual"] - ["javax.crypto", "Cipher", "getAlgorithm", "", "summary", "manual"] - ["javax.crypto", "Cipher", "getExemptionMechanism", "", "summary", "manual"] - ["javax.crypto", "Cipher", "getInstance", "", "summary", "manual"] @@ -52,4 +20,7 @@ extensions: - ["javax.crypto", "Cipher", "getProvider", "", "summary", "manual"] - ["javax.crypto", "Cipher", "init", "", "summary", "manual"] - ["javax.crypto", "Cipher", "toString", "", "summary", "manual"] + - ["javax.crypto", "Cipher", "unwrap", "", "summary", "manual"] + - ["javax.crypto", "Cipher", "update", "", "summary", "manual"] - ["javax.crypto", "Cipher", "updateAAD", "", "summary", "manual"] + - ["javax.crypto", "Cipher", "wrap", "", "summary", "manual"]