File tree Expand file tree Collapse file tree 2 files changed +53
-0
lines changed
cpp/ql/src/semmle/code/cpp Expand file tree Collapse file tree 2 files changed +53
-0
lines changed Original file line number Diff line number Diff line change 1+ /**
2+ * Provides a class for modeling functions that return data from potentially untrusted sources. To use
3+ * this QL library, create a QL class extending `DataFlowFunction` with a
4+ * characteristic predicate that selects the function or set of functions you
5+ * are modeling. Within that class, override the predicates provided by
6+ * `RemoteFlowFunction` to match the flow within that function.
7+ */
8+
9+ import cpp
10+ import FunctionInputsAndOutputs
11+ import semmle.code.cpp.models.Models
12+
13+ /**
14+ * A library function which returns data read from a network connection.
15+ */
16+ abstract class RemoteFlowFunction extends Function {
17+ abstract predicate hasFlowSource ( FunctionOutput output ) ;
18+ }
Original file line number Diff line number Diff line change 1+ /**
2+ * Provides classes representing various flow sources for taint tracking.
3+ */
4+
5+ import cpp
6+ import semmle.code.cpp.ir.dataflow.DataFlow
7+ private import semmle.code.cpp.ir.IR
8+ import semmle.code.cpp.models.interfaces.FlowSource
9+
10+ /** A data flow source of remote user input. */
11+ abstract class RemoteFlowSource extends DataFlow:: Node {
12+ }
13+
14+ class FileDescriptorTaintedReturnSource extends RemoteFlowSource {
15+ FileDescriptorTaintedReturnSource ( ) {
16+ exists ( RemoteFlowFunction func , CallInstruction instr , FunctionOutput output |
17+ asInstruction ( ) = instr and
18+ instr .getStaticCallTarget ( ) = func and
19+ func .hasFlowSource ( output ) and
20+ output .isReturnValue ( )
21+ )
22+ }
23+ }
24+
25+ class FileTaintedParameterSource extends RemoteFlowSource {
26+ FileTaintedParameterSource ( ) {
27+ exists ( RemoteFlowFunction func , ReadSideEffectInstruction instr , FunctionOutput output |
28+ asInstruction ( ) = instr and
29+ instr .getPrimaryInstruction ( ) .( CallInstruction ) .getStaticCallTarget ( ) = func and
30+ func .hasFlowSource ( output ) and
31+ output .isParameterDeref ( instr .getIndex ( ) )
32+ )
33+ }
34+ }
35+
You can’t perform that action at this time.
0 commit comments