Skip to content

Commit 0949e96

Browse files
committed
query format
1 parent af5c15e commit 0949e96

8 files changed

Lines changed: 214 additions & 195 deletions

File tree

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
11
import CryptoAlgorithmNames
22
import CryptoArtifact
3-
4-
import CryptographyModule
3+
import CryptographyModule

powershell/ql/lib/semmle/code/powershell/security/cryptography/CryptoAlgorithmNames.qll

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
predicate isHashingAlgorithm(string name) {
2-
name = [
2+
name =
3+
[
34
"blake2", "blake2b", "blake2s", "sha2", "sha224", "sha256", "sha384", "sha512", "sha512224",
45
"sha512256", "sha3", "sha3224", "sha3256", "sha3384", "sha3512", "shake128", "shake256",
56
"sm3", "whirlpool", "poly1305", "havel128", "md2", "md4", "md5", "panama", "ripemd",
@@ -9,7 +10,8 @@ predicate isHashingAlgorithm(string name) {
910
}
1011

1112
predicate isSymmetricAlgorithm(string name) {
12-
name = [
13+
name =
14+
[
1315
"aes", "aes128", "aes192", "aes256", "aria", "blowfish", "bf", "ecies", "cast", "cast5",
1416
"camellia", "camellia128", "camellia192", "camellia256", "chacha", "chacha20",
1517
"chacha20poly1305", "gost", "gostr34102001", "gostr341094", "gostr341194", "gost2814789",
@@ -24,4 +26,4 @@ predicate isCipherBlockModeAlgorithm(string name) {
2426
name = ["cbc", "gcm", "ccm", "cfb", "ofb", "cfb8", "ctr", "openpgp", "xts", "eax", "siv", "ecb"]
2527
}
2628

27-
string unknownAlgorithm() { result = "UNKNOWN" }
29+
string unknownAlgorithm() { result = "UNKNOWN" }

powershell/ql/lib/semmle/code/powershell/security/cryptography/CryptoArtifact.qll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,4 +35,4 @@ abstract class BlockMode extends CryptographicAlgorithm {
3535
then isCipherBlockModeAlgorithm(result) and result = this.getName()
3636
else result = unknownAlgorithm()
3737
}
38-
}
38+
}
Lines changed: 137 additions & 126 deletions
Original file line numberDiff line numberDiff line change
@@ -1,198 +1,209 @@
11
import powershell
22
import semmle.code.powershell.dataflow.DataFlow
33
import semmle.code.powershell.ApiGraphs
4-
54
import CryptoArtifact
65

76
class CryptoAlgorithmObjectCreation extends DataFlow::ObjectCreationNode {
8-
string objectName;
9-
CryptoAlgorithmObjectCreation(){
10-
objectName = this.getExprNode().getExpr().(CallExpr).getAnArgument().getValue().asString().toLowerCase()
11-
}
12-
string getObjectName() {
13-
result = objectName
14-
}
7+
string objectName;
8+
9+
CryptoAlgorithmObjectCreation() {
10+
objectName =
11+
this.getExprNode().getExpr().(CallExpr).getAnArgument().getValue().asString().toLowerCase()
12+
}
13+
14+
string getObjectName() { result = objectName }
1515
}
1616

1717
class CryptoAlgorithmCreateCall extends DataFlow::CallNode {
18-
string objectName;
19-
CryptoAlgorithmCreateCall() {
20-
this = API::getTopLevelMember("system").getMember("security").getMember("cryptography").getMember(objectName).getMember("create").asCall()
21-
}
18+
string objectName;
2219

23-
string getObjectName() {
24-
result = objectName
20+
CryptoAlgorithmCreateCall() {
21+
this =
22+
API::getTopLevelMember("system")
23+
.getMember("security")
24+
.getMember("cryptography")
25+
.getMember(objectName)
26+
.getMember("create")
27+
.asCall()
2528
}
29+
30+
string getObjectName() { result = objectName }
2631
}
2732

2833
class CryptoAlgorithmCreateArgCall extends DataFlow::CallNode {
29-
string objectName;
30-
CryptoAlgorithmCreateArgCall() {
34+
string objectName;
35+
36+
CryptoAlgorithmCreateArgCall() {
3137
(
32-
this = API::getTopLevelMember("system").getMember("security").getMember("cryptography").getMember(_).getMember("create").asCall() or
33-
this = API::getTopLevelMember("system").getMember("security").getMember("cryptography").getMember("create").asCall()
34-
) and
35-
objectName = this.getAnArgument().asExpr().getValue().asString().toLowerCase()
38+
this =
39+
API::getTopLevelMember("system")
40+
.getMember("security")
41+
.getMember("cryptography")
42+
.getMember(_)
43+
.getMember("create")
44+
.asCall() or
45+
this =
46+
API::getTopLevelMember("system")
47+
.getMember("security")
48+
.getMember("cryptography")
49+
.getMember("create")
50+
.asCall()
51+
) and
52+
objectName = this.getAnArgument().asExpr().getValue().asString().toLowerCase()
3653
}
3754

38-
string getObjectName() {
39-
result = objectName
40-
}
55+
string getObjectName() { result = objectName }
4156
}
4257

43-
4458
class CryptoAlgorithmCreateFromNameCall extends DataFlow::CallNode {
45-
string objectName;
46-
CryptoAlgorithmCreateFromNameCall() {
47-
this = API::getTopLevelMember("system").getMember("security").getMember("cryptography").getMember("cryptoconfig").getMember("createfromname").asCall() and
48-
objectName = this.getAnArgument().asExpr().getValue().asString().toLowerCase()
49-
}
59+
string objectName;
5060

51-
string getObjectName() {
52-
result = objectName
61+
CryptoAlgorithmCreateFromNameCall() {
62+
this =
63+
API::getTopLevelMember("system")
64+
.getMember("security")
65+
.getMember("cryptography")
66+
.getMember("cryptoconfig")
67+
.getMember("createfromname")
68+
.asCall() and
69+
objectName = this.getAnArgument().asExpr().getValue().asString().toLowerCase()
5370
}
71+
72+
string getObjectName() { result = objectName }
5473
}
5574

5675
class HashAlgorithmObjectCreation extends HashAlgorithm, CryptoAlgorithmObjectCreation {
57-
string algName;
58-
HashAlgorithmObjectCreation() {
76+
string algName;
77+
78+
HashAlgorithmObjectCreation() {
5979
(
60-
this.getObjectName() = "system.security.cryptography." + algName or
61-
this.getObjectName() = "system.security.cryptography." + algName + "cryptoserviceprovider"
62-
)
63-
and
64-
isHashingAlgorithm(algName)
80+
this.getObjectName() = "system.security.cryptography." + algName or
81+
this.getObjectName() = "system.security.cryptography." + algName + "cryptoserviceprovider"
82+
) and
83+
isHashingAlgorithm(algName)
6584
}
6685

67-
override string getName() {
68-
result = algName
69-
}
86+
override string getName() { result = algName }
7087
}
7188

7289
class HashAlgorithmCreateCall extends HashAlgorithm, CryptoAlgorithmCreateCall {
73-
string algName;
74-
HashAlgorithmCreateCall() {
75-
isHashingAlgorithm(this.getObjectName()) and
76-
(
77-
this.getObjectName() = algName or
78-
this.getObjectName() = "system.security.cryptography." + algName
79-
)
80-
}
81-
override string getName() {
82-
result = algName
90+
string algName;
91+
92+
HashAlgorithmCreateCall() {
93+
isHashingAlgorithm(this.getObjectName()) and
94+
(
95+
this.getObjectName() = algName or
96+
this.getObjectName() = "system.security.cryptography." + algName
97+
)
8398
}
99+
100+
override string getName() { result = algName }
84101
}
85102

86103
class HashAlgorithmCreateFromNameCall extends HashAlgorithm, CryptoAlgorithmCreateFromNameCall {
87-
string algName;
88-
HashAlgorithmCreateFromNameCall() {
89-
(
90-
this.getObjectName() = algName or
91-
this.getObjectName() = "system.security.cryptography." + algName
92-
) and
93-
isHashingAlgorithm(algName)
94-
}
104+
string algName;
95105

96-
override string getName() {
97-
result = algName
106+
HashAlgorithmCreateFromNameCall() {
107+
(
108+
this.getObjectName() = algName or
109+
this.getObjectName() = "system.security.cryptography." + algName
110+
) and
111+
isHashingAlgorithm(algName)
98112
}
113+
114+
override string getName() { result = algName }
99115
}
100116

101117
class SymmetricAlgorithmObjectCreation extends SymmetricAlgorithm, CryptoAlgorithmObjectCreation {
102-
string algName;
103-
SymmetricAlgorithmObjectCreation() {
118+
string algName;
119+
120+
SymmetricAlgorithmObjectCreation() {
104121
(
105-
this.getObjectName() = "system.security.cryptography." + algName or
106-
this.getObjectName() = "system.security.cryptography." + algName + "cryptoserviceprovider" or
107-
this.getObjectName() = "system.security.cryptography.symmetricalgorithm." + algName
108-
)
109-
and
110-
isSymmetricAlgorithm(algName)
122+
this.getObjectName() = "system.security.cryptography." + algName or
123+
this.getObjectName() = "system.security.cryptography." + algName + "cryptoserviceprovider" or
124+
this.getObjectName() = "system.security.cryptography.symmetricalgorithm." + algName
125+
) and
126+
isSymmetricAlgorithm(algName)
111127
}
112128

113-
override string getName() {
114-
result = algName
115-
}
129+
override string getName() { result = algName }
116130
}
117131

118132
class SymmetricAlgorithmCreateCall extends SymmetricAlgorithm, CryptoAlgorithmCreateCall {
119-
string algName;
120-
SymmetricAlgorithmCreateCall() {
121-
isSymmetricAlgorithm(this.getObjectName()) and
122-
(
123-
this.getObjectName() = algName or
124-
this.getObjectName() = "system.security.cryptography." + algName or
125-
this.getObjectName() = "system.security.cryptography.symmetricalgorithm." + algName
126-
)
127-
}
128-
override string getName() {
129-
result = algName
133+
string algName;
134+
135+
SymmetricAlgorithmCreateCall() {
136+
isSymmetricAlgorithm(this.getObjectName()) and
137+
(
138+
this.getObjectName() = algName or
139+
this.getObjectName() = "system.security.cryptography." + algName or
140+
this.getObjectName() = "system.security.cryptography.symmetricalgorithm." + algName
141+
)
130142
}
143+
144+
override string getName() { result = algName }
131145
}
132146

133147
class SymmetricAlgorithmCreateArgCall extends SymmetricAlgorithm, CryptoAlgorithmCreateArgCall {
134-
string algName;
135-
SymmetricAlgorithmCreateArgCall() {
136-
137-
(
138-
algName = this.getObjectName() and
139-
isSymmetricAlgorithm(algName)
140-
) or
141-
(
142-
this.getObjectName() = "system.security.cryptography." + algName and
143-
isSymmetricAlgorithm(algName)
144-
)
145-
}
146-
override string getName() {
147-
result = algName
148+
string algName;
149+
150+
SymmetricAlgorithmCreateArgCall() {
151+
algName = this.getObjectName() and
152+
isSymmetricAlgorithm(algName)
153+
or
154+
this.getObjectName() = "system.security.cryptography." + algName and
155+
isSymmetricAlgorithm(algName)
148156
}
157+
158+
override string getName() { result = algName }
149159
}
150160

151-
class SymmetricAlgorithmCreateFromNameCall extends SymmetricAlgorithm, CryptoAlgorithmCreateFromNameCall {
152-
string algName;
153-
SymmetricAlgorithmCreateFromNameCall() {
154-
(
155-
this.getObjectName() = algName or
156-
this.getObjectName() = "system.security.cryptography." + algName or
157-
this.getObjectName() = "system.security.cryptography.symmetricalgorithm." + algName
158-
) and
159-
isSymmetricAlgorithm(algName)
160-
}
161+
class SymmetricAlgorithmCreateFromNameCall extends SymmetricAlgorithm,
162+
CryptoAlgorithmCreateFromNameCall
163+
{
164+
string algName;
161165

162-
override string getName() {
163-
result = algName
166+
SymmetricAlgorithmCreateFromNameCall() {
167+
(
168+
this.getObjectName() = algName or
169+
this.getObjectName() = "system.security.cryptography." + algName or
170+
this.getObjectName() = "system.security.cryptography.symmetricalgorithm." + algName
171+
) and
172+
isSymmetricAlgorithm(algName)
164173
}
174+
175+
override string getName() { result = algName }
165176
}
166177

167178
class CipherBlockStringConstExpr extends BlockMode {
168-
string modeName;
179+
string modeName;
180+
169181
CipherBlockStringConstExpr() {
170-
exists(StringConstExpr s |
171-
s = this.asExpr().getExpr() and
172-
modeName = s.getValueString().toLowerCase() and
173-
isCipherBlockModeAlgorithm(modeName)
182+
exists(StringConstExpr s |
183+
s = this.asExpr().getExpr() and
184+
modeName = s.getValueString().toLowerCase() and
185+
isCipherBlockModeAlgorithm(modeName)
174186
)
175187
}
176-
override string getName() {
177-
result = modeName
178-
}
188+
189+
override string getName() { result = modeName }
179190
}
180191

181192
class CipherBlockModeEnum extends BlockMode {
182-
string modeName;
193+
string modeName;
194+
183195
CipherBlockModeEnum() {
184-
exists(API::Node node |
185-
node =
196+
exists(API::Node node |
197+
node =
186198
API::getTopLevelMember("system")
187199
.getMember("security")
188200
.getMember("cryptography")
189201
.getMember("ciphermode")
190202
.getMember(modeName) and
191-
this = node.asSource() and
192-
isCipherBlockModeAlgorithm(modeName)
203+
this = node.asSource() and
204+
isCipherBlockModeAlgorithm(modeName)
193205
)
194206
}
195-
override string getName() {
196-
result = modeName
197-
}
198-
}
207+
208+
override string getName() { result = modeName }
209+
}

0 commit comments

Comments
 (0)