@@ -8,7 +8,6 @@ private import codeql.ruby.Concepts
8
8
private import codeql.ruby.ApiGraphs
9
9
private import codeql.ruby.DataFlow
10
10
private import codeql.ruby.frameworks.Core
11
- private import codeql.ruby.dataflow.internal.DataFlowImplForHttpClientLibraries as DataFlowImplForHttpClientLibraries
12
11
13
12
/**
14
13
* A call that makes an HTTP request using `OpenURI` via `URI.open` or
@@ -46,8 +45,7 @@ class OpenUriRequest extends Http::Client::Request::Range, DataFlow::CallNode {
46
45
override predicate disablesCertificateValidation (
47
46
DataFlow:: Node disablingNode , DataFlow:: Node argumentOrigin
48
47
) {
49
- any ( OpenUriDisablesCertificateValidationConfiguration config )
50
- .hasFlow ( argumentOrigin , disablingNode ) and
48
+ OpenUriDisablesCertificateValidationFlow:: flow ( argumentOrigin , disablingNode ) and
51
49
disablingNode = this .getCertificateValidationControllingValue ( )
52
50
}
53
51
@@ -94,28 +92,25 @@ class OpenUriKernelOpenRequest extends Http::Client::Request::Range, DataFlow::C
94
92
override predicate disablesCertificateValidation (
95
93
DataFlow:: Node disablingNode , DataFlow:: Node argumentOrigin
96
94
) {
97
- any ( OpenUriDisablesCertificateValidationConfiguration config )
98
- .hasFlow ( argumentOrigin , disablingNode ) and
95
+ OpenUriDisablesCertificateValidationFlow:: flow ( argumentOrigin , disablingNode ) and
99
96
disablingNode = this .getCertificateValidationControllingValue ( )
100
97
}
101
98
102
99
override string getFramework ( ) { result = "OpenURI" }
103
100
}
104
101
105
102
/** A configuration to track values that can disable certificate validation for OpenURI. */
106
- private class OpenUriDisablesCertificateValidationConfiguration extends DataFlowImplForHttpClientLibraries:: Configuration
107
- {
108
- OpenUriDisablesCertificateValidationConfiguration ( ) {
109
- this = "OpenUriDisablesCertificateValidationConfiguration"
110
- }
111
-
112
- override predicate isSource ( DataFlow:: Node source ) {
103
+ private module OpenUriDisablesCertificateValidationConfig implements DataFlow:: ConfigSig {
104
+ predicate isSource ( DataFlow:: Node source ) {
113
105
source = API:: getTopLevelMember ( "OpenSSL" ) .getMember ( "SSL" ) .getMember ( "VERIFY_NONE" ) .asSource ( )
114
106
}
115
107
116
- override predicate isSink ( DataFlow:: Node sink ) {
108
+ predicate isSink ( DataFlow:: Node sink ) {
117
109
sink = any ( OpenUriRequest req ) .getCertificateValidationControllingValue ( )
118
110
or
119
111
sink = any ( OpenUriKernelOpenRequest req ) .getCertificateValidationControllingValue ( )
120
112
}
121
113
}
114
+
115
+ private module OpenUriDisablesCertificateValidationFlow =
116
+ DataFlow:: Global< OpenUriDisablesCertificateValidationConfig > ;
0 commit comments