Skip to content

Commit 7fb7527

Browse files
author
Esben Sparre Andreasen
committed
JS: introduce persistent read/write pairs as a taint step
1 parent 75842fe commit 7fb7527

File tree

2 files changed

+39
-0
lines changed

2 files changed

+39
-0
lines changed

javascript/ql/src/semmle/javascript/Concepts.qll

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,3 +65,27 @@ abstract class DatabaseAccess extends DataFlow::Node {
6565
/** Gets an argument to this database access that is interpreted as a query. */
6666
abstract DataFlow::Node getAQueryArgument();
6767
}
68+
69+
/**
70+
* A data flow node that reads persistent data.
71+
*/
72+
abstract class PersistentReadAccess extends DataFlow::Node {
73+
74+
/**
75+
* Gets the corresponding persistent write, if any.
76+
*/
77+
abstract PersistentWriteAccess getAWrite();
78+
79+
}
80+
81+
/**
82+
* A data flow node that writes persistent data.
83+
*/
84+
abstract class PersistentWriteAccess extends DataFlow::Node {
85+
86+
/**
87+
* Gets the data flow node corresponding to the written value.
88+
*/
89+
abstract DataFlow::Node getValue();
90+
91+
}

javascript/ql/src/semmle/javascript/dataflow/TaintTracking.qll

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -232,6 +232,21 @@ module TaintTracking {
232232
}
233233
}
234234

235+
private class StorageTaintStep extends AdditionalTaintStep {
236+
237+
PersistentReadAccess read;
238+
239+
StorageTaintStep() {
240+
this = read
241+
}
242+
243+
override predicate step(DataFlow::Node pred, DataFlow::Node succ) {
244+
pred = read.getAWrite().getValue() and
245+
succ = read
246+
}
247+
248+
}
249+
235250
/**
236251
* A taint propagating data flow edge caused by the builtin array functions.
237252
*/

0 commit comments

Comments
 (0)