Skip to content

Commit 967308f

Browse files
committed
Change InsecureTrustManagerConfiguration to DataFlow
1 parent c105d71 commit 967308f

File tree

3 files changed

+23
-20
lines changed

3 files changed

+23
-20
lines changed

java/ql/lib/semmle/code/java/security/InsecureTrustManagerQuery.qll

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,24 @@
22

33
import java
44
import semmle.code.java.dataflow.FlowSources
5-
import semmle.code.java.security.Encryption
65
import semmle.code.java.security.InsecureTrustManager
76

87
/**
98
* A configuration to model the flow of an insecure `TrustManager`
109
* to the initialization of an SSL context.
1110
*/
12-
class InsecureTrustManagerConfiguration extends TaintTracking::Configuration {
11+
class InsecureTrustManagerConfiguration extends DataFlow::Configuration {
1312
InsecureTrustManagerConfiguration() { this = "InsecureTrustManagerConfiguration" }
1413

1514
override predicate isSource(DataFlow::Node source) {
1615
source instanceof InsecureTrustManagerSource
1716
}
1817

1918
override predicate isSink(DataFlow::Node sink) { sink instanceof InsecureTrustManagerSink }
19+
20+
override predicate allowImplicitRead(DataFlow::Node node, DataFlow::Content c) {
21+
(this.isSink(node) or this.isAdditionalFlowStep(node, _)) and
22+
node.getType() instanceof Array and
23+
c instanceof DataFlow::ArrayContent
24+
}
2025
}

java/ql/test/query-tests/security/CWE-295/InsecureTrustManager/InsecureTrustManagerTest.java

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ private static void directInsecureTrustManagerCall()
121121
throws NoSuchAlgorithmException, KeyManagementException {
122122
SSLContext context = SSLContext.getInstance("TLS");
123123
TrustManager[] trustManager = new TrustManager[] {new InsecureTrustManager()};
124-
context.init(null, trustManager, null); // $ hasTaintFlow
124+
context.init(null, trustManager, null); // $ hasValueFlow
125125
}
126126

127127
private static void namedVariableFlagDirectInsecureTrustManagerCall()
@@ -145,7 +145,7 @@ private static void noNamedVariableFlagDirectInsecureTrustManagerCall()
145145
if (SOME_NAME_THAT_IS_NOT_A_FLAG_NAME) {
146146
SSLContext context = SSLContext.getInstance("TLS");
147147
TrustManager[] trustManager = new TrustManager[] {new InsecureTrustManager()};
148-
context.init(null, trustManager, null); // $ hasTaintFlow
148+
context.init(null, trustManager, null); // $ hasValueFlow
149149
}
150150
}
151151

@@ -177,7 +177,7 @@ private static void noStringLiteralFlagDirectInsecureTrustManagerCall()
177177
if (Boolean.parseBoolean(System.getProperty("SOME_NAME_THAT_IS_NOT_A_FLAG_NAME"))) {
178178
SSLContext context = SSLContext.getInstance("TLS");
179179
TrustManager[] trustManager = new TrustManager[] {new InsecureTrustManager()};
180-
context.init(null, trustManager, null); // $ hasTaintFlow
180+
context.init(null, trustManager, null); // $ hasValueFlow
181181
}
182182
}
183183

@@ -209,7 +209,7 @@ private static void noMethodAccessFlagDirectInsecureTrustManagerCall()
209209
if (is42TheAnswerForEverything()) {
210210
SSLContext context = SSLContext.getInstance("TLS");
211211
TrustManager[] trustManager = new TrustManager[] {new InsecureTrustManager()};
212-
context.init(null, trustManager, null); // $ hasTaintFlow
212+
context.init(null, trustManager, null); // $ hasValueFlow
213213
}
214214
}
215215

@@ -226,7 +226,7 @@ private static void isEqualsIgnoreCaseDirectInsecureTrustManagerCall()
226226
if (schemaFromHttpRequest.equalsIgnoreCase("https")) {
227227
SSLContext context = SSLContext.getInstance("TLS");
228228
TrustManager[] trustManager = new TrustManager[] {new InsecureTrustManager()};
229-
context.init(null, trustManager, null); // $ hasTaintFlow
229+
context.init(null, trustManager, null); // $ hasValueFlow
230230
}
231231
}
232232

@@ -244,7 +244,7 @@ private static void noIsEqualsIgnoreCaseDirectInsecureTrustManagerCall()
244244
if (!schemaFromHttpRequest.equalsIgnoreCase("https")) {
245245
SSLContext context = SSLContext.getInstance("TLS");
246246
TrustManager[] trustManager = new TrustManager[] {new InsecureTrustManager()};
247-
context.init(null, trustManager, null); // $ hasTaintFlow
247+
context.init(null, trustManager, null); // $ hasValueFlow
248248
}
249249
}
250250

@@ -264,7 +264,7 @@ private static void namedVariableFlagNOTGuardingDirectInsecureTrustManagerCall()
264264

265265
SSLContext context = SSLContext.getInstance("TLS");
266266
TrustManager[] trustManager = new TrustManager[] {new InsecureTrustManager()};
267-
context.init(null, trustManager, null); // $ hasTaintFlow
267+
context.init(null, trustManager, null); // $ hasValueFlow
268268

269269
}
270270

@@ -276,7 +276,7 @@ private static void noNamedVariableFlagNOTGuardingDirectInsecureTrustManagerCall
276276

277277
SSLContext context = SSLContext.getInstance("TLS");
278278
TrustManager[] trustManager = new TrustManager[] {new InsecureTrustManager()};
279-
context.init(null, trustManager, null); // $ hasTaintFlow
279+
context.init(null, trustManager, null); // $ hasValueFlow
280280

281281
}
282282

@@ -288,7 +288,7 @@ private static void stringLiteralFlagNOTGuardingDirectInsecureTrustManagerCall()
288288

289289
SSLContext context = SSLContext.getInstance("TLS");
290290
TrustManager[] trustManager = new TrustManager[] {new InsecureTrustManager()};
291-
context.init(null, trustManager, null); // $ hasTaintFlow
291+
context.init(null, trustManager, null); // $ hasValueFlow
292292

293293
}
294294

@@ -300,7 +300,7 @@ private static void noStringLiteralFlagNOTGuardingDirectInsecureTrustManagerCall
300300

301301
SSLContext context = SSLContext.getInstance("TLS");
302302
TrustManager[] trustManager = new TrustManager[] {new InsecureTrustManager()};
303-
context.init(null, trustManager, null); // $ hasTaintFlow
303+
context.init(null, trustManager, null); // $ hasValueFlow
304304

305305
}
306306

@@ -312,7 +312,7 @@ private static void methodAccessFlagNOTGuardingDirectInsecureTrustManagerCall()
312312

313313
SSLContext context = SSLContext.getInstance("TLS");
314314
TrustManager[] trustManager = new TrustManager[] {new InsecureTrustManager()};
315-
context.init(null, trustManager, null); // $ hasTaintFlow
315+
context.init(null, trustManager, null); // $ hasValueFlow
316316

317317
}
318318

@@ -324,7 +324,7 @@ private static void noMethodAccessFlagNOTGuardingDirectInsecureTrustManagerCall(
324324

325325
SSLContext context = SSLContext.getInstance("TLS");
326326
TrustManager[] trustManager = new TrustManager[] {new InsecureTrustManager()};
327-
context.init(null, trustManager, null); // $ hasTaintFlow
327+
context.init(null, trustManager, null); // $ hasValueFlow
328328
}
329329

330330
private static void isEqualsIgnoreCaseNOTGuardingDirectInsecureTrustManagerCall()
@@ -336,7 +336,7 @@ private static void isEqualsIgnoreCaseNOTGuardingDirectInsecureTrustManagerCall(
336336

337337
SSLContext context = SSLContext.getInstance("TLS");
338338
TrustManager[] trustManager = new TrustManager[] {new InsecureTrustManager()};
339-
context.init(null, trustManager, null); // $ hasTaintFlow
339+
context.init(null, trustManager, null); // $ hasValueFlow
340340

341341
}
342342

@@ -349,14 +349,14 @@ private static void noIsEqualsIgnoreCaseNOTGuardingDirectInsecureTrustManagerCal
349349

350350
SSLContext context = SSLContext.getInstance("TLS");
351351
TrustManager[] trustManager = new TrustManager[] {new InsecureTrustManager()};
352-
context.init(null, trustManager, null); // $ hasTaintFlow
352+
context.init(null, trustManager, null); // $ hasValueFlow
353353

354354
}
355355

356356
private static void disableTrustManager()
357357
throws NoSuchAlgorithmException, KeyManagementException {
358358
SSLContext context = SSLContext.getInstance("TLS");
359359
TrustManager[] trustManager = new TrustManager[] {new InsecureTrustManager()};
360-
context.init(null, trustManager, null); // $ hasTaintFlow
360+
context.init(null, trustManager, null); // $ hasValueFlow
361361
}
362362
}

java/ql/test/query-tests/security/CWE-295/InsecureTrustManager/InsecureTrustManagerTest.ql

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,7 @@ import semmle.code.java.security.InsecureTrustManagerQuery
33
import TestUtilities.InlineFlowTest
44

55
class InsecureTrustManagerTest extends InlineFlowTest {
6-
override DataFlow::Configuration getValueFlowConfig() { none() }
7-
8-
override TaintTracking::Configuration getTaintFlowConfig() {
6+
override DataFlow::Configuration getValueFlowConfig() {
97
result = any(InsecureTrustManagerConfiguration c)
108
}
119
}

0 commit comments

Comments
 (0)