зеркало из https://github.com/github/codeql.git
C++: Filter duplicate (source, sink)-pairs
This commit is contained in:
Родитель
378206ae7d
Коммит
d3cccca7f1
|
@ -48,7 +48,9 @@ class FileFunction extends FunctionWithWrappers {
|
||||||
}
|
}
|
||||||
|
|
||||||
Expr asSourceExpr(DataFlow::Node node) {
|
Expr asSourceExpr(DataFlow::Node node) {
|
||||||
result in [node.asConvertedExpr(), node.asDefiningArgument()]
|
result = node.asConvertedExpr()
|
||||||
|
or
|
||||||
|
result = node.asDefiningArgument()
|
||||||
}
|
}
|
||||||
|
|
||||||
Expr asSinkExpr(DataFlow::Node node) {
|
Expr asSinkExpr(DataFlow::Node node) {
|
||||||
|
@ -79,6 +81,19 @@ class TaintedPathConfiguration extends TaintTracking::Configuration {
|
||||||
override predicate isSanitizer(DataFlow::Node node) {
|
override predicate isSanitizer(DataFlow::Node node) {
|
||||||
node.asExpr().(Call).getTarget().getUnspecifiedType() instanceof ArithmeticType
|
node.asExpr().(Call).getTarget().getUnspecifiedType() instanceof ArithmeticType
|
||||||
}
|
}
|
||||||
|
|
||||||
|
predicate hasFilteredFlowPath(DataFlow::PathNode source, DataFlow::PathNode sink) {
|
||||||
|
this.hasFlowPath(source, sink) and
|
||||||
|
not exists(DataFlow::PathNode source2, DataFlow::PathNode sink2 |
|
||||||
|
this.hasFlowPath(source2, sink2) and
|
||||||
|
asSourceExpr(source.getNode()) = asSourceExpr(source2.getNode()) and
|
||||||
|
asSinkExpr(sink.getNode()) = asSinkExpr(sink2.getNode())
|
||||||
|
|
|
||||||
|
not exists(source.getNode().asConvertedExpr()) and exists(source2.getNode().asConvertedExpr())
|
||||||
|
or
|
||||||
|
not exists(sink.getNode().asConvertedExpr()) and exists(sink2.getNode().asConvertedExpr())
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
from
|
from
|
||||||
|
@ -87,7 +102,7 @@ from
|
||||||
where
|
where
|
||||||
taintedArg = asSinkExpr(sinkNode.getNode()) and
|
taintedArg = asSinkExpr(sinkNode.getNode()) and
|
||||||
fileFunction.outermostWrapperFunctionCall(taintedArg, callChain) and
|
fileFunction.outermostWrapperFunctionCall(taintedArg, callChain) and
|
||||||
cfg.hasFlowPath(sourceNode, sinkNode) and
|
cfg.hasFilteredFlowPath(sourceNode, sinkNode) and
|
||||||
taintSource = asSourceExpr(sourceNode.getNode()) and
|
taintSource = asSourceExpr(sourceNode.getNode()) and
|
||||||
isUserInput(taintSource, taintCause)
|
isUserInput(taintSource, taintCause)
|
||||||
select taintedArg, sourceNode, sinkNode,
|
select taintedArg, sourceNode, sinkNode,
|
||||||
|
|
|
@ -8,4 +8,3 @@ nodes
|
||||||
subpaths
|
subpaths
|
||||||
#select
|
#select
|
||||||
| CWE23_Relative_Path_Traversal__char_console_fopen_11.cpp:77:23:77:26 | data | CWE23_Relative_Path_Traversal__char_console_fopen_11.cpp:55:27:55:38 | fgets output argument | CWE23_Relative_Path_Traversal__char_console_fopen_11.cpp:77:23:77:26 | data | This argument to a file access function is derived from $@ and then passed to fopen(filename). | CWE23_Relative_Path_Traversal__char_console_fopen_11.cpp:55:27:55:38 | ... + ... | user input (fgets) |
|
| CWE23_Relative_Path_Traversal__char_console_fopen_11.cpp:77:23:77:26 | data | CWE23_Relative_Path_Traversal__char_console_fopen_11.cpp:55:27:55:38 | fgets output argument | CWE23_Relative_Path_Traversal__char_console_fopen_11.cpp:77:23:77:26 | data | This argument to a file access function is derived from $@ and then passed to fopen(filename). | CWE23_Relative_Path_Traversal__char_console_fopen_11.cpp:55:27:55:38 | ... + ... | user input (fgets) |
|
||||||
| CWE23_Relative_Path_Traversal__char_console_fopen_11.cpp:77:23:77:26 | data | CWE23_Relative_Path_Traversal__char_console_fopen_11.cpp:55:27:55:38 | fgets output argument | CWE23_Relative_Path_Traversal__char_console_fopen_11.cpp:77:23:77:26 | data indirection | This argument to a file access function is derived from $@ and then passed to fopen(filename). | CWE23_Relative_Path_Traversal__char_console_fopen_11.cpp:55:27:55:38 | ... + ... | user input (fgets) |
|
|
||||||
|
|
|
@ -26,12 +26,6 @@ nodes
|
||||||
subpaths
|
subpaths
|
||||||
#select
|
#select
|
||||||
| test.c:17:11:17:18 | fileName | test.c:9:23:9:26 | argv | test.c:17:11:17:18 | fileName | This argument to a file access function is derived from $@ and then passed to fopen(filename). | test.c:9:23:9:26 | argv | user input (argv) |
|
| test.c:17:11:17:18 | fileName | test.c:9:23:9:26 | argv | test.c:17:11:17:18 | fileName | This argument to a file access function is derived from $@ and then passed to fopen(filename). | test.c:9:23:9:26 | argv | user input (argv) |
|
||||||
| test.c:17:11:17:18 | fileName | test.c:9:23:9:26 | argv | test.c:17:11:17:18 | fileName indirection | This argument to a file access function is derived from $@ and then passed to fopen(filename). | test.c:9:23:9:26 | argv | user input (argv) |
|
|
||||||
| test.c:32:11:32:18 | fileName | test.c:31:22:31:25 | argv | test.c:32:11:32:18 | fileName | This argument to a file access function is derived from $@ and then passed to fopen(filename). | test.c:31:22:31:25 | argv | user input (argv) |
|
| test.c:32:11:32:18 | fileName | test.c:31:22:31:25 | argv | test.c:32:11:32:18 | fileName | This argument to a file access function is derived from $@ and then passed to fopen(filename). | test.c:31:22:31:25 | argv | user input (argv) |
|
||||||
| test.c:32:11:32:18 | fileName | test.c:31:22:31:25 | argv | test.c:32:11:32:18 | fileName indirection | This argument to a file access function is derived from $@ and then passed to fopen(filename). | test.c:31:22:31:25 | argv | user input (argv) |
|
|
||||||
| test.c:38:11:38:18 | fileName | test.c:37:17:37:24 | fileName | test.c:38:11:38:18 | fileName indirection | This argument to a file access function is derived from $@ and then passed to fopen(filename). | test.c:37:17:37:24 | fileName | user input (scanf) |
|
| test.c:38:11:38:18 | fileName | test.c:37:17:37:24 | fileName | test.c:38:11:38:18 | fileName indirection | This argument to a file access function is derived from $@ and then passed to fopen(filename). | test.c:37:17:37:24 | fileName | user input (scanf) |
|
||||||
| test.c:38:11:38:18 | fileName | test.c:37:17:37:24 | scanf output argument | test.c:38:11:38:18 | fileName indirection | This argument to a file access function is derived from $@ and then passed to fopen(filename). | test.c:37:17:37:24 | fileName | user input (scanf) |
|
|
||||||
| test.c:44:11:44:18 | fileName | test.c:43:17:43:24 | fileName | test.c:44:11:44:18 | fileName | This argument to a file access function is derived from $@ and then passed to fopen(filename). | test.c:43:17:43:24 | fileName | user input (scanf) |
|
| test.c:44:11:44:18 | fileName | test.c:43:17:43:24 | fileName | test.c:44:11:44:18 | fileName | This argument to a file access function is derived from $@ and then passed to fopen(filename). | test.c:43:17:43:24 | fileName | user input (scanf) |
|
||||||
| test.c:44:11:44:18 | fileName | test.c:43:17:43:24 | fileName | test.c:44:11:44:18 | fileName indirection | This argument to a file access function is derived from $@ and then passed to fopen(filename). | test.c:43:17:43:24 | fileName | user input (scanf) |
|
|
||||||
| test.c:44:11:44:18 | fileName | test.c:43:17:43:24 | scanf output argument | test.c:44:11:44:18 | fileName | This argument to a file access function is derived from $@ and then passed to fopen(filename). | test.c:43:17:43:24 | fileName | user input (scanf) |
|
|
||||||
| test.c:44:11:44:18 | fileName | test.c:43:17:43:24 | scanf output argument | test.c:44:11:44:18 | fileName indirection | This argument to a file access function is derived from $@ and then passed to fopen(filename). | test.c:43:17:43:24 | fileName | user input (scanf) |
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче