Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit e77ba15

Browse files
committed
Ruby: configsig rb/http-to-file-access
1 parent f760baa commit e77ba15

2 files changed

Lines changed: 20 additions & 6 deletions

File tree

ruby/ql/lib/codeql/ruby/security/HttpToFileAccessQuery.qll

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,18 @@
22
* Provides a taint tracking configuration for reasoning about writing user-controlled data to files.
33
*
44
* Note, for performance reasons: only import this file if
5-
* `HttpToFileAccess::Configuration` is needed, otherwise
5+
* `HttpToFileAccessFlow` is needed, otherwise
66
* `HttpToFileAccessCustomizations` should be imported instead.
77
*/
88

99
private import HttpToFileAccessCustomizations::HttpToFileAccess
1010

1111
/**
1212
* A taint tracking configuration for writing user-controlled data to files.
13+
*
14+
* DEPRECATED: Use `HttpToFileAccessFlow` instead
1315
*/
14-
class Configuration extends TaintTracking::Configuration {
16+
deprecated class Configuration extends TaintTracking::Configuration {
1517
Configuration() { this = "HttpToFileAccess" }
1618

1719
override predicate isSource(DataFlow::Node source) { source instanceof Source }
@@ -23,3 +25,16 @@ class Configuration extends TaintTracking::Configuration {
2325
node instanceof Sanitizer
2426
}
2527
}
28+
29+
private module Config implements DataFlow::ConfigSig {
30+
predicate isSource(DataFlow::Node source) { source instanceof Source }
31+
32+
predicate isSink(DataFlow::Node sink) { sink instanceof Sink }
33+
34+
predicate isBarrier(DataFlow::Node node) { node instanceof Sanitizer }
35+
}
36+
37+
/**
38+
* Taint-tracking for writing user-controlled data to files.
39+
*/
40+
module HttpToFileAccessFlow = TaintTracking::Global<Config>;

ruby/ql/src/queries/security/cwe-912/HttpToFileAccess.ql

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,10 @@
1212
*/
1313

1414
import codeql.ruby.AST
15-
import codeql.ruby.DataFlow
16-
import codeql.ruby.DataFlow::DataFlow::PathGraph
1715
import codeql.ruby.security.HttpToFileAccessQuery
16+
import HttpToFileAccessFlow::PathGraph
1817

19-
from Configuration cfg, DataFlow::PathNode source, DataFlow::PathNode sink
20-
where cfg.hasFlowPath(source, sink)
18+
from HttpToFileAccessFlow::PathNode source, HttpToFileAccessFlow::PathNode sink
19+
where HttpToFileAccessFlow::flowPath(source, sink)
2120
select sink.getNode(), source, sink, "Write to file system depends on $@.", source.getNode(),
2221
"untrusted data"

0 commit comments

Comments
 (0)