JS: Auto-patch diff informed queries

This commit is contained in:
Asger F
2024-12-19 13:22:17 +01:00
parent d8b1d00905
commit fd763a0883
71 changed files with 173 additions and 0 deletions

View File

@@ -283,6 +283,15 @@ module PropNameTrackingConfig implements DataFlow::StateConfigSig {
// flows through any contents, apart from a capture content.
result = 1
}
predicate observeDiffInformedIncrementalMode() {
// TODO(diff-informed): Manually verify if config can be diff-informed.
// ql/src/Security/CWE-915/PrototypePollutingFunction.ql:516: Flow call outside 'select' clause
// ql/src/Security/CWE-915/PrototypePollutingFunction.ql:519: Flow call outside 'select' clause
// ql/src/Security/CWE-915/PrototypePollutingFunction.ql:520: Flow call outside 'select' clause
// ql/src/Security/CWE-915/PrototypePollutingFunction.ql:524: Flow call outside 'select' clause
none()
}
}
class FlowState = PropNameTrackingConfig::FlowState;

View File

@@ -87,6 +87,8 @@ module CodeInjectionConfig implements DataFlow::StateConfigSig {
state1 = TTaint() and
state2 = TUrlConstructor()
}
predicate observeDiffInformedIncrementalMode() { any() }
}
module CodeInjectionFlow = TaintTracking::GlobalWithState<CodeInjectionConfig>;

View File

@@ -33,6 +33,8 @@ module EnvValueAndKeyInjectionConfig implements DataFlow::ConfigSig {
)
)
}
predicate observeDiffInformedIncrementalMode() { any() }
}
module EnvValueAndKeyInjectionFlow = TaintTracking::Global<EnvValueAndKeyInjectionConfig>;

View File

@@ -19,6 +19,8 @@ module EnvValueInjectionConfig implements DataFlow::ConfigSig {
predicate isSink(DataFlow::Node sink) {
sink = API::moduleImport("process").getMember("env").getAMember().asSink()
}
predicate observeDiffInformedIncrementalMode() { any() }
}
module EnvValueInjectionFlow = TaintTracking::Global<EnvValueInjectionConfig>;

View File

@@ -41,6 +41,8 @@ module TokenBuiltFromUuidConfig implements DataFlow::ConfigSig {
predicate isSource(DataFlow::Node source) { source instanceof PredictableResultSource }
predicate isSink(DataFlow::Node sink) { sink instanceof TokenAssignmentValueSink }
predicate observeDiffInformedIncrementalMode() { any() }
}
module TokenBuiltFromUuidFlow = TaintTracking::Global<TokenBuiltFromUuidConfig>;

View File

@@ -17,6 +17,8 @@ module UnverifiedDecodeConfig implements DataFlow::ConfigSig {
predicate isSource(DataFlow::Node source) { source instanceof ActiveThreatModelSource }
predicate isSink(DataFlow::Node sink) { sink = unverifiedDecode() }
predicate observeDiffInformedIncrementalMode() { any() }
}
module UnverifiedDecodeFlow = TaintTracking::Global<UnverifiedDecodeConfig>;
@@ -25,6 +27,8 @@ module VerifiedDecodeConfig implements DataFlow::ConfigSig {
predicate isSource(DataFlow::Node source) { source instanceof ActiveThreatModelSource }
predicate isSink(DataFlow::Node sink) { sink = verifiedDecode() }
predicate observeDiffInformedIncrementalMode() { any() }
}
module VerifiedDecodeFlow = TaintTracking::Global<VerifiedDecodeConfig>;

View File

@@ -23,6 +23,13 @@ module DecodeWithoutVerificationConfig implements DataFlow::ConfigSig {
or
sink = verifiedDecode()
}
predicate observeDiffInformedIncrementalMode() {
// TODO(diff-informed): Manually verify if config can be diff-informed.
// ql/src/experimental/Security/CWE-347/decodeJwtWithoutVerificationLocalSource.ql:32: Flow call outside 'select' clause
// ql/src/experimental/Security/CWE-347/decodeJwtWithoutVerificationLocalSource.ql:42: Flow call outside 'select' clause
none()
}
}
module DecodeWithoutVerificationFlow = TaintTracking::Global<DecodeWithoutVerificationConfig>;

View File

@@ -24,6 +24,8 @@ module DecompressionBombConfig implements DataFlow::ConfigSig {
addstep.isAdditionalTaintStep(node1, node2)
)
}
predicate observeDiffInformedIncrementalMode() { any() }
}
module DecompressionBombFlow = TaintTracking::Global<DecompressionBombConfig>;

View File

@@ -28,6 +28,8 @@ module SsrfConfig implements DataFlow::ConfigSig {
}
predicate isBarrierOut(DataFlow::Node node) { strictSanitizingPrefixEdge(node, _) }
predicate observeDiffInformedIncrementalMode() { any() }
}
module SsrfFlow = TaintTracking::Global<SsrfConfig>;

View File

@@ -33,6 +33,8 @@ module CorsPermissiveConfigurationConfig implements DataFlow::StateConfigSig {
}
predicate isBarrier(DataFlow::Node node) { node instanceof Sanitizer }
predicate observeDiffInformedIncrementalMode() { any() }
}
module CorsPermissiveConfigurationFlow =