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

Skip to content

Commit ade93e6

Browse files
committed
move the if(!x) from DataFLow to TaintTracking
1 parent 1f7dda7 commit ade93e6

4 files changed

Lines changed: 24 additions & 6 deletions

File tree

javascript/ql/src/Security/CWE-400/PrototypePollutionUtility.ql

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -356,7 +356,8 @@ class PropNameTracking extends DataFlow::Configuration {
356356
node instanceof InstanceOfGuard or
357357
node instanceof TypeofGuard or
358358
node instanceof BlacklistInclusionGuard or
359-
node instanceof WhitelistInclusionGuard
359+
node instanceof WhitelistInclusionGuard or
360+
node instanceof DataFlow::VarAccessBarrierGuard
360361
}
361362
}
362363

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

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1481,8 +1481,11 @@ private class AdditionalBarrierGuardCall extends AdditionalBarrierGuardNode, Dat
14811481
override predicate appliesTo(Configuration cfg) { f.appliesTo(cfg) }
14821482
}
14831483

1484-
/** A check of the `if(x)`, which sanitizes `x` in its "else" branch. */
1485-
private class VarAccessBarrierGuard extends AdditionalBarrierGuardNode, DataFlow::Node {
1484+
/**
1485+
* A check of the `if(x)`, which sanitizes `x` in its "else" branch.
1486+
* Can be added to a `isBarrierGuard` in a configuration to add the sanitization.
1487+
*/
1488+
class VarAccessBarrierGuard extends BarrierGuardNode, DataFlow::Node {
14861489
VarAccess var;
14871490

14881491
VarAccessBarrierGuard() {
@@ -1492,6 +1495,4 @@ private class VarAccessBarrierGuard extends AdditionalBarrierGuardNode, DataFlow
14921495
override predicate blocks(boolean outcome, Expr e) {
14931496
var = e and outcome = false
14941497
}
1495-
1496-
override predicate appliesTo(Configuration cfg) { any() }
14971498
}

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

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -914,4 +914,19 @@ module TaintTracking {
914914
DataFlow::localFlowStep(pred, succ) or
915915
any(AdditionalTaintStep s).step(pred, succ)
916916
}
917+
918+
/** A check of the form `if(x)`, which sanitizes `x` in its "else" branch. */
919+
private class VarAccessBarrierGuard extends AdditionalSanitizerGuardNode, DataFlow::Node {
920+
DataFlow::VarAccessBarrierGuard guard;
921+
922+
VarAccessBarrierGuard() {
923+
this = guard
924+
}
925+
926+
override predicate sanitizes(boolean outcome, Expr e) {
927+
guard.blocks(outcome, e)
928+
}
929+
930+
override predicate appliesTo(Configuration cfg) { any() }
931+
}
917932
}

javascript/ql/src/semmle/javascript/security/dataflow/TaintedPath.qll

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,8 @@ module TaintedPath {
3535
guard instanceof StartsWithDotDotSanitizer or
3636
guard instanceof StartsWithDirSanitizer or
3737
guard instanceof IsAbsoluteSanitizer or
38-
guard instanceof ContainsDotDotSanitizer
38+
guard instanceof ContainsDotDotSanitizer or
39+
guard instanceof DataFlow::VarAccessBarrierGuard
3940
}
4041

4142
override predicate isAdditionalFlowStep(

0 commit comments

Comments
 (0)