mirror of
https://github.com/github/codeql.git
synced 2026-04-29 10:45:15 +02:00
JS: introduce persistent read/write pairs as a taint step
This commit is contained in:
@@ -65,3 +65,27 @@ abstract class DatabaseAccess extends DataFlow::Node {
|
||||
/** Gets an argument to this database access that is interpreted as a query. */
|
||||
abstract DataFlow::Node getAQueryArgument();
|
||||
}
|
||||
|
||||
/**
|
||||
* A data flow node that reads persistent data.
|
||||
*/
|
||||
abstract class PersistentReadAccess extends DataFlow::Node {
|
||||
|
||||
/**
|
||||
* Gets the corresponding persistent write, if any.
|
||||
*/
|
||||
abstract PersistentWriteAccess getAWrite();
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* A data flow node that writes persistent data.
|
||||
*/
|
||||
abstract class PersistentWriteAccess extends DataFlow::Node {
|
||||
|
||||
/**
|
||||
* Gets the data flow node corresponding to the written value.
|
||||
*/
|
||||
abstract DataFlow::Node getValue();
|
||||
|
||||
}
|
||||
|
||||
@@ -232,6 +232,21 @@ module TaintTracking {
|
||||
}
|
||||
}
|
||||
|
||||
private class StorageTaintStep extends AdditionalTaintStep {
|
||||
|
||||
PersistentReadAccess read;
|
||||
|
||||
StorageTaintStep() {
|
||||
this = read
|
||||
}
|
||||
|
||||
override predicate step(DataFlow::Node pred, DataFlow::Node succ) {
|
||||
pred = read.getAWrite().getValue() and
|
||||
succ = read
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* A taint propagating data flow edge caused by the builtin array functions.
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user