source/interprocedural_analyses/taint/missingFlow.ml (61 lines of code) (raw):

(* * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. *) open Ast open Expression open Domains let unknown_callee ~location ~call = let callee = match call with | Expression.Call { callee; _ } -> callee | _ -> Node.create ~location:(Location.strip_module location) call in Interprocedural.Target.create_function (Reference.create (Format.asprintf "%a:%a" Location.WithModule.pp location Expression.pp callee)) let register_unknown_callee_model callable = (* Add a model with sinks on *args and **kwargs. *) let sink_leaf = BackwardTaint.singleton (Sinks.NamedSink "UnknownCallee") Frame.initial |> BackwardState.Tree.create_leaf in let sink_taint = BackwardState.assign ~root:(AccessPath.Root.StarParameter { position = 0 }) ~path:[] sink_leaf BackwardState.empty |> BackwardState.assign ~root:(AccessPath.Root.StarStarParameter { excluded = [] }) ~path:[] sink_leaf in (* Add taint-in-taint-out for all parameters. *) let local_return = BackwardTaint.singleton Sinks.LocalReturn Frame.initial |> BackwardState.Tree.create_leaf in let taint_in_taint_out = BackwardState.assign ~root:(AccessPath.Root.StarParameter { position = 0 }) ~path:[] local_return BackwardState.empty |> BackwardState.assign ~root:(AccessPath.Root.StarStarParameter { excluded = [] }) ~path:[] local_return in Interprocedural.FixpointState.add_predefined Interprocedural.FixpointState.Epoch.predefined callable (Interprocedural.AnalysisResult.make_model TaintResult.kind { forward = Model.Forward.empty; backward = { sink_taint; taint_in_taint_out }; sanitizers = Model.Sanitizers.empty; modes = Model.ModeSet.singleton Model.Mode.SkipAnalysis; })