@@ -186,37 +186,25 @@ module ServerSideRequestForgery {
186186
187187 private predicate uri_validator ( DataFlow:: GuardNode g , ControlFlowNode node , boolean branch ) {
188188 exists ( DataFlow:: CallCfgNode call , string funcs |
189- funcs in [ "in_domain" , "in_azure_keyvault_domain" , "in_azure_storage_domain" ]
190- |
189+ funcs in [ "in_domain" , "in_azure_keyvault_domain" , "in_azure_storage_domain" ] and
191190 call = API:: moduleImport ( "AntiSSRF" ) .getMember ( "URIValidator" ) .getMember ( funcs ) .getACall ( ) and
192- call .getArg ( 0 ) .asCfgNode ( ) = node and
193- (
194- // validator used in a comparison
195- exists ( CompareNode cn , Cmpop op , Node n | cn = g and n .getALocalSource ( ) = call |
196- (
197- // validator == true or validator == false or validator is True or validator is False
198- ( op instanceof Eq or op instanceof Is ) and
199- exists ( ControlFlowNode l , boolean bool |
200- l .getNode ( ) .( BooleanLiteral ) .booleanValue ( ) = bool and
201- bool in [ true , false ] and
202- branch = bool and
203- cn .operands ( n .asCfgNode ( ) , op , l )
204- )
205- or
206- // validator != false or validator != true or validator is not True or validator is not False
207- ( op instanceof NotEq or op instanceof IsNot ) and
208- exists ( ControlFlowNode l , boolean bool |
209- l .getNode ( ) .( BooleanLiteral ) .booleanValue ( ) = bool and
210- bool in [ true , false ] and
211- branch = bool .booleanNot ( ) and
212- cn .operands ( n .asCfgNode ( ) , op , l )
213- )
214- )
215- )
191+ call .getArg ( 0 ) .asCfgNode ( ) = node
192+ |
193+ // validator call directly (e.g., if URIValidator.in_domain(...) )
194+ g = call .asCfgNode ( ) and
195+ branch = true
196+ or
197+ // validator used in a comparison
198+ exists ( Cmpop op , Node n , ControlFlowNode l |
199+ n .getALocalSource ( ) = call and g .( CompareNode ) .operands ( n .asCfgNode ( ) , op , l )
200+ |
201+ // validator == true or validator == false or validator is True or validator is False
202+ ( op instanceof Eq or op instanceof Is ) and
203+ branch = l .getNode ( ) .( BooleanLiteral ) .booleanValue ( )
216204 or
217- // validator call directly (e.g., if URIValidator.in_domain(...) )
218- g = call . asCfgNode ( ) and
219- branch = true
205+ // validator != false or validator != true or validator is not True or validator is not False
206+ ( op instanceof NotEq or op instanceof IsNot ) and
207+ branch = l . getNode ( ) . ( BooleanLiteral ) . booleanValue ( ) . booleanNot ( )
220208 )
221209 )
222210 }
0 commit comments