@@ -6,7 +6,6 @@ private import codeql.ruby.AST
66private import codeql.ruby.Concepts
77private import codeql.ruby.ApiGraphs
88private import codeql.ruby.DataFlow
9- private import codeql.ruby.dataflow.internal.DataFlowImplForHttpClientLibraries as DataFlowImplForHttpClientLibraries
109
1110/**
1211 * A call that makes an HTTP request using `HTTPClient`.
@@ -65,26 +64,23 @@ class HttpClientRequest extends Http::Client::Request::Range, DataFlow::CallNode
6564 override predicate disablesCertificateValidation (
6665 DataFlow:: Node disablingNode , DataFlow:: Node argumentOrigin
6766 ) {
68- any ( HttpClientDisablesCertificateValidationConfiguration config )
69- .hasFlow ( argumentOrigin , disablingNode ) and
67+ HttpClientDisablesCertificateValidationFlow:: flow ( argumentOrigin , disablingNode ) and
7068 disablingNode = this .getCertificateValidationControllingValue ( )
7169 }
7270
7371 override string getFramework ( ) { result = "HTTPClient" }
7472}
7573
7674/** A configuration to track values that can disable certificate validation for HttpClient. */
77- private class HttpClientDisablesCertificateValidationConfiguration extends DataFlowImplForHttpClientLibraries:: Configuration
78- {
79- HttpClientDisablesCertificateValidationConfiguration ( ) {
80- this = "HttpClientDisablesCertificateValidationConfiguration"
81- }
82-
83- override predicate isSource ( DataFlow:: Node source ) {
75+ private module HttpClientDisablesCertificateValidationConfig implements DataFlow:: ConfigSig {
76+ predicate isSource ( DataFlow:: Node source ) {
8477 source = API:: getTopLevelMember ( "OpenSSL" ) .getMember ( "SSL" ) .getMember ( "VERIFY_NONE" ) .asSource ( )
8578 }
8679
87- override predicate isSink ( DataFlow:: Node sink ) {
80+ predicate isSink ( DataFlow:: Node sink ) {
8881 sink = any ( HttpClientRequest req ) .getCertificateValidationControllingValue ( )
8982 }
9083}
84+
85+ private module HttpClientDisablesCertificateValidationFlow =
86+ DataFlow:: Global< HttpClientDisablesCertificateValidationConfig > ;
0 commit comments