Python: Move experimental TimingAttackAgainstSensitiveInfo to new dataflow API

This commit is contained in:
Rasmus Wriedt Larsen
2023-08-25 17:23:50 +02:00
parent 1a4e8d9464
commit 8abd3430a2

View File

@@ -15,22 +15,25 @@ import python
import semmle.python.dataflow.new.DataFlow import semmle.python.dataflow.new.DataFlow
import semmle.python.dataflow.new.TaintTracking import semmle.python.dataflow.new.TaintTracking
import experimental.semmle.python.security.TimingAttack import experimental.semmle.python.security.TimingAttack
import DataFlow::PathGraph import TimingAttackAgainstSensitiveInfoFlow::PathGraph
/** /**
* A configuration tracing flow from obtaining a client Secret to a unsafe Comparison. * A configuration tracing flow from obtaining a client Secret to a unsafe Comparison.
*/ */
class ClientSuppliedSecretConfig extends TaintTracking::Configuration { private module TimingAttackAgainstSensitiveInfoConfig implements DataFlow::ConfigSig {
ClientSuppliedSecretConfig() { this = "ClientSuppliedSecretConfig" } predicate isSource(DataFlow::Node source) { source instanceof SecretSource }
override predicate isSource(DataFlow::Node source) { source instanceof SecretSource } predicate isSink(DataFlow::Node sink) { sink instanceof NonConstantTimeComparisonSink }
override predicate isSink(DataFlow::Node sink) { sink instanceof NonConstantTimeComparisonSink }
} }
from ClientSuppliedSecretConfig config, DataFlow::PathNode source, DataFlow::PathNode sink module TimingAttackAgainstSensitiveInfoFlow =
TaintTracking::Global<TimingAttackAgainstSensitiveInfoConfig>;
from
TimingAttackAgainstSensitiveInfoFlow::PathNode source,
TimingAttackAgainstSensitiveInfoFlow::PathNode sink
where where
config.hasFlowPath(source, sink) and TimingAttackAgainstSensitiveInfoFlow::flowPath(source, sink) and
( (
source.getNode().(SecretSource).includesUserInput() or source.getNode().(SecretSource).includesUserInput() or
sink.getNode().(NonConstantTimeComparisonSink).includesUserInput() sink.getNode().(NonConstantTimeComparisonSink).includesUserInput()