@@ -8,7 +8,6 @@ private import codeql.ruby.Concepts
88private import codeql.ruby.ApiGraphs
99private import codeql.ruby.DataFlow
1010private import codeql.ruby.frameworks.Core
11- private import codeql.ruby.dataflow.internal.DataFlowImplForHttpClientLibraries as DataFlowImplForHttpClientLibraries
1211
1312/**
1413 * 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 {
4645 override predicate disablesCertificateValidation (
4746 DataFlow:: Node disablingNode , DataFlow:: Node argumentOrigin
4847 ) {
49- any ( OpenUriDisablesCertificateValidationConfiguration config )
50- .hasFlow ( argumentOrigin , disablingNode ) and
48+ OpenUriDisablesCertificateValidationFlow:: flow ( argumentOrigin , disablingNode ) and
5149 disablingNode = this .getCertificateValidationControllingValue ( )
5250 }
5351
@@ -94,28 +92,25 @@ class OpenUriKernelOpenRequest extends Http::Client::Request::Range, DataFlow::C
9492 override predicate disablesCertificateValidation (
9593 DataFlow:: Node disablingNode , DataFlow:: Node argumentOrigin
9694 ) {
97- any ( OpenUriDisablesCertificateValidationConfiguration config )
98- .hasFlow ( argumentOrigin , disablingNode ) and
95+ OpenUriDisablesCertificateValidationFlow:: flow ( argumentOrigin , disablingNode ) and
9996 disablingNode = this .getCertificateValidationControllingValue ( )
10097 }
10198
10299 override string getFramework ( ) { result = "OpenURI" }
103100}
104101
105102/** 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 ) {
113105 source = API:: getTopLevelMember ( "OpenSSL" ) .getMember ( "SSL" ) .getMember ( "VERIFY_NONE" ) .asSource ( )
114106 }
115107
116- override predicate isSink ( DataFlow:: Node sink ) {
108+ predicate isSink ( DataFlow:: Node sink ) {
117109 sink = any ( OpenUriRequest req ) .getCertificateValidationControllingValue ( )
118110 or
119111 sink = any ( OpenUriKernelOpenRequest req ) .getCertificateValidationControllingValue ( )
120112 }
121113}
114+
115+ private module OpenUriDisablesCertificateValidationFlow =
116+ DataFlow:: Global< OpenUriDisablesCertificateValidationConfig > ;
0 commit comments