@@ -6,9 +6,11 @@ import semmle.code.java.security.UnsafeCertTrust
66import semmle.code.java.security.Encryption
77
88/**
9+ * DEPRECATED: Use `SslEndpointIdentificationFlow` instead.
10+ *
911 * A taint flow configuration for SSL connections created without a proper certificate trust configuration.
1012 */
11- class SslEndpointIdentificationFlowConfig extends TaintTracking:: Configuration {
13+ deprecated class SslEndpointIdentificationFlowConfig extends TaintTracking:: Configuration {
1214 SslEndpointIdentificationFlowConfig ( ) { this = "SslEndpointIdentificationFlowConfig" }
1315
1416 override predicate isSource ( DataFlow:: Node source ) { source instanceof SslConnectionInit }
@@ -20,30 +22,38 @@ class SslEndpointIdentificationFlowConfig extends TaintTracking::Configuration {
2022 }
2123}
2224
25+ private module SslEndpointIdentificationFlowConfig implements DataFlow:: ConfigSig {
26+ predicate isSource ( DataFlow:: Node source ) { source instanceof SslConnectionInit }
27+
28+ predicate isSink ( DataFlow:: Node sink ) { sink instanceof SslConnectionCreation }
29+
30+ predicate isBarrier ( DataFlow:: Node sanitizer ) { sanitizer instanceof SslUnsafeCertTrustSanitizer }
31+ }
32+
33+ module SslEndpointIdentificationFlow = TaintTracking:: Global< SslEndpointIdentificationFlowConfig > ;
34+
2335/**
2436 * An SSL object that was assigned a safe `SSLParameters` object and can be considered safe.
2537 */
2638private class SslConnectionWithSafeSslParameters extends SslUnsafeCertTrustSanitizer {
2739 SslConnectionWithSafeSslParameters ( ) {
28- exists ( SafeSslParametersFlowConfig config , DataFlow:: Node safe , DataFlow:: Node sanitizer |
29- config . hasFlowTo ( safe ) and
40+ exists ( DataFlow:: Node safe , DataFlow:: Node sanitizer |
41+ SafeSslParametersFlow :: flowTo ( safe ) and
3042 sanitizer = DataFlow:: exprNode ( safe .asExpr ( ) .( Argument ) .getCall ( ) .getQualifier ( ) ) and
3143 DataFlow:: localFlow ( sanitizer , this )
3244 )
3345 }
3446}
3547
36- private class SafeSslParametersFlowConfig extends DataFlow2:: Configuration {
37- SafeSslParametersFlowConfig ( ) { this = "SafeSslParametersFlowConfig" }
38-
39- override predicate isSource ( DataFlow:: Node source ) {
48+ private module SafeSslParametersFlowConfig implements DataFlow:: ConfigSig {
49+ predicate isSource ( DataFlow:: Node source ) {
4050 exists ( MethodAccess ma |
4151 ma instanceof SafeSetEndpointIdentificationAlgorithm and
4252 DataFlow:: getInstanceArgument ( ma ) = source .( DataFlow:: PostUpdateNode ) .getPreUpdateNode ( )
4353 )
4454 }
4555
46- override predicate isSink ( DataFlow:: Node sink ) {
56+ predicate isSink ( DataFlow:: Node sink ) {
4757 exists ( MethodAccess ma , RefType t | t instanceof SslSocket or t instanceof SslEngine |
4858 ma .getMethod ( ) .hasName ( "setSSLParameters" ) and
4959 ma .getMethod ( ) .getDeclaringType ( ) .getAnAncestor ( ) = t and
@@ -52,6 +62,8 @@ private class SafeSslParametersFlowConfig extends DataFlow2::Configuration {
5262 }
5363}
5464
65+ private module SafeSslParametersFlow = DataFlow:: Global< SafeSslParametersFlowConfig > ;
66+
5567/**
5668 * A call to `SSLParameters.setEndpointIdentificationAlgorithm` with a non-null and non-empty parameter.
5769 */
0 commit comments